软件工程导论重点

软件工程导论重点
Flaw软件工程导论重点
第一章 软件工程学概述
1.产生软件危机的原因
一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
P32 假设自己是一家软件公司的总工程师,当把图 1.1 给手下的软件工程师们观看,告诉他们及时发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?
答:在软件开发的不同阶段进行修改需要付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;而在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”时再引人变动,当然需要付出更高的代价。一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是整体构架的错误。
2.消除软件危机的途径
用软件工程的概念、方法学去运用到软件,整个生命周期中去。
首先应该对计算机软件有一个正确的认识
充分认识到软件开发应该是各类人员协同配合,共同完成的工程项目
推广使用在实践中总结出来的开发软件的成功技术和方法,并且研究探索更好的技术和方法
应该开发和使用更好的软件工具
3.程序是能够完成预定功能和性能的可执行的指令序列。
4.数据是使程序能够适当地处理信息的数据结构。
5.文档是开发、使用和维护程序所需要的图文资料。
6.IEEE 为软件下的定义是:
计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。
7.主要比较两个典型的软件工程定义的异同
1968 年在第一届 NATO 会议上给出了软件工程的一个早期定义:软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。
1993 年 IEEE 进一步给出了更全面更具体的定义:软件工程是把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件。
8.目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。
9.软件生命周期的三个时期和八个阶段及其产物(形成了每一个阶段的说明书)
(1)三个时期:软件定义、软件开发和运行维护(也称为软件维护)。
(2)八个阶段及产物:
- 问题定义—问题定义说明书
- 可行性研究—可行性研究报告
- 需求分析—需求分析说明书
- 总体设计—总体设计说明书
- 详细设计—详细设计说明书
- 编码和单元测试—程序清单和单元测试说明书
- 综合测试—综合测试报告
- 软件维护—软件维护报告
10.为了获取高质量的软件产品,在软件工具支撑下,由软件人员完成一系列的软件工程活动,我们把它称之为软件过程。
11.过程模型
1.瀑布模型
适用场景:开发大型软件,需求明确,变动不多。比如,国防民生一系列软件。
- 快速原型模型
适用场景:需求不明确,处理过程明确,简单系统,涉及面窄的小型系统。
- 增量模型
适用场景:设计方案有一定风险,工期紧张,功能可以划分,比较复杂的项目
- 螺旋模型
适用场景:内部开发的大规模软件项目,大型、复杂且高风险的项目
- 喷泉模型
适用场景:适用于面向对象的软件开发过程
12.软件工程方法学包含 3 个要素:方法、工具和过程。
13.通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也 称为范型。
第二章 可行性研究
1.为什么要进行可行性研究?
开发一个系统的时候,需要判断他完成之后是否可以带来收益,是否值得开 发,如果问题没有可行的解,那么花费在这项工程上的任何时间、人力、软硬件 资源和经费,都是无谓的浪费,所以,我们要进行可行性研究。 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
2.可行性研究需要从那几个方面进行研究?
技术可行性、经济可行性、操作可行性,除此之外,还要考虑法律和社会效益。
3.可行性研究过程的步骤
① 复查系统规模和目标
② 研究目前正在使用的系统
③ 导出新系统的高层逻辑模型
④ 进一步定义问题
⑤ 导出和评价供选择的解法
⑥ 推荐行动方针
⑦ 草拟开发计划
⑧ 书写文档提交审查
4.系统流程图是概括地描述物理系统的传统工具
5.数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。
6.数据流图中包含的四要素:数据的源点、终点,变换数据的处理,数据存储, 数据流。
!!要求会画简单的数据流图!!!最起码会画顶层和第二层(就是顶层之后的)!!
7.数据字典的定义
数据字典是关于数据的信息的集合,也就是对数据流图中包含地所有元素的定义的集合。
8.数据流图与字典的关系
数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不严格,然而没有数据流图,数据字典也很难于发挥作用。只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。
9.数据字典的作用
任何字典最主要的用途都是供人查阅对不了解的条目的解释,数据字典的作用也正是在软件分析和设计的过程中给人提供关于数据的描述信息。
10.数据字典由对下列 4 类元素的定义组成
数据流、数据流分量(即数据元素)、数据存储、处理。
11.成本估计的估算技术:代码行技术、任务分解技术、(自动估计成本技术)。
12.成本/效益分析的方法从经济角度判断这个系统是否值得投资。
13. P53 1.在软件开发的早期时期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
(1).进行可行性研究的目的
可行性研究的目的是,用最小的代价在尽可能短的时间内研究并确定客户提出的问题是否有行得通的解决办法。必须分析几种主要的候选解法的利弊,从而判断原定的系统目标和规模是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。
(2).从下述三个方面研究每种解决方案的可行性
①技术可行性:使用现有的技术能否实现这个系统。
②经济可行性:这个系统的经济效益能否超过它的开发成本。
③操作可行性:这个系统的操作方式在该客户组织内是否行得通。
第三章 需求分析
1.需求分析的基本任务是准确地回答”系统必须做什么”这个问题。
2.需求分析的任务(4 点)
确定对系统的综合要求
分析系统的数据要求
导出系统的逻辑模型
修正系统开发计划
3.层次方框图描绘数据的层次结构。
4.需求阶段的建模工具有哪些?(5 个)
实体-联系图(E-R 图)
层次方框图
状态转换图
Warnier 图
IPO 图
5.从哪些方面验证软件需求的正确性?(4 个方面)
一致性
完整性
现实性
有效性
6.P73 1.为什么要进行需求分析,通常对软件系统有哪些需求?
(1)需求分析的原因
为了开发真正满足用户需求的软件产品,需求分析是软件开发工作获得成功的前提条件,不能满足用户需求的程序只会今用户失望,给开发者带来烦恼。
(2)对软件系统的需求
功能需求、性能需求、可靠性和可用性需求、出错处理、借口需求、约束、逆向需求、将来可能提出的要求
7.软件验收的依据有没有需求规格说明书?
软件需求规格说明书是需求分析阶段的最终成果,是软件开发中的重要文档之一。
软件需求规格说明书的作用包括:
①便于用户、开发人员进行理解和交流。
②反映出用户问题的结构,可以作为软件开发工作的基础和依据。
③作为确认测试和验收的依据。
需求规格说明书的作用:开发人员对软件的一些相应的理解,为后面的概要设计和详细设计阶段提供依据。
软件需求规格说明书的作用不包括_D_。
A.软件验收的依据 B.用户与开发人员对软件要做什么的共同理解C.软件设计的依据 D.软件可行性研究的依据
第四章 形式化说明技术
1.有穷状态机的 5 要素(或 5 部分):
状态集 J
输入集 K
状态转换函数 T
初识态 S
终态集 F
2.Petri 网包含的四种元素
一组位置 P
一组转换 T
输入函数 I
输出函数 O
第五章 总体设计
总体设计阶段是决定“怎样做”的时候。
对于典型的总体设计过程包含 9 个步骤:
设想供选择的方案
选取合理的方案
推荐最佳方案
功能分解
设计软件结构
设计数据库
制定测试计划
书写文档
审查和复审
设计原理
模块化思想(要清楚过程推导) (2)抽象
逐步求精
信息隐藏和局部化
模块独立
△耦合是对一个软件结构内不用模块之间互连程度的度量。
耦合的强弱取决于模块间接口的复杂程度。
如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。数据耦合是低耦合
如果传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现), 则这种耦合称为控制耦合。控制耦合是中等程度的耦合。
当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。
当两个或多个模块通过一个公共数据环境相互作用时,他们之间的耦合称为公共环境耦合
最高程度的耦合是内容耦合
如果出现下列情况之一,两个模块间就发生了内容耦合。
一个模块访问另一个模块的内部数据。
一个模块不通过正常入口而转到另一个模块的内部。
两个模块有一部分程序代码重叠(只可能出现在汇编程序中)
一个模块有多个入口(这意味着一个模块有几种功能)
△内聚:标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
低内聚:
- 如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫偶然内聚。
- 如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。
- 如果一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。
中内聚:
- 如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。
- 如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。
高内聚:
- 如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。
- 如果模块内所有处理元素属于同一个整体,完成一个单一的功能,则称为功能内聚。
模块的作用域定义为受该模块内一个判定影响的所有模块的集合。模块的作用域应该在控制域之内。
软件结构顶层会有一个主控模块,接下来会有分层,设计的这个模块应该是单入单出的,做出来会是一个椭圆形,因为到下层的底层模块会越来越少,这样的情况下才是相对来说比较好的一个模块。
层次图
HIPO 图
结构图
P114 1.为每种类型的模块耦合举一个具体例子。
(1)数据耦合:计算机网络属于松耦合系统。
(2)控制耦合:遥控器与电器。
(3)公共环境耦合:多机系统(4)内容耦合;汇编程序模块。
P114 2.为每种类型的模块内聚举一个具体例子。
(1)逻辑内聚 一个子程序将打印季度开支报告、月份开支报告和日开支报告,具体打印哪二 个,将由传入的控制标志决定,这个子程序具有逻辑内聚性,因为它的内部逻辑 是由输进去的外部控制标志决定的。
(2)时间内聚 若一个模块包含了需要在同一时间段中执行的多个任务,则称该模块的内案 为时间内聚。例如,将多个变量的初始化放在同一个模块中实现,或将需婴同时 使用的多个库文件的打开操作放在同一个模块中,都会产生时间内聚的模块。
(3)过程内聚 一个子程序,它产生读取雇员的名字,然后是地址,最后是它的电话号码。 这种顺序之所以重要,仅仅是因为它符合用户的要求,用户希望按这种顺序进行 屏幕输入。另外一个子程序将读取关于雇员的其它信息。这个子程序是过程内聚 性,因为是由一个特定顺序面不是其它任何原因,把这些操作组合在一起的。
(4)顺序内聚 一个按给出的生日计算雇员年龄、退休时间的子程序,如果它是利用所计算 的年龄来确定雇员将要退休的时间,那么它就具有顺序内聚性。而如果它是分别 计算年龄和退休时间的,但使用相同生日数据,那它就只具有通讯内聚性。
(5)功能内聚 计算雇员年龄并给出生日的子程序就是功能内聚性的,因为它只完成一项工 作,而且完成得很好。
(6)偶然内聚 一个模块完成一组任务,这些任务彼此间即使有关系,关系也比较松散,就 叫偶然内聚。
第六章 详细设计
1.人机界面设计指南包括哪三类?
一般交互指南
信息显示指南
数据输入指南
2.过程设计的工具有哪些?
程序流程图
盒图
PAD 图
判定表
判定树
!!要求大家会画判定树、判定表!!
!!要求大家会根据代码画程序流程图或者是画合图或者是画 PAD 图!!
△计算环形复杂度的方法
(1)流图中线性无关的区域数等于环形复杂度
(2)V(G)≡E-N+2 (E 是流图中边的条数,N 是结点数)
(3)V(G)≡P+1 (P 是流图中判定结点的数目)
第七章 实现
测试有白盒测试和黑盒测试。
1.大型软件测试的测试过程是由哪几个步骤组成?
模块测试
子系统测试
系统测试
验收测试
平行运行
2.单元测试是以白盒测试为主,黑盒测试为辅。
3.集成测试分为渐增式测试和非渐增式测试
渐增测试有自顶向下和自底向上两种集成策略。
自顶向下集成使用深度优先的策略或宽度优先的策略。
4.什么时候用自底向上?
想早点发现设计上的错误——采用自底向上
P159 两种策略的比较
自顶向下测试方法的主要优点是不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功力能,而且能在早期发现上层模块的接口错误。
自顶向下测试方法的主要缺点是需要存根程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,而且用这种方法在早期不能充分展开人力。
可以看出,自底向上测试方法的优缺点与上述自顶向下测试式方法的优缺点刚好相反。
5.白盒测试技术
1)需要大家根据程序代码,会画程序流程图(比如 P163 图 7.5)。
2)7.5 这样能画成之后,你可以对它进行标号,路径的标号。
3)会设计测试用例(比如要求使用语句覆盖或者判定覆盖或条件覆盖设计测试用例,这三个必须掌握!)!!
6.白盒测试典型的测试技术有哪些?
逻辑覆盖
控制结构测试
常用的控制结构测试技术:
基本路径测试
条件测试
循环测试:简单循环、嵌套循环、串接循环
7.黑盒测试典型的测试技术有哪些?
等价类划分法
边界值分析法
错误推测法
因果图法
!!等价类划分法:要求大家会画等价类,并且能够根据划分的等价类设计测试用例!!
!!边界值分析法:要求大家会设计边界值,并且设计测试用例!!
8.调试的概念:调试是在测试发现错误之后排除错误的过程。
9.软件可靠性的定义:软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
10.软件的可用性的定义:软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。
第八章 维护
1.维护阶段是花费人力物力最多的一个时期
2.软件维护有哪几类维护:
改正性维护、适应性维护、完善性维护、预防性维护
3.决定软件可维护性的因素有什么?
- 可理解性
- 可测试性
- 可修改性
- 可移植性
- 可重用性
4.针对预防性维护提出了软件再工程的过程软件再工程过程模型中有六类活动
库存目录分析文档重构
逆向工程代码重构数据重构正向工程
5.P201 2.假设自己的任务是对一个已有的软件做重大修改,而且只允许从下述文档中选取两份:(a)程序的规格说明;(b)程序的详细设计结果(自然语言描述加上某种设计工具表示);(c)源程序清单(其中有适当数量的注解)
应选取哪两份文档?为什么这样选取?打算怎样完成交给自己的任务?
答:应该选取(a)和(c)两份文档,理由如下:
“对一个已有的软件做重大修改”意味着对软件功能做较大变更或增加较多新功能,这往往需要修改软件的体系结构。因此,了解原有软件的总体情况是很重要的。程序的规格说明书准确地描述了对软件系统的数据要求、功能需求、性能需求、可靠性和可用性要求、出错处理需求、接口需求、约束、逆向需求及将来可能提出的需求,对了解已有软件的总体情况有很大帮助。在对已有软件做重大修改之前仔细阅读、认真研究这份文档,可以避免许多修改错误。因此,应该选取(a)程序的规格说明。
有经验的软件工程师通过阅读含有适当数量注解的源程序,不难搞清程序的实现算法,没有描述详细设计结果的文档并不会给维护工作带来太大困难。此外,为了修改程序代码,原有程序的清单是必不可少的。因此,应该选取(c)源程序清单。
- 软件维护的主要目的就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。
- 软件维护的主要任务是在软件已经交付使用之后,为了改正错误或满足新的需要而修改文件,且能提高软件的可靠性、可用性、延长软件的寿命。
- 软件维护的基本任务:保证软件在一个相当长的时期能够正常运行。****
第九章 面向对象方法学引论
1.用面向对象方法开发软件,通常需要建立 3 种形式的模型:
- 描述系统数据结构的对象模型
- 描述系统控制结构的动态模型
- 描述系统功能的功能模型
2.面向对象技术的标准建模语言:UML
第十章 面向对象分析
1.大型对象模型通常是由几个层次组成?(5 个层次)
主题层、类与对象层、结构层、属性层、服务层
第十一章 面向对象设计
1.软件重用可分为以下 3 个层次:
- 知识重用
- 方法和标准的重用
- 软件成分的重用
我们研究的是软件的成分重用
2.软件成分的重用级别:
- 代码重用
- 设计结果重用
- 分析结果重用








