计导 第 10 章 软件工程

目录

 

软件生命周期

开发过程

开发模型

瀑布模型

增量模型

分析阶段

面向过程分析

面向对象分析

设计阶段

面向过程设计

面向对象设计

实现阶段

语言选择

软件质量

测试阶段

白盒测试

黑盒测试

文档

用户文档

系统文档

技术文档


软件工程是指导计算机软件开发和维护的一门工程学科。

研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。

软件生命周期

软件生命周期是软件工程的一个基础概念,软件周期性地重复一些阶段。软件工程采用的生存周期方法就是从时间角度对软件开发的维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。

开发过程

开发过程只是软件生命周期中的三个过程的其中之一,它是上图中处于循环流程之外。开发过程包括4个阶段:分析、设计、实现和测试。开发过程由多种模型,最常见的两种:瀑布模型和增量模型。

开发模型

瀑布模型

这种模型中,开发过程只是一个方向的流动,这意味着前一个阶段不结束,后一个阶段不开始。

优点:在下一个阶段开始前,之前的每一个阶段都已完成。

缺点:难以定位问题:如果过程的一部分有问题,必须检查整个过程。

增量模型

软件的开发要经历一系列步骤。开发者首先完成帧个系统的一个简化版本,这个版本表示了帧个系统,但不包括具体的细节。

在后续的版本中,加入更过的细节,而这次还没有完成,然后再次测试系统。如果有问题,开发者知道问题出于新功能。知道现有系统工作正确后,在增加新功能,现在的开发模型基本上都是增量模型,边开发,边测试。

分析阶段

开发过程开始于分析阶段,这个阶段生成规格说明文档,这个文档说明了软件要做什么,没有说明如何去做。分析阶段使用的下面两种方法依赖于实现阶段使用的是过程语言还是面向对象语言。

面向过程分析

针对实现使用的是面向过程语言,也称为结构化分析或经典分析,这种情况下的规格说明可以使用多种建模工具:

1、数据流图:显示了系统中数据的流动。下图显示了一个小旅馆中预定系统的简单版本。

2、实体关系图:ER模型,实体--联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。实体关系图表示在信息系统中概念模型的数据存储。数据库设计中使用ER模型,在此看一个简单的例子,学生考试成绩关系图:图中通过三张实体表(实体:学生、课程、教师),另外建两张表把它们联系起来(联系:教师讲授课程的讲授表,学生选课的选修表)。

3、状态图

通常用于当系统中的实体在响应事件时状态的改变。下图是老式电梯的状态,此种电梯很简单:只有三种状态:上行,下行,停止。只有停止时才能接受请求。如果请求的楼层和当前的一样,则保持停止状态,否则要么上行,要么下行,直到停止。

面向对象分析

针对实现使用的是面向对象语言,这种情况下的规格说明可以使用多种建模工具:

1、用例图

用例图给出了系统的用户视图:显示了用户和系统的交互。

使用4中组件:系统、用例、动作者、关系。系统(用矩形表示)执行功能。系统中的动作(用原圆角矩形表示)由用例显示,动作者是使用系统的某人或某事

老式电梯系统的用例图,使用者可以按电梯按钮和电梯内的楼层按钮

 2、类图

老式电梯系统中涉及到电梯按钮两种实体类,这里按钮分为了两种,可以分别创建继承自按钮类的电梯按钮类楼层按钮类,如图:

3、状态图

类图完成后,就可以为类图中的每个类型准备状态图。同面向对象分析中的状态图作用一致,对于上面的类图会有四个状态,电梯开,电梯关,电梯上,电梯下。

设计阶段

在设计阶段定义系统如何完成分析阶段所定义的需求,系统的许哦呦的组件部分都被定义。

面向过程设计

既要设计过程,也要设计数据。下面是一类注重过程的设计方法,整个系统被分解成一组过程或模块。

1、结构图

说明模块间关系的常用工具是结构图。例,如图:

2、模块化

意味着将大项目分解成较小的相互通信的部分,以便能够容易理解和处理,在分解成模块时主要关心两点:耦合和内聚

  • 耦合:对两个模块相互绑定紧密程度的度量。软件系统中模块间的耦合必须最小化。越紧耦合度的模块,它们的独立性有差,所以需要松散耦合,理由见下:
    1. 松散耦合的模块更可能被重用;
    2. 松散耦合的模块不容易在相关模块中产生错误;
    3. 当系统需要修改时,松散耦合的模块允许我们只修改需要修改的模块,而不会影响到不需要改变的模块。
  • 内聚:是程序中处理过程相关紧密程度的度量,软件系统中模块间的内聚必须最大化。

面向对象设计

通过详细描述类的细节来继续,在设计阶段列出这些类的属性和方法的细节

实现阶段

为面向过程设计中的模块编写程序或者编写程序单元,实现面向对象设计中的类。

语言选择

选择合适的语言,通常面向过程的选择C,面向对象的C++、Java等。

软件质量

能够划分成三个广义的度量:可操作性、可维护性、可移植性。见下图展开:

1、可操作性

  • 准确性:不准确的系统比没有系统更能糟糕。
  • 高效性:主观术语,在一些实例中,用户将制定性能指标。
  • 可靠性:综合了其他各种因素。
  • 安全性:以未经授权的人得到系统数据的难易程度为参照。
  • 及时性:及时传递输出,在线系统及时响应用户请求。
  • 适用性:主观术语。

2、可维护性

        以保持系统正常运行并及时更新为参照。

  • 可变性是一个主观因素,现在有很多软件度量工具来估算程序的复杂性和结构。
  • 可修正性的一种度量时恢复正常的平均时间。
  • 适应性是接受用户经常要求在系统中进行变动的难易程度。
  • 可测试性是测试工程是测试的难易度。

3、可移植性

        把数据或系统从一个平台移动到另一个平台并重用代码的能力。

  • 代码重用,需要封装,松散耦合。
  • 互用性是发送数据给其他系统的能力。
  • 可移植性是一种把软件从一个硬件平台迁移到另一个软件平台的能力。

测试阶段

目标是发现错误,这需要良好的测试策略能发现更多的错误:有两种测试方式:白盒和黑盒。

白盒测试

是基于知道软件内部结构的,测试的目标是检查软件所有部分是否全部设计出来。白盒测试由软件工程师或一个专门的团队来完成,需要满足下面4条标准:

  • 每个模块的所有独立的路径至少被测试过一次。
  • 所有的判断结构(两路或多路的)每个分支都被测试。
  • 每个循环被测试。
  • 所有的数据结构都被测试。

有下面两种测试方法:

  1. 基本路径测试:这种方法创建一组测试用例,这些用例执行软件中的每条语句至少一次

  2. 控制结构测试:包含基本路径测试。包括条件测试、数据流测试、循环测试。

黑盒测试

不知程序的内部也不知道程序是怎样工作的情况下测试程序。按照软件的应该完成的功能来测试软件。如它的输入和输出。

  1. 穷尽测试:最好的黑盒测试方法就是用输入域中的所有可能的值去测试软件。但是在复杂的软件中,输入域非常巨大,这样常常不现实。
  2. 随机测试:选择输入域的值的子集来测试,子集选择的方式是非常的重要,在这种情况下,随机数生成器是非常有用的。
  3. 边界值测试:当遇到边界值时,错误经常发生。如果模块在边界值出错,那有可能就是模块代码中的有些条件边界值取的有问题,如 x > 100 被写成了 x >= 100。

文档

软件的正确使用和有效维护离不开文档,通常软件有三种独立的文档:用户文档、系统文档、技术文档。注意文档是一个持续性的过程。只有当软件包过时后,编写文档才停止。

用户文档

就是用户手册,告诉用户如何一步步地使用软件包,通常包含一个教程指导用户熟悉软件包的各项特性。手册应该面向新手和专业用户。

系统文档

系统文档定义软件本身。目的是为了让原始开发人员之外的能够维护和修改软件包。系统文档在系统开发的所有4个阶段都应该存在。

在分析阶段,应该仔细地用文档记录收集到的信息,同时应该定义信息的来源。需求和选用的方法必须用基于这些信息的推论来清楚表述。包括(软件规格说明书,系统测试需要的标准文档对所开发软件的功能、性能、用户界面及运行环境等作出详细的说明。它是在用户与开发人员双方对软件需求取得共同理解并达成协议的条件下编写的,也是实施开发工作的基础。该说明书应给出数据逻辑和数据采集的各项要求,为生成和维护系统数据文件做好准备。   

在设计阶段,最终版本中用到的工具必须记录在文档中。例如,如果结构图修改了多次,那么最终版本要用完整的注释记录在案。概要设计说明书:该说明书是概要设计阶段的工作成果,它应说明功能分配、模块划分、程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。详细设计说明书:着重描述每一模块是怎样实现的,包括实现算法、逻辑流程等。

在实现阶段,代码的每个模块都应记录在案。代码应该使用注释和描述头详细地形成自文档。

在测试阶段,开发人员必须仔细形成测试阶段的文档。对最终产品使用的每种测试,连同它的测试结果一起记录。测试分析报告 测试工作完成以后,应提交测试计划执行情况的说明,对测试结果加以分 析,并提出测试的结论意见。

技术文档

技术文档描述了软件系统的安装和服务。安装文档描述了软件如何安装,服务文档描述了系统应该如何维护和更新。


凡是过往,即为序章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值