计算机软件基础二-5软件工程基础-辅助_第1页
计算机软件基础二-5软件工程基础-辅助_第2页
计算机软件基础二-5软件工程基础-辅助_第3页
计算机软件基础二-5软件工程基础-辅助_第4页
计算机软件基础二-5软件工程基础-辅助_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 软件工程,1.1 软件工程概述 1.2 软件定义阶段 1.3 需求分析 1.4 系统设计,1.5 详细设计 1.6 编码 1.7 软件测试 1.8 软件维护,11 软件工程概述,一、软件的特点 1存在形式:以程序或文档的形式存放于内存、磁盘、光盘等存储介质中。 2生产成本:主要耗费在软件开发过程中,生产过程复杂、耗费时间长,成本昂贵。 3使用特点:无变质、磨损问题。 4生产方法:主要依靠人工开发。,1.1.1 软件危机,二、 软件发展的三个阶段,1程序设计阶段(1946年 1956年) (1)生产方式:个体手工生产。 (2)使用工具:机器语言、汇编语言。 (3)开发特点:过多追求时间、

2、空间效率和编程技巧,可读性差。 2程序系统阶段(1956年 1968年) (1)生产方式:小集团合作生产。 (2)生产工具:高级语言。 (3)开发特点:依靠个人技巧,开发人员素质较差、开发技术落后。,软件发展的三个阶段,3软件工程阶段(1968年至今) (1)生产方式:工程化生产。 (2)生产工具:面向对象语言、高级语言,各种开 发环境及工具。 (3)开发特点:网络化、分布式处理。,一系列问题相继出现,三、 软件危机,1软件危机的产生 来源:计算机软件的规模越来越大,结构越来越复杂。 定义: 指在软件开发和维护过程中所遇到的一系列严重问题,几乎所有的软件都不同程度地具有这些问题。(1968年,

3、北大西洋公约组织计算机科学家在德国召开国际会议,正式提出“软件危机”这个名词),软件开发人员随心所欲地进行编程,缺乏系统的、科学的开发方法的指导。 轻视软件维护工作,致使维护费用占软件总费用的55%到70%。 许多软件错误在运行之前难以发现,且软件规模庞大需要多人合作完成。,软件危机产生的主要原因,软件危机的表现,难以正确估计软件开发成本和进度; 难以确保软件系统的功能和性能最终能满足用户的要求,常常开发出的软件不能满足用户的实际要求; 难以确保软件的质量尤其是可靠性,软件质量往往存在问题; 软件没有配置适当的文档、这常常使团队开发和软件维护很困难,因此软件可维护性差; 软件发展的速度跟不上硬

4、件的发展,软件在计算机系统中所占的成本逐年上升,生产效率却无法满足市场的需求。,1.1.2软件工程,产生意义 指导软件开发和维护工作,尽量避免软件危机带来的严重后果。 目标 以尽量小的代价和尽量少的时间开发出较高性能的合格软件。 内容 采用工程的概念、原理、技术和方法开发和维护软件,将经过证明的正确的管理技术和当前最好的技术方法结合起来用于帮助提高软件的生产效率及质量,缩短软件的开发周期。,(1)降低软件费用。 (2)提高软件的质量。 (3)提高软件的可维护性。 (4)提高软件的生产效率。 (5)提高软件的可重用性 。,软件工程中研究的主要问题,概念:软件生命周期模型是指从提出软件开发要求开始

5、直至软件报废的整个过程。,该方法是从时间角度对软件开发和维护的复杂问题进行分解,把软件生命的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,它同时又为下一个阶段做准备,是下一个阶段开始的前提。这样可以将复杂的开发工作通过有限的确定步骤,逐步从抽象的逻辑概念转化为具体的物理实现。,1.1.3软件生命周期法(瀑布模型),阶段 关键问题 结束标准 问题定义 问题是什么? 关于规模和目标的报告书 系统的高层逻辑模型: 可行性研究 有可行的解吗? 数据流图 成本效益分析 系统的逻辑模型 需求分析 系统必须做什么 数据流图 数据字典 算法描述 可能的解法: 概括地说,应该如 系统流程图 总体设计

6、何解决这个问题? 成本/效益分析 推荐的系统结构 层次图或结构图 详细设计 怎样具体地实现这 编码规格说明: 个系统 HIPO图或PDL图 编码和单元测试 正确的程序模块 源程序清单;单元测试方案和结果 综合测试 符合要求的软件 综合测试方案的结果;完整一致的软 件配置 维护 系统能长期满意地 软件问题报告单 运行 软件修改报告单,1. 每个阶段都必须提供完整的文档,以作为该阶段工作结束的标志。 2. 每个阶段结束前都应对所完成的文档进行评审,以便尽早发现问题,改正错误。每个阶段的文档既是前一阶段的工作总结,又是下一阶段工作开始的依据。只有经过认真评审的文档,才能集思广益,保证该阶段工作的正确

7、性。,瀑布模型必须坚持以下原则,12 软件定义阶段,主要任务: 确定系统要解决的关键问题。 实现方法: 1用户提出项目性质,工程目标和规模等初步要求。 2 系统分析员对用户深入调查,对其进行补充完善。 3 经过会议评审方式沟通双方对此项目的技术用语、性质、功能、性能、限制和约束等。 需要交付的文档: 项目任务书。,1.2.1 问题定义,1.2.2 可行性研究,主要任务 用最小的代价在尽可能短的时间内确定问题是否能够解决。 实现方法: 1. 复查项目任务书,消除一切含混不清的问题。 2. 搞清楚现有系统的功能及缺陷。 3. 导出新系统的高层逻辑模型 数据流图和数据字典是描述数据系统逻辑模型的有力

8、工具。,可行性研究,4. 重新定义问题,5.导出和评价供选择的解法,6. 推荐行动方案,并说明理由。 7. 根据所选中的方案,分析员草拟开发计划,需要书写的文档: 软件可行性研究报告。,13 需求分析,1.3.1需求分析的方法步骤,1. 进一步准确定义对系统包括功能要求、性能要求、运行要求及以后的修改、维护及扩充要求在内的综合要求; 2. 分析对系统的数据规范化,数据完整性约束等要求; 3. 修改和完善系统的逻辑模型; 4. 修改开发计划;,需求分析的方法步骤,实现方法: 1沿数据流图回溯 看所有的输出能否从当前的输入及运算数据中得到。 2用户复审 请用户复审前一步的工作结果,看是否准确、全面

9、。 3细化数据流图 反复进行前两步,把数据流图细化到最底层。 4修正开发计划 随着工作的深入、分析员能制定出更详细、准确的开发计划。 5审查 召开评审会议对需求分析阶段的工作成果进行正式的审查。,1. 4 系统设计,主要任务:把系统分析阶段确定的逻辑模型向物理模型(在计算机上的实现方法)转化。 系统设计阶段分为: 概要设计和详细设计两个阶段。,概要设计的任务,1将系统划分成模块(最重要的任务); 2决定每个模块的功能; 3决定模块的调用关系; 4决定模块间的接口; 5进行数据库逻辑设计;,模块的划分,模块独立性的两个度量标准:耦合性和内聚性。,耦合性:表示模块间相互关联的程度。 模块间的耦合性

10、的强弱取决于模块间接口的复杂性,接口越简单,耦合性越低,模块独立性越好。反之,模块独立性则差。,常见的四种耦合: 1数据耦合2控制耦合 3公共耦合4内容耦合,内聚性,内聚性:是指模块内部各成分之间联系的强弱。内聚性越好,模块内部各成分的联系强度越大,会增加可理解性、可维护性和可靠性。内聚可分为低、中、高三类:,软件设计追求高内聚、低耦合,内聚性,内聚性:是指模块内部各成分之间联系的强弱。内聚性越好,模块内部各成分的联系强度越大,会增加可理解性、可维护性和可靠性。内聚可分为低、中、高三类:,软件设计追求高内聚、低耦合,描述系统结构采用的图形工具,层次图,2.HIPO图,结构图,消 扣 扣款单 费

11、 款 单 单 合计,消费单,扣款计算,获得消费单,计算扣款,合计个人扣款,1.4.3 模块设计的准则,1改进软件结构提高模块独立性。通过模块分解与合并,力求降低耦合提高内聚。 2模块规模应适中,一个利于理解的模块通常不要超过60行。 3深度、宽度、扇入和扇出都应适当。 深度表示软件结构中控制的层数 宽度是软件结构内同一个层次上的模块个数的最大值。 扇出数是一个模块直接调用的模块数目。 扇入数是一个模块被多少个模块调用。 好的系统中模块的平均扇出数通常是3或4(扇出的上限通常是59)。好的软件结构中通常顶层扇出比较高,中层扇出较少,底层模块有较高的扇入。,模块设计的准则,4模块的作用域应在控制域

12、之内。模块的作用域为模块内一个受判定影响的所有模块的集合。模块控制域是这个模块本身以及所有直接或间接从属于他的模块的集合。 5力争降低模块接口的复杂度。 6设计单入口和单出口的模块。这是结构化程序设计的基本要求。 7模块的功能应能预测。既对给定的输入应产生相同的输出。,15 详细设计,主要任务 确定每个模块的具体实现算法。 经常采用的方法: 结构化程序设计方法(简称SP方法) 结构化程序设计是一种程序设计的技术,它采用自顶向下逐步求精的设计方法和单入口、单出口的控制结构。,结构化程序设计的优点:,(1)自顶向下逐步求精的方法符合人类解决复杂问题的普遍规律,可提高软件开发的成功率和生产率。 (2

13、)它是先全局后局部,先整体后细节,先抽象后具体的逐步求精过程。,(a) 顺序结构 (b)选择结构,(c)循环结构,优点:对控制流程的描述很直观,便于初学者学习掌握。 缺点: 使程序员过早地考虑程序的控制流程,而忽略程序的全局结构; 程序流程图中的箭头代表控制流,使程序员不受约束地随意转移控制; 程序流程图难以表示数据结构;,常用的工具-流程图,(2) NS图,(a)顺序结构 (b)if thenelse,(c) CASE 型多分支,(d) dowhile,(e) dountil (f) 调用子程序A,CASE1 CASE 2 CASEn,NS图优点为:, 程序结构都用方框表示,无论并列或嵌套,

14、程序结构皆清晰可见,功能域明确; 不能作任意的功能控制; 易于确定局部或全局数据的作用域; 既可表示嵌套,也可表示模块的层次。,PAD图只能描述结构化程序所允许的几种标准结构,它是用二维树形结构的图来表示程序控制流程的,克服了传统流程图不能清晰表示程序结构的缺点,也不像NS图那样把全部程序约束在一个方框内。,(3) PAD(Problem Analysis Diagram)图, 用PAD符号设计的程序必定是结构化程序。 PAD图中最左的竖线是程序的主线,即第一层结构。随着程序层次的增加而向右延伸。 PAD图易读、易懂。 将PAD图转换成高级语言源程序十分容易。 PAD图支持自顶向下逐步求精的方

15、法,它既可用于表示程序逻辑,也可用于描述数据结构。,PAD图的优点,能清晰地表示复杂的条件组合与应做的操作之间的对应关系。,(4) 判定表和判定表,(6)伪代码和PDL(Program Design Language)语言,伪代码属于文字形式表达工具。伪代码形式上与代码相似,用于描述软件设计,但不能在计算机上执行。用伪代码描述,其工作量比画图小,且易于转换成真正的代码。,例有下列算法: 令“最大数”=“数组的第一个元素”。 从第二个元素至最末一个元素做: 若“新元素”“最大数”,则“最大数”=“新元素”。 用PDL语言可写成: MAX=A1 DO FOR I=2 TO N IF MAXAI T

16、HEN MAX=AI ENDIF END DO PRINT MAX,1.6 编码,任务:把设计阶段所产生的设计结果转换程序。 注意: 1. 选择一种良好的开发工具 根据问题的性质、规模、费用、喜好等选择一种较为合理的实现工具。 2. 程序员的编程风格对程序的可靠性及可维护性都有非常重要的影响。,1.6.3 程序风格,1内部文档 (1)标识符:要尽量做到“见名知义” 。 (2)注释:加入适当的注释。一些正规的程序中注释行占整个程序的三分之一到一半、甚至更多。 (3)书写格式:不同的程序单元应用空行隔开。不要在一行上书写多条语句。对于嵌套的循环或分支结构使用缩排格式。,良好的程序设计风格应注意的问

17、题,2数据说明 应对程序中要使用的数据加以说明,并规定变量按类型说明的次序。 3语句 程序中的语句应写得简明、直截了当。避免使用华而不实的程序设计技巧。 4效率 效率主要依靠好的设计和优秀的算法来达到、而不能指望从语句的改进方面来获得很大提高。,良好的程序设计风格应注意的问题,5输入输出 输入数据的格式力求简单、并应有完备的检错和恢复措施。 输入格式要尽可能统一; 不以计数的办法,而以文件结尾或其他特定标志来结束输入; 输入输出最好有提示; 输出格式美观、清晰、易理解;,良好的程序设计风格应注意的问题,1.7 软件测试,一.软件测试的定义 使用人工或自动手段来运行或测定某个系统的过程,其目的在

18、于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别,即检查程序是否正确。 二.软件测试的主要任务 以较少的用例、时间和人力找出软件中潜在的各种错误和缺陷,以确保系统的质量。,1静态测试方法 :在不运行程序测试。,2动态测试方法:通过在计算机上运行被测试程序,利用所设计的测试用例对程序进行测试。,常用的测试方法,1.7.3 测试用例设计,黑盒测试方法:又称功能测试,它把程序看作一个黑盒子,完全不考虑程序内部的结构和处理过程,测试者只考虑该程序输入和输出之间的关系,或只考虑程序的功能。,动态测试法,常用的策略:等价划分类、边界值法、错误推测法。,白盒测试又称结构测试,它是根据被测程序的逻辑结构设计测试用例。为了追求测试覆盖率,减少测试的盲目性,为此发展了多种覆盖技术。,穷举测试对被测程序进行穷举测试是不现实的。,动态测试法,通常把软件测试阶段的工

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论