第2章软件工程_第1页
第2章软件工程_第2页
第2章软件工程_第3页
第2章软件工程_第4页
第2章软件工程_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章 软件工程2.1 软件工程的基本概念2.2 软件开发过程2.3 系统定义2.4 软件实现2.5 软件维护2.6 软件开发管理2.1 软件工程的基本概念2.1.1 软件危机及其形成原因2.1.2 软件工程的定义2.1.3 软件工程的基本原则2.1.4 软件工程的基本内容一、一、 软件的概念软件的概念 软件软件是计算机系统中与硬件相互依存的另一部是计算机系统中与硬件相互依存的另一部分,它是包括分,它是包括程序程序、数据数据及其相关及其相关文档文档的完整集合。的完整集合。其中,其中,程序程序是按事先设计的功能和性能要求编是按事先设计的功能和性能要求编写的指令序列;写的指令序列;数据数据是使程序

2、能正常操纵信息的数是使程序能正常操纵信息的数据结构;据结构;文档文档是与程序开发、维护和使用有关的图是与程序开发、维护和使用有关的图文材料。文材料。注:程序并不是软件,程序只是软件的组成部分。注:程序并不是软件,程序只是软件的组成部分。2.1.1 软件危机及其形成原因二、软件的特点二、软件的特点(1)软件是一种逻辑实体。)软件是一种逻辑实体。(2)软件的开发,是人的智力的高度发挥,而不是)软件的开发,是人的智力的高度发挥,而不是传统意义上的硬件制造。传统意义上的硬件制造。(3)软件维护与硬件的维修有着本质的差别。)软件维护与硬件的维修有着本质的差别。(4)软件的开发和运行常常受到计算机系统的限

3、制,)软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。对计算机系统有着不同程度的依赖性。(5)软件的开发至今尚未完全摆脱手工艺的开发方)软件的开发至今尚未完全摆脱手工艺的开发方式,使软件的开发效率受到很大限制。式,使软件的开发效率受到很大限制。(6)软件的开发是一个复杂的过程。)软件的开发是一个复杂的过程。(7)软件的成本非常高昂。)软件的成本非常高昂。三、软件危机及其形成原因什么是软件危机 l软件不符合用户的实际需要 l软件价格昂贵 l软件开发项目超支和延期 l软件质量低,可靠性差 l软件缺少适当的文档资料l难于修改和维护软件软件危机的形成原因l软件本身是逻辑部件

4、,质量难以评价,潜在的错误在所难免 l软件规模越来越大,软件结构越来越复杂 l忽视需求分析的重要性,急于开始编程 l轻视软件测试和轻视软件维护 l软件开发技术落后,生产方式落后,开发工具落后 软件危机的解决方法 必须消除存在的错误认识 、树立软件工程观念用工程化方法和途径来开发和维护软件 开发和使用更好的软件工具 应该采取必要的管理措施 总之: 技术措施 + 组织管理措施按工程化的原则和方法来组织和规范软件开发过程,解决软件研制中面临的困难和混乱,从而根本上解决软件危机。所谓软件工程,就是研究大规模程序设计中的方法、工具和管理的一门工程科学。1968年北约组织在前联邦德国格密斯举行的国际学术会

5、议上正式提出并使用了“软件工程软件工程”的概念,运用工程学的基本原理和方法来组织和管理软件生产。后来还发展了相关的心理学、生理学和经济学等方面的学科。软件工程诞生了,它是解决软件危机唯一有效的方法。定义一:软件工程是科学知识在设计和构造计算机程序以及开发、运作和维护这些程序所要求的有关文档编制中的实际应用。定义二:为了经济地获得可靠的能在实际的计算机上运行的软件所确立和使用的健全的工程原理。定义三:对软件开发、运行、维护、退役的系统研究方法。 定义四:对软件开发、运行、维护的系统化的、有纪律的、可定量的方法的应用,即对软件的工程化的应用 。定义五:软件工程是指导计算机软件开发和维护的一门学科,

6、它采用工程的概念、原理、技术和方法,把经过时间考验而证明是正确的管理技术和与技术方法结合起来用于开发软件。2.1.2 软件工程的定义l用分阶段的生命周期计划严格管理 l坚持进行阶段评审 l实行严格的产品控制l采用现代程序设计技术 l工作成果应当能够清楚地评审l开发小组的成员应少而精 l承认不断改进软件工程实践的必要性2.1.3 七条基本原则l软件生存周期模型 指导整个软件开发过程l软件分析l系统分析、可行性分析、软件开发计划、需求分析 l软件设计l总体设计、详细设计 l软件实现l编程序l软件测试 l软件维护 l软件管理 l成本估算、风险分析、进度安排、人员组织、 软件质量保证2.1.4 软件工

7、程的基本内容2.2 软件开发过程2.2.1 软件开发的主要阶段2.2.2 软件生命周期模型2.2.3 模块化软件开发原则2.2.4 软件开发方法软件从产生、发展到淘汰要经历定义、开发和维护三大阶段定义阶段细分成 可行性论证、需求分析开发阶段细分成 总体设计、详细设计、实现、集成测试和确认测试 维护阶段细分成 软件使用、修改维护、退役 2.2.1 软件开发的主要阶段软件产品从形成概念开始,经过开发、使用和维护,直到退役的全过程九个阶段:2.2.2 软件生命周期模型软件生命周期瀑布模型将软件生存周期的各项活动规定为依照固定顺序连接的若干阶段工作,形如瀑布流水,最终得到软件产品。瀑布模型的特点线性开

8、发序列:每一阶段任务必须通过评审才能进 入下一阶段,直线前进避免大的返工,允许局部的返工瀑布模型的局限性明确全部需求困难甚至不现实开发周期过长、用户不能及时提出修改意见软件生存周期渐增模型 初初步步需需求求分分析析 快快速速设设计计 建建造造原原型型 用用户户评评估估原原型型(新新需需求求) 对对原原型型加加工工 开开发发产产品品 开开始始 结结束束 又称演化模型演化模型又称原型模型原型模型用主动的正常的迭代避免被迫的不正常的反复程序员与用户反复交互原型模型的特点采用软件重用技术和强有力的快速开发工具 采用主动的、正常的迭代避免了瀑布模型被迫 的、不正常的返工 有助于用户和软件开发人员对需求的

9、定义和确认 原型模型的局限性不收敛于开发者预定目标 资源规划和管理较为困难 更新文档麻烦 l抽象 l自顶向下逐步求精l模块化l信息隐蔽与局部化l模块独立l启发式规则2.2.3 模块化软件开发原则把大型软件按照规定的原则划分为一个个较小的、相把大型软件按照规定的原则划分为一个个较小的、相对独立但又相关的模块的设计方法,叫做对独立但又相关的模块的设计方法,叫做模块化设计模块化设计(modular designmodular design)。)。模块模块(modulemodule)是数据说明和是数据说明和可执行语句等程序对象的集合,每个模块单独命名并可执行语句等程序对象的集合,每个模块单独命名并且可

10、以通过名字对模块进行访问且可以通过名字对模块进行访问实现模块化设计的重要指导思想是分解、信息隐藏和实现模块化设计的重要指导思想是分解、信息隐藏和模块独立性。模块独立性。分解分解 设函数设函数C(x)定义问题定义问题x的复杂程度,函数的复杂程度,函数E(x)确定确定解决问题解决问题x所需要的工作量(时间)。对于两个问题所需要的工作量(时间)。对于两个问题Pl和和P2,如果如果 C(P1)C(P2),显然显然 E(P1)E(P2)根据人类解决一般问题的经验,如果一个问题由根据人类解决一般问题的经验,如果一个问题由Pl和和P2两个问题组合而成,那么它的复杂程序大于分别考两个问题组合而成,那么它的复杂

11、程序大于分别考虑每个问题时的复杂程度之和,即虑每个问题时的复杂程度之和,即 C(PlP2)C(P1)C(P2) 综上所述,可得到下面的不等式综上所述,可得到下面的不等式 E(PlP2)E(Pl)E(P2)模块化l模块l完成特定的子功能l可以组合、分解、更换的单元,如过程、函数、子程序、宏等l模块化l解决一个复杂问题时,自顶向下逐层将软件分解成若干模块的过程l目的:降低软件的复杂性模块化软件开发原则模块划分的指导原则l模块可分解性:能把问题分解为子问题的系统化机制 l模块可组装性 :能把现有的模块组装成新系统 l模块可理解性 :一个模块作为独立单元无需参考其它模块来理解 l模块连续性:系统需求的

12、微小修改只导致对个别模块,而不是对整个系统的修改 l模块保护性 :一个模块内出现异常情况时,它的影响局限在该模块内部 模块化软件开发原则模块与成本的关系 M 软件总成本 成本或工作量 最小成本区 接口成本 模块数目 成本/模块 模块化软件开发原则信息隐蔽与局部化l信息隐蔽:一个模块内包含的信息(过程或数据) 对于不需要这些信息的其它模块来说不可见(不能访问)l局部化:将关系密切的软件元素的位置尽量靠近l信息隐蔽与局部化有利于软件的可维护性,可以防止误操作和误修改模块化软件开发原则模块独立l模块独立性:模块化、抽象、信息隐蔽和局部化直接结果l模块独立的好处:l使软件开发更容易、适合分工合作l使软

13、件测试和维护更容易l模块独立的度量l内聚:一个模块内部各元素之间彼此结合的紧密程度的度量l耦合:不同模块之间互连程度的度量模块化软件开发原则启发式规则l改进软件结构提高模块独立性l模块规模应该适中l模块之间的调用关系应当按照层次化组织 l模块的深度、宽度、扇出和扇入都应适当l设计单入口单出口的模块l模块功能应该可以预测模块化软件开发原则对软件分析方法、软件设计方法软件实现(编码)方法的总称。l结构化方法(Structured Method) l面向对象方法(Object-Oriented Method) 2.2.4 软件开发方法2.3 系统定义2.3.1 可行性分析2.3.2 需求分析可行性分

14、析可行性分析l目的目的l用最小的代价在尽可能短的时间内确定问题是否用最小的代价在尽可能短的时间内确定问题是否能够解决能够解决 l任务任务l在澄清了问题定义之后,分析员首先应该导出系在澄清了问题定义之后,分析员首先应该导出系统的逻辑模型,然后从系统逻辑模型出发,探索统的逻辑模型,然后从系统逻辑模型出发,探索出若干种可供选择的主要解法(即系统实现方出若干种可供选择的主要解法(即系统实现方案)。最后仔细研究每种解法的可行性。案)。最后仔细研究每种解法的可行性。2.3.1 可行性分析一般说来,可行性研究应该从下述几方面进行:一般说来,可行性研究应该从下述几方面进行:(1 1)技术可行性技术可行性:指使

15、用现有的技术能否完成这个:指使用现有的技术能否完成这个项目。项目。(2 2)经济可行性经济可行性:指通过对软件开发项目进行成本:指通过对软件开发项目进行成本/ /效益估计,以确定软件系统可能带来的经济效益能效益估计,以确定软件系统可能带来的经济效益能否超过研制和维护此系统所需的费用。否超过研制和维护此系统所需的费用。(3 3)社会因素的考虑社会因素的考虑:软件开发是否会侵犯他人、:软件开发是否会侵犯他人、集体或国家的利益,是否违反国家的法律并可能由集体或国家的利益,是否违反国家的法律并可能由此而承担法律责任。此而承担法律责任。l步骤步骤l确定项目规模和目标确定项目规模和目标 l研究正在运行的系

16、统研究正在运行的系统 l建立新系统的高层逻辑模型建立新系统的高层逻辑模型 l导出和评价各种方案导出和评价各种方案 l推荐可行方案推荐可行方案 l编写可行性分析报告编写可行性分析报告 软件开发计划软件开发计划 通过可行性分析,如果开发软通过可行性分析,如果开发软件系统可行的话,接着要制定软件的开发计划。件系统可行的话,接着要制定软件的开发计划。l内容内容l资源计划资源计划 :人力资源:人力资源 、硬件资源、硬件资源 、软件资源、软件资源 l成本预算成本预算 :估计总的开发成本:估计总的开发成本 l进度安排进度安排 :确定最终的软件交付日期:确定最终的软件交付日期 、在交付、在交付日期内安排和分配

17、工作量日期内安排和分配工作量 需求分析需求分析l需求分析目标需求分析目标l解决解决“做什么做什么( (What to do)”What to do)”,而不是而不是“怎么做怎么做( (How toHow to do)”do)”l既是软件开发依据,也是软件验收标准既是软件开发依据,也是软件验收标准 l与用户充分沟通,去伪存真,去粗存精与用户充分沟通,去伪存真,去粗存精l通信瓶颈:用户通信瓶颈:用户 vsvs 开发人员开发人员l阶段性标志:软件需求规格说明阶段性标志:软件需求规格说明( (SRSSRS:Software Requirements Specification)Software Req

18、uirements Specification) 2.3.2 2.3.2 需求分析需求分析一、一、需求分析任务需求分析任务l确定软件系统的综合要求确定软件系统的综合要求l功能要求功能要求l性能要求性能要求l系统数据接口要求系统数据接口要求l安全性安全性l保密性和可靠性要求保密性和可靠性要求l系统运行要求系统运行要求l异常处理要求等异常处理要求等l分析软件系统的数据要求分析软件系统的数据要求 l建立系统的逻辑模型建立系统的逻辑模型 l评估项目开发计划评估项目开发计划 (成本、进度)(成本、进度)二、需求分析工具、需求分析工具l层次方框图层次方框图 lWarnierWarnier图图 lIPOIP

19、O图(输入图(输入/ /处理处理/ /输出)输出)三三、需求分析方法需求分析方法 结构化分析方法结构化分析方法结构化分析方法(结构化分析方法(Structured Analysis,简称简称SA方法)是方法)是70年年代中期提出的一种面向数据流、自顶向下、逐步求精进行需求代中期提出的一种面向数据流、自顶向下、逐步求精进行需求分析的方法。分析的方法。结构化分析方法中使用的工具主要包括:结构化分析方法中使用的工具主要包括:数据流图、数据字典、结构化语言、判定表和判定树数据流图、数据字典、结构化语言、判定表和判定树。其中数据流图用以表达系统内数据的运动情况;数据字典用以定义其中数据流图用以表达系统内

20、数据的运动情况;数据字典用以定义系统中的数据;结构化语言、判定表和判定树都是用以描述数据流系统中的数据;结构化语言、判定表和判定树都是用以描述数据流的加工的工具。的加工的工具。面向对象分析方法面向对象分析方法2.4 软件实现2.4.1 总体设计2.4.2 详细设计2.4.3 编码2.4.4 测试一、总体设计内容、总体设计内容 总体设计又称总体设计又称概要设计概要设计解决解决“如何做如何做( (HowHow to do)” to do)”设计供选择的方案设计供选择的方案 推荐最佳方案推荐最佳方案 设计软件结构设计软件结构, ,划分功能模块,定义各功能模块划分功能模块,定义各功能模块 的接口的接口

21、设计数据结构和数据库设计数据结构和数据库 用户界面设计用户界面设计 制定测试计划制定测试计划 编写总体设计阶段的文档编写总体设计阶段的文档 评审总体设计方案评审总体设计方案2.4.1 2.4.1 总体设计总体设计软件实现二、总体设计的图形工具、总体设计的图形工具层次图层次图HIPOHIPO图(层次图加输入图(层次图加输入/ /处理处理/ /输出图)输出图)结构图结构图软件实现三、总体设计的设计方法、总体设计的设计方法结构化设计结构化设计自顶向下自顶向下基于数据流的设计方法基于数据流的设计方法面向对象设计面向对象设计软件实现详细设计以总体设计阶段的工作为基础的,但又不详细设计以总体设计阶段的工作

22、为基础的,但又不同于总体设计,同于总体设计,主要表现为以下两个方面主要表现为以下两个方面:(1)在总体设计阶段,数据项和数据结构以比较)在总体设计阶段,数据项和数据结构以比较抽象的抽象的方式描述方式描述,而详细设计阶段则应在此基础上给出足够,而详细设计阶段则应在此基础上给出足够详详细描述细描述。(2)详细设计要提供关于算法的更多的细节,)详细设计要提供关于算法的更多的细节,例如例如:总总体设计体设计可以声明一个模块的作用是对一个表进行排序,可以声明一个模块的作用是对一个表进行排序,详细设计详细设计则要确定使用哪种排序算法。在详细设计阶段则要确定使用哪种排序算法。在详细设计阶段为每个模块增加了足

23、够的细节后,程序员才能够以相当为每个模块增加了足够的细节后,程序员才能够以相当直接的方式进行下一阶段的编码工作。直接的方式进行下一阶段的编码工作。2.4.2 2.4.2 详细设计详细设计软件实现详细设计的任务和原则详细设计的任务和原则一、详细设计的任务一、详细设计的任务 1 1)确定每个模块的算法。)确定每个模块的算法。 2 2)确定每一个模块的数据组织。)确定每一个模块的数据组织。 3 3)为每个模块设计一组测试用例。)为每个模块设计一组测试用例。 4 4)编写详细设计说明书。)编写详细设计说明书。软件实现二、详细设计的原则二、详细设计的原则(1 1)模块的逻辑描述正确可靠、清晰易读。)模块

24、的逻辑描述正确可靠、清晰易读。(2 2)采用结构化程序设计方法,改善控制结构,)采用结构化程序设计方法,改善控制结构,降低程序复杂度,提高程序的可读性、可测试降低程序复杂度,提高程序的可读性、可测试性和可维护性。性和可维护性。 软件实现三、详细设计的工具、详细设计的工具过程设计语言过程设计语言( (PDLPDL:Procedure Design Procedure Design Language)Language)又称伪码,半形式化、易编辑、易自动生成又称伪码,半形式化、易编辑、易自动生成程序流程图程序流程图易上手、非结构化易上手、非结构化盒图(盒图(N-SN-S图)图)结构化、功能域明确结构

25、化、功能域明确PADPAD图图结构化、可用于数据结构、易自动生成结构化、可用于数据结构、易自动生成软件实现四、详细设计的方法详细设计的方法面向数据结构的设计方法:面向数据结构的设计方法:以数据结构为中心以数据结构为中心结构化设计方法结构化设计方法以数据流为中心以数据流为中心面向对象设计方法面向对象设计方法以对象为中心以对象为中心软件实现2.4.3 编码编码(实现):俗称编程序编码(实现):俗称编程序( (Programming)Programming)编码任务编码任务选择一种程序设计语言选择一种程序设计语言将详细设计文档将详细设计文档“翻译翻译”为程序为程序(源程序代码)(源程序代码)单元测试

26、(调试)单元测试(调试)编码原则编码原则高效高效+ +技巧技巧安全安全+ +可靠可靠时间、空间效率时间、空间效率可用性、可维护性、可移植性可用性、可维护性、可移植性良好的编程风格可以减少软件错误良好的编程风格可以减少软件错误阶段性标志:源程序代码阶段性标志:源程序代码编码风格编码风格编码风格实际上是一种编码原则。从编码风格实际上是一种编码原则。从2020世纪世纪7070年代以来,编码的目标从强调效年代以来,编码的目标从强调效率转变到强调清晰。与此相应,编码风格率转变到强调清晰。与此相应,编码风格也从追求也从追求“聪明聪明”和和“技巧技巧”,变为提倡,变为提倡“简明简明”和和“直接直接”。人们逐

27、渐认识到,。人们逐渐认识到,良好的编码风格能在一定程度上弥补程序良好的编码风格能在一定程度上弥补程序设计语言存在的缺点。设计语言存在的缺点。反之,如果不注意反之,如果不注意编码风格,即使使用了结构化的现代语言,编码风格,即使使用了结构化的现代语言,也很难写出高质量的程序。也很难写出高质量的程序。一、一、代码文档化代码文档化:指编码时适当选择标识符的名字、:指编码时适当选择标识符的名字、适当安排注释和注重程序的整个组织形式。适当安排注释和注重程序的整个组织形式。二、二、数据说明数据说明:程序或模块在其可执行部分的前面:程序或模块在其可执行部分的前面都集中了一些说明语句都集中了一些说明语句 ,出于

28、阅读理解和维护,出于阅读理解和维护的要求,最好使其规范化,使说明的先后次序固的要求,最好使其规范化,使说明的先后次序固定定 。三、三、语句构造语句构造 :每条语句都应当简单而直接,同:每条语句都应当简单而直接,同时也不应为了追求运行效率而使代码复杂化,这时也不应为了追求运行效率而使代码复杂化,这样会减低程序的可读性。样会减低程序的可读性。 四、四、输入输入/ /输出输出:源程序的输入输出风格必须满足:源程序的输入输出风格必须满足运行工程学的需要。运行工程学的需要。程序效率程序效率尽管效率是值得追求的目标,但不应为了尽管效率是值得追求的目标,但不应为了非必需的效率提高而牺牲代码的非必需的效率提高

29、而牺牲代码的清晰性、可清晰性、可读性和正确性读性和正确性。应记住下面三条准则。应记住下面三条准则。(1 1)效率是一种性能需求,目标值应当在需求)效率是一种性能需求,目标值应当在需求分析阶段给出。软件效率应以需求为准,不分析阶段给出。软件效率应以需求为准,不应以人力所及为准。应以人力所及为准。(2 2)好的设计可以提高效率。)好的设计可以提高效率。(3 3)代码效率与代码的简单性相关。)代码效率与代码的简单性相关。一、一、代码效率代码效率 (1 1)应先简化算术和逻辑的表达式。)应先简化算术和逻辑的表达式。(2 2)仔细研究嵌套的循环,以确定是否有语)仔细研究嵌套的循环,以确定是否有语句可以从

30、内层往外移。句可以从内层往外移。(3 3)尽量避免使用多维数组。)尽量避免使用多维数组。(4 4)尽量避免使用指针。)尽量避免使用指针。(5 5)使用执行时间短的算术运算。)使用执行时间短的算术运算。(6 6)即使语言允许,一般也不要采用混合数)即使语言允许,一般也不要采用混合数据类型。据类型。(7 7)尽量使用整数表达式和布尔表达式。)尽量使用整数表达式和布尔表达式。二、二、输入输入/输出的效率输出的效率 (1)所有输入)所有输入/输出都应该有缓冲,以减少过输出都应该有缓冲,以减少过多的通信次数。多的通信次数。(2)对辅存(如磁盘),应选用最简单的访)对辅存(如磁盘),应选用最简单的访问方法

31、。问方法。(3)辅存的输入)辅存的输入/输出,应该以块为单位进行。输出,应该以块为单位进行。(4)终端和打印机的输入)终端和打印机的输入/输出,应当考虑设输出,应当考虑设备的特性,以提高输入备的特性,以提高输入/输出的质量和速度。输出的质量和速度。(5)不应当采用不能被人们所理解的超高效)不应当采用不能被人们所理解的超高效的输入的输入/输出。输出。结构化程序设计结构化程序设计采用自顶向下、逐步求精的设计方法;采用自顶向下、逐步求精的设计方法;采用单入口单出口的控制结构;采用单入口单出口的控制结构;只包含顺序、选择和循环三种控制结构;只包含顺序、选择和循环三种控制结构; A B (a) 顺序结构

32、 (b) 选择结构 B exp A F T exp A T F exp A F T (c) 循环结构 或 软件实现一、一、软件测试的目标软件测试的目标测试是为了发现程序中的错误而执行程序的过程;测试是为了发现程序中的错误而执行程序的过程;好的测试方案是极可能发现迄今为止尚未发现的错误的测好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;试方案;成功的测试是发现了至今为止尚未发现的错误的测试。成功的测试是发现了至今为止尚未发现的错误的测试。二、二、测试原则测试原则测试不能证明软件没有错误测试不能证明软件没有错误应避免程序员测试自己的程序应避免程序员测试自己的程序对合法的和非法的输入都要测

33、试对合法的和非法的输入都要测试测试用例(包括输入及预期输出)必须高效(包括输入及预期输出)必须高效2.4.4 软件测试软件实现测试原则测试原则尽早地和不断地进行软件测试尽早地和不断地进行软件测试 程序员应避免检查自己的程序程序员应避免检查自己的程序 要预先确定测试用例要预先确定测试用例设计的测试用例应当包括合理的输入条件和设计的测试用例应当包括合理的输入条件和不合理的输入条件不合理的输入条件 充分注意测试中的群集现象充分注意测试中的群集现象 严格执行测试计划,排除测试的随意性严格执行测试计划,排除测试的随意性 应当对每个测试结果做全面检查应当对每个测试结果做全面检查 妥善保存测试计划、测试用例

34、、出错统计和妥善保存测试计划、测试用例、出错统计和最终分析报告最终分析报告 软件实现三、测试分类三、测试分类单元测试(又称模块测试)单元测试(又称模块测试)时期:编码阶段时期:编码阶段定义:对软件设计的最小单位(程序模块)进定义:对软件设计的最小单位(程序模块)进行的测试行的测试 方法:采用白盒测试法辅之以黑盒测试法方法:采用白盒测试法辅之以黑盒测试法 内容:模块接口测试、局部数据结构测试、路内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试径测试、错误处理测试、边界测试 组装测试(又称集成测试组装测试(又称集成测试 )时期:编码完成阶段时期:编码完成阶段定义:在单元测试的

35、基础上将所有模块按照设定义:在单元测试的基础上将所有模块按照设计要求组装为完整的系统计要求组装为完整的系统 方法:渐增式测试和非渐增式测试方法:渐增式测试和非渐增式测试 内容:各模块的接口内容:各模块的接口软件实现确认测试确认测试定义:验证软件的功能、性能及其他特性是否与定义:验证软件的功能、性能及其他特性是否与用户的要求一致用户的要求一致方法:方法: 测试、测试、测试测试 内容:有效性测试和验收测试内容:有效性测试和验收测试 阶段:即将交付使用阶段:即将交付使用系统测试系统测试 定义:把通过确认测试的软件作为整个计算机系定义:把通过确认测试的软件作为整个计算机系统的一个元素与其他元素结合在一

36、起在实际运行统的一个元素与其他元素结合在一起在实际运行(使用)环境下,对计算机系统进行一系列的组(使用)环境下,对计算机系统进行一系列的组装测试和确认测试装测试和确认测试软件实现四四、白盒测试白盒测试前提:完全了解程序的结构和处理过程前提:完全了解程序的结构和处理过程 方法:穷尽测试、逻辑覆盖方法:穷尽测试、逻辑覆盖 逻辑覆盖的不同标准逻辑覆盖的不同标准语句覆盖语句覆盖 选择足够多的测试数据选择足够多的测试数据,使被测程序中每使被测程序中每个语句至少执行一次个语句至少执行一次判定覆盖判定覆盖 条件覆盖条件覆盖 判定条件覆盖判定条件覆盖 条件组合覆盖条件组合覆盖 路径覆盖路径覆盖 软件实现五五、

37、黑盒测试黑盒测试定义:只检查程序功能是否能按照需求规格说明书的规定正常运定义:只检查程序功能是否能按照需求规格说明书的规定正常运行,程序是否能接收输入数据并产生正确的输出信息,并且保持行,程序是否能接收输入数据并产生正确的输出信息,并且保持外部信息的完整性。外部信息的完整性。 方法方法:等价类划分等价类划分 仅选取少量最有代表性的输入数据仅选取少量最有代表性的输入数据边界值分析边界值分析 使程序运行在边界情况使程序运行在边界情况(下标下标,循环次数循环次数)下下错误推测错误推测 软件实现六、软件调试六、软件调试 任务:测试之后进一步诊断和改正程序中的错误任务:测试之后进一步诊断和改正程序中的错

38、误步骤步骤:确定错误的位置确定错误的位置 确定问题的原因确定问题的原因 方法方法:输出存储器内容输出存储器内容 适当插入打印语句适当插入打印语句 使用专门的调试工具使用专门的调试工具 调试策略调试策略 试探法、回溯法、归纳法、演绎法试探法、回溯法、归纳法、演绎法 软件实现2.5 软件维护2.5.1 什么是软件维护2.5.2 软件维护分类2.5.3 软件维护的过程软件维护是软件生命周期的最后一个阶段,它是指已完成软件维护是软件生命周期的最后一个阶段,它是指已完成开发工作,交付使用后,对软件产品所进行的一些软件工开发工作,交付使用后,对软件产品所进行的一些软件工程活动。程活动。软件维护的必要性软件

39、维护的必要性运行中发现错误运行中发现错误适应软硬件环境变化适应软硬件环境变化适应功能需求变化适应功能需求变化维护成本通常高大开发成本的维护成本通常高大开发成本的4 4倍倍2.5.1 2.5.1 什么是软件维护什么是软件维护软件维护决定可维护性的因素决定可维护性的因素可理解性可理解性:理解软件的难易程度:理解软件的难易程度 可测试性可测试性:测试和诊断软件中错误的难易程度:测试和诊断软件中错误的难易程度 可修改性可修改性:修改软件的难易程度:修改软件的难易程度各类文档各类文档软件维护的分类软件维护的分类 改正性维护改正性维护:在软件运行中发生异常或故障时进行。:在软件运行中发生异常或故障时进行。

40、适应性维护适应性维护:为使该软件能适应外部环境的变动。:为使该软件能适应外部环境的变动。完善性维护完善性维护:为扩充软件的功能,提高原有软件性能而:为扩充软件的功能,提高原有软件性能而开展的软件工程活动。开展的软件工程活动。软件维护在软件维护时,必然会对源程序进行修改,为了在软件维护时,必然会对源程序进行修改,为了正确、有效地修改源程序,需要经历下列步骤:正确、有效地修改源程序,需要经历下列步骤:分析和理解程序分析和理解程序 修改程序修改程序 重新验证程序重新验证程序 软件维护的组织软件维护的组织 维护文档的编写维护文档的编写 软件维护2.5.3 2.5.3 软件维护的过程软件维护的过程2.6

41、 软件开发管理2.6.1 质量管理2.6.2 进度安排2.6.3 人员管理2.6.4 风险分析2.6.5 成本/效益分析软件质量:定量比较困难软件质量:定量比较困难ISO软件质量模型的质量特性和质量子特性组软件质量模型的质量特性和质量子特性组成:成:功能性功能性 适应性、准确性、互用性、依从性、安全性适应性、准确性、互用性、依从性、安全性可靠性可靠性 成熟、容错、易恢复成熟、容错、易恢复易使用性易使用性 易理解、易学、易操作易理解、易学、易操作效率效率 时间特性、资源特性时间特性、资源特性可维护性可维护性 易分析、易修改、稳定、易测试易分析、易修改、稳定、易测试可移植性可移植性 适应性、易安装、一致性、易替换适应性、易安装、一致性、易替换软件开发管理2.6.1 2.6.1 质量管理质量管理质量保证活动质量保证活动v参与者:软件开发人员和质量保证人员参与者:软件开发人员和质量保证人员 v目标:得到高质量的最终产品目标:得到高质量的最终产品 v活动内容活动内容v应用技术方法应用技术方法 形成高质量的规格说明和设形成高质量的规格说明

温馨提示

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

评论

0/150

提交评论