软件工程(导论)

成秀秀、杨玲、戚爱斌、苗世迪、温东新

目录

  • 1 软件与软件工程
    • 1.1 软件
    • 1.2 软件危机
    • 1.3 软件工程
    • 1.4 软件生命周期
    • 1.5 软件过程模型
    • 1.6 学生成果分享
  • 2 可行性研究与项目开发计划
    • 2.1 可行性研究的任务
    • 2.2 可行性研究过程
    • 2.3 进度计划
    • 2.4 学生成果分享
  • 3 需求分析
    • 3.1 需求分析的任务
    • 3.2 与用户沟通获取需求的方法
    • 3.3 分析建模与规格说明
    • 3.4 实体-联系图
    • 3.5 数据规范化
    • 3.6 状态转换图
    • 3.7 其它图形工具
    • 3.8 验证软件需求
  • 4 总体设计
    • 4.1 系统流程图
    • 4.2 数据流图
    • 4.3 数据字典
    • 4.4 设计过程
    • 4.5 设计原理
    • 4.6 启发规则
    • 4.7 描绘软件结构的图形工具
    • 4.8 面向数据流的设计方法
  • 5 详细设计
    • 5.1 结构程序设计
    • 5.2 人机界面设计
    • 5.3 过程设计的工具
    • 5.4 面向数据结构的设计方法
    • 5.5 程序复杂程度的定量度量
  • 6 软件编码
    • 6.1 程序设计语言
    • 6.2 编码风格
  • 7 软件测试
    • 7.1 软件测试基础
    • 7.2 单元测试
    • 7.3 集成测试
    • 7.4 确认测试
    • 7.5 白盒测试技术
    • 7.6 黑盒测试技术
    • 7.7 调试
    • 7.8 软件可靠性
  • 8 软件项目管理
    • 8.1 估算软件规模
    • 8.2 工作量估算
    • 8.3 人员组织
    • 8.4 质量保证
    • 8.5 软件配置管理
    • 8.6 能力成熟度模型
与用户沟通获取需求的方法

一、访谈 

1. 正式访谈

系统分析员将提出一些事先准备好的具体问题。

2. 非正式访谈

分析员将提出一些用户可以自由回答的开放性问题,以鼓励被访问人员说出自己的想法。

3. 调查表

经过仔细考虑写出的书面回答可能比被访者对问题的口头回答更准确。

4. 情景分析技术

对用户将来使用目标系统解决某个具体问题的方法和结果进行分析。

情景分析技术的用处:

能在某种程度上演示目标系统的行为,从而便于用户理解,而且还可能进一步揭示出一些分析员目前还不知道的需求。

能保证用户在需求分析过程中始终扮演一个积极主动的角色。让用户起积极主动的作用对需求分析工作获得成功是至关重要的。


二、面向数据流自顶向下求精

1. 分析追踪数据流图

需求分析的目标之一就是把数据流和数据存储定义到元素级,通常从数据流图的输出端着手分析。

2. 用户复查

必须请用户对上述分析过程中得出的结果仔细地复查。复查过程验证了已知的元素,补充了未知的元素,填补了文档中的空白。

随着分析过程的进展,经过问题和解答的反复循环,分析员越来越深入具体地定义了目标系统,最终得到对系统数据和功能要求的满意了解。 


三、简易的应用规格说明技术 

简易的应用规格说明技术是一种面向团队的需求收集法。这种方法提倡用户与开发者密切合作,共同标识问题,提出解决方案要素,商讨不同方案并指定基本需求。 


分析需求的典型过程如下:

1. 初步访谈,准备会议

首先进行初步的访谈,初步确定待解决的问题的范围和解决方案。

然后开发者和用户分别写出“产品需求”。选定会议的时间和地点,并选举协调人。

2. 会前审查需求,确定列表

要求每位与会者在开会的前几天认真审查产品需求,并且列出对象、操作这些对象或与这些对象交互的服务、约束条件和性能标准。

3. 会上讨论列表,创建组合列表

每位与会者展示列表供大家讨论。大家共同创建一张组合列表。由协调人主持讨论这些列表。

4. 分组制定小型规格说明

与会者分成更小的小组,为每张列表中的项目制定小型规格说明。每个小组都向全体与会者展示他们制定的小型规格说明,供大家讨论。

5. 制定确认标准,起草需求规格说明书

每个与会者都制定出产品的一整套确认标准,并提交会议讨论,以创建出意见一致的确认标准。

最后,起草完整的软件需求规格说明书。


简易的应用规格说明技术的优点:

1、开发者与用户不分彼此,齐心协力,密切合作;

2、即时讨论并求精;

3、有能导出规格说明的具体步骤。 


四、快速建立软件原型 

快速建立软件原型是最准确、最有效、最强大的需求分析技术。

快速原型就是快速建立起来的旨在演示目标系统主要功能的可运行的程序。

构建原型的要点是,它应该实现用户看得见的功能,省略目标系统的“隐含”功能。


快速原型的特性:

“快速”。快速原型的目的是尽快向用户提供一个可在计算机上运行的目标系统的模型。因此,原型的某些缺陷是可以忽略的。

“容易修改”。如果原型的第一版不是用户所需要的,就必须根据用户的意见迅速地修改它,构建出原型的第二版,以更好地满足用户需求。如果修改耗时过多,势必延误软件开发时间。 


快速原型通常使用下述3种方法和工具:

(1) 第四代技术(4GL)

第四代技术包括众多数据库查询(如SQL)和报表语言(如ADF)、程序和应用系统生成器(如Power Builder和Oracle的应用开发环境)以及其他非常高级的非过程语言。

第四代技术使得软件工程师能够快速地生成可执行的代码,它们是较理想的快速原型工具。 

第四代技术特点:

简单易学,用户界面良好,面向问题、非过程化程度高,用户只需告知系统做什么,而无需说明怎么做。用4GL编程使用的代码量较少,并可成数量级地提高软件生产率。

程序设计语言划代:

1GL是汇编语言;

2GL是高级程序设计语言,如FORTRAN,ALGOL,BASIC,LISP等;

3GL是增强性的高级程序设计语言,如PASCAL,ALGOL68,FORTRAN77等;

4GL是按计算机科学理论指导设计出来的结构化语言,如ADA,MODULA-2,SMALLTALK-80,JAVA,VB,VC,VF等。 


(2) 可重用的软件构件

另外一种快速构建原型的方法,是使用一组已有的软件构件(也称为组件)来装配(而不是从头构造)原型。

软件构件可以是数据结构(或数据库),或软件体系结构构件(即程序),或过程构件(即模块)。


(3) 形式化规格说明和原型环境

非形式化方法:自然语言描述

半形式化方法:数据流图或实体-联系图

形式化方法:基于数学的技术