第10章 软件工程 软件 = 程序 + 数据 + 文档
一、软件生命周期
1.计划定义时期:制定计划,需求分析
2.开发时期:软件设计,程序编写,软件测试
3.运行和维护时期
当软件效率低下,语言过时,公司重大变化或其他因素发生时会导致软件的“过时”。
二、开发过程
开发包括四个过程:分析,设计,实现,测试
开发过程的模型:瀑布模型 和 增量模型
1.瀑布模型:开发只向一个方向流动,前一个阶段不结束后一个阶段不开始。
2.增量模型:先写一个系统整体框架,逐渐添加细节,直至完善。
三、
1.分析阶段:生成规格说明文档(只说明软件要做什么不说明怎么做)
分析阶段分为面向过程分析和面向对象分析。
1)面向过程分析:也成为结构化分析或经典分析。通常使用数据流图,实体关系图,状态图等。
①数据流图:显示了系统中数据的流动。如图为小旅馆中预定系统的简单版本:
②状态图:通常用于当系统中的实体状态在响应事件时将会改变的情况下。如图为老电梯的状态图:
2)面向对象分析:如果实现使用面向对象语言,那么面向对象分析就是分析过程使用的。这是规格说明文档可以使用多种工具,如用例图,类图,状态图等。
①用例图:给出了系统的用户视图,显示了用户与系统的交互。用例图使用四种组件:系统,用例,动作者和关系。如图为老电梯的用例图:
②类图:分析的下一步就是创建系统的类图。
在电梯系统中,有两个实体类:按钮和电梯本身。但是有两种不同类型的按钮:在走廊里的电梯按钮和电梯里的楼层按钮。
则我们有一个按钮的类和从该按钮类继承的两个类:电梯按钮类和楼层按钮类。如图为电梯问题创建的第一个类图:
2.设计阶段:设计阶段定义系统如何完成在分析阶段所定义的需求。在设计阶段,系统所有的组成部分都被定义。
1)面向过程设计:在面向过程设计中,既要有设计过程,也要有设计数据;整个系统被分解成一组过程或模块。
①结构图:在面向过程设计中,说明模块间关系常用的工具是结构图。如图电梯的上下行关系可以设计一组结构图:
②模块化 :模块化意味着将大项目分解成较小的部分,以便容易理解和处理。当系统被分成模块时,主要关心两点:耦合和内聚。
耦合:模块间。是对两个模块互相绑定紧密程度的度量。越紧耦合的模块,它们的独立性越差。而目标是为了让模块间尽可能独立,因此需要松散耦合。
松散耦合的模块更可能被重用。
松散耦合的模块不容易在相关模块中产生错误。
当系统需要修改时,松散耦合的模块允许我们只修改需要改变的模块,而不会影响到不需要改变的模块。
软件系统中模块间的耦合必须最小化。
内聚:内聚是模块内部的,是程序处理中处理过程相关紧密程度的度量。软件系统模块间的内聚必须最大化。
2)面向对象设计:在面向对象设计中,设计阶段通过详细描述类的细节来继续。类是由一组变量(属性)和一组方法组成。面向对象设计阶段列出这些属性和方法的细节。
3.实现阶段:分为语言选择和软件质量
软件质量:可操作性,可维护性,可迁移性。每个度量还可以展开。
可操作性:准确性,高效性,可靠性,安全性,及时性,适用性。
可维护性:可变性,可修正性,可测试性。
可迁移性:重用性,互用性,可移植性。
4.测试阶段:测试阶段的目标就是发现错误,也就意味着良好的测试策略能够发现最多错误。有白盒测试和黑盒测试(也叫黑箱测试)和灰盒测试。
白盒测试:也叫玻璃盒测试,测试的目标是检查软件所有的部分是否全部设计出来。白盒测试假定测试者知道有关软件的一切。使用软件结构的白盒测试需要保证至少满足下面4条标准:
1)每个模块的所有独立的路径至少被测试过一次。
2)所有的判断结构(两路的或多路的)每个分支都被测试。
3)每个循环被测试。
4)所有数据结构都被测试。
①基本路径测试:基本路径测试是在软件中每条语句至少被执行一次的方法。使用图论和图复杂性找到必须被走过的独立路径,从而保证每条语句至少被执行一次。
②控制结构测试:分为条件测试,数据流测试,循环测试。
条件测试:简单条件是关系表达式,复杂条件是简单条件和逻辑运算符的组合。条件测试用来检查是否所有的条件都被正确设置。
数据流测试:数据流测试是基于通过模块的数据流的。这种测试选择测试用例,这些用例设计检查被用在赋值语句左边的变量的值。
循环测试:循环测试使用测试用例检查循环的正确性。所有类型的循环被仔细测试。
黑盒测试:是指在不知道程序内部也不知道程序是如何工作的情况下测试程序。以下是几种黑盒测试方法:
①穷尽测试:输入所有可能值测试。但在复杂的软件中,输入域过大而不现实。
②随机测试:选择输入域的子集来测试,子集的选择很重要,这是随机数生成器非常有用。
③边界值测试:遇到边界值时错误时长发生,如果边界值出错,就有可能是模块代码中是有些条件细节写错。
四、文档
软件通常有三中独立的文档:用户文档,系统文档,技术文档。
文档是一个持续的过程。如果在软件发布之后有问题,也必须写文档;如果软件被修改,那么所有的修改和与原软件包间的关系都要写进文档。
1.用户文档:它告诉用户如何一步步地使用软件包。通常包含一个教程指导用户熟悉软件包的各项特性。
一个好的用户文档可以成为一个强大的营销工具。用户文档在营销中的重要性再强调也不过分。手册应该面向新手和专业用户。
2.系统文档:系统文档定义软件本身。撰写系统文档的目的是为了让原始开发人员之外的人能够维护和修改软件包。
系统文档在系统开发的所有4个阶段都应存在。
在分析阶段,收集的信息应该仔细地用文档记录。
在设计阶段,最终版本用到的工具必须记录在文档中。
在实现阶段,代码的每个模块都应记录在文档中。
最后,开发人员需仔细的形成测试阶段的文档,对最终产品的使用的每种测试都应测试,连同它的结果都要记录在文档中。甚至错误结果和产生它的数据也应记录。
3.技术文档:技术文档描述了软件系统的安装和服务。安装文档描述了软件如安装在每台计算机上如服务器和客户端。服务文档描述了如果需要系统应该如何维护和更新。
* 总结 *
软件生命周期
两种主要开发模型:瀑布模型和增量模型
分析阶段:面向对象分析和面向过程分析
设计阶段:面向对象设计和面向过程设计(低耦合 高内聚)
实现阶段软件质量问题
黑盒测试和白盒测试
用户文档,系统文档,技术文档