软件工程概论复习资料2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章软件工程学概述
●什么叫软件危机?软件危机的表现有哪些?产生软件危机的原因是什么?
答:1.软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

2.a.对软件开发成本和进度的估算很不准确。

b.用户对“已完成的”软件系统不满意的现象经常发生。

c.软件产品的质量往往靠不住。

d.软件常常是不可维护的。

e.软件通常没有适当的文档资料。

f.软件成本在计算机系统总成本中所占的比例逐年上升。

g.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

3. 客观:软件本身特点
逻辑部件:缺乏“可见性”;硬件常有通用部件
规模庞大:管理和控制开发过程困难
主观:不正确的开发方法
忽视需求分析
错误认为:软件开发=程序编写
轻视软件维护
●什么是软件工程?它有哪些本质特性?怎么样用软件工程消除软件危机?
答:1. 用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。

2. a. 软件工程关注于大型程序的构造
b. 软件工程的中心课题是控制复杂性
c. 软件经常变化
d. 开发软件的效率非常重要
e. 和谐地合作是开发软件的关键
f. 软件必须有效地支持它的用户
g. 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品
3.a.对软件有一个正确的认识:
软件=程序+方法+规则+数据+文档
软件开发应该组织良好、管理严密、协调配合
推广使用成功的技术和方法
应用开发和使用好的软件工具
b. 为了消除软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

软件工程
正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科
●什么是软件工程三要素? 它们之间是什么关系?软件工程的基本原理是什么?
答:1.工具,方法,过程
2.方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是运用方法而提供的自
动或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

3. (1)严格按照计划进行管理;
(2)坚持进行阶段评审;
(3)实行严格的产品控制;
(4)采用现代化的程序设计技术;
(5)结果要能清晰地审查;
(6)开发小组成员的素质要好,数量却不易多;
(7)要承认不断改善软件工程实践的必要性。

●说明软件生命周期的划分为几个阶段,每个阶段的基本任务?瀑布模型、原型模型、螺旋模型、增量模
型优缺点以及适用范围?
●答:1.(1).问题定义:问题定义阶段必须回答的关键问题是:“要解决的问题是什么”
(2).可行性研究:该阶段要回答的关键问题是:“上一个阶段所确定的问题是否有行得通的解决办法”。

(3)需求分析:
a.这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做
什么”这个问题。

b.这个阶段的另外一项重要任务,是用正式文档准确地记录对目标系统的需求,这份文
档通常称为规格说明(specification)。

(4)概要设计:
a.这个阶段的基本任务是,概括地回答“怎样实现目标系统?”
b.概要设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组
成以及模块间的关系
(5)详细设计
a.详细设计阶段的任务就是把解法具体化,也就是回答“应该怎样具体地实现这个系
统”这个关键问题。

b.这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明
(6)编码和单元测试:这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。

(7)综合测试
a.这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。

(8)软件维护
a.维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要
b.通常有四类维护活动:改正性维护、适应性维护、完善性维护、预防性维护
2.(1)瀑布模型:
优点:可强迫开发人员采用规范的方法;
严格地规定了每个阶段必须提交的文档;
要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

缺点:“瀑布模型是由文档驱动的”,缺乏灵活性:
仅通过静态的规格说明很难全面正确地认识动态的软件产品。

要求用户不经过实践就提出完整准确的需求是不切实际的。

适用范围:由于瀑布模型完全依赖于书面的规格说明,很可能导致最终开发出的软件不能真正满足用户的需要。

(2)原型模型:
优点:克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险;有助于获取用户需求,加强对需求的理解
尽早发现软件中的错误
支持需求的动态变化
缺点:所选用的开发技术和工具不一定符合主流的发展;
快速建立起来的系统结构加上连续的修改可能会导致产品质量低下;
适用范围:适合于需求动态变化,事先难以确定系统
(3)增量模型:
优点:能在较短的时间内向用户提交可完成部分功能的产品
逐步增加产品功能可以使用户有较充裕的时间学习和适应
缺点:在把每个新的增量构件集成到现有的软件体系结构中时,必须不破坏原来已经开发的产品
软件体系结构必须是开放的
本身具有矛盾性
*面要求开发人员把软件看作一个整体
*另一方面要求开发人员把软件看作构件序列,构件间彼此独立
(4)螺旋模型:
优点:有助于获取用户需求,加强对需求的理解
尽早发现软件中的错误
支持需求的动态变化
支持风险分析,可降低或者消除软件开发风险
缺点:过多的迭代次数会增加开发成本,延迟提交时间
只适合大型软件项目的开发,否则,每个阶段的风险分析将占用很大一部分资源,
增加成本
对开发人员的风险分析能力是极大的考验
适用范围:适合于需求动态变化,事先难以确定并且开发风险较大的系统
第2章可行性分析
1. 可行性分析的目的?.可行性研究的步骤有哪些?从哪些方面进行可行性研究?
答:1. 用最小的代价,在尽可能短的时间内确定问题是否能够解决
2. (1)复查系统规模和目标
(2)研究目前正在使用的系统
(3)导出新系统的高层逻辑模型
( 4)进一步定义问题
(5)5导出和评价供选择的解法
(6)推荐行动方针
(7) 草拟开发计划
(8)书写文档提交审查
3. 技术可行性:使用现有的技术能实现这个系统
经济可行性:系统的经济效益能否超过开发成本
操作可行性:系统的操作方式在这个用户组织内是否行得通
●常用的成本估算方法有哪些?
答:代码行技术,任务分解技术,自动估计成本技术
●什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?画数据流图的原则有哪些?
答:1. 软件系统逻辑模型的一种图形。

数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。

在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。

数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具。

数据流图有4种基本符号:正方形表示数据的源点或终点;圆角矩形代表变换数据的处理;开口矩形代表数据存储;箭头表示数据流。

画数据流图的原则有:1 确定系统的源点和终点
2 确定系统的输入和输出数据流的关系
3 保持分解前后输入/输出数据流必须相同(父子平衡)
4 尽量简化加工之间的联系
5 用“自顶向下”方法,逐层画出数据流图,每张数据流图
中加工(处理)的个数不能超过9个(7加减2)
6 注意分解速度(一般每分解一层增加2-7个加工)
7 在画数据流图时应避免线条交叉,必要时可使用重复
的外部项(源点或终点)或数据存储符号
8 适当的命名,加工处理要编号
第3章什么是数据字典?其作用是什么?包含哪些元素?
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。

数据字典的作用是在软件分析和设计的过称中给人提供关于数据的描述信息。

数据字典应该由对下列4类元素的定义组成: (1) 数据流 (2) 数据流分量(即数据元素) (3) 数据存储 (4) 处理考察重点:系统流程图、数据流图、数据字典(应用题)
第四章总体设计
一.需求分析的定义、任务和目的是什么?
定义:为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求,对需求的深入理解是软件开发获得成功的前提条件。

任务:基本任务是准确回答“系统必须做什么”。

需求分析任务综述:
深入描述软件的功能和性能
确定软件设计的约束
确定软件同其它系统元素的接口细节
定义软件的其它有效性需求
目的:为了开发出真正满足用户需求的软件产品。

基本任务是准确回答“系统必须做什么”。

二..获取需求的常用方法
1.访谈
正式访谈
系统分析员将提出一些事先准备好的具体问题
非正式访谈
系统分析员将提出一些用户可以自由回答的开放性问题,以鼓励被访问人员说出自己的想法
2.面向数据流自顶向下求精
基本思想:“自顶向下,逐步求精”
抽象和分解
3.简易的应用规格说明技术
4.快速建立软件原型
三.需求分析的原则
1.必须理解并描述问题的信息域
2.必须定义软件应完成的功能
3.必须描述作为外部事件结果的软件行为
4.必须对描述信息、功能和行为的模型进行分解
四.考察重点:状态转换图、ER图(应用题)
第五章
●一:总体设计的目标是什么?遵循的基本原理有哪些?
目的:概括的说总体设计的目的就是回答“系统该如何实现这个问题”
通过这个这个阶段的工作将划分出组成系统的物理元素--程序、文件数据库、人工过程和文档等,但每个物理元素仍然处于黑盒级,这些黑盒子里的具体内容将在以后仔细设计。

基本原理:1》抽象:抽出本质,忽略细节,分层理解
2》模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。

3》逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。

4》信息隐蔽和局部化:
信息隐蔽原理
应该这样设计和确定模块,使得一个模块内包含的信息(过程或数据)对于不需要这些信息的模块来说,是不能访问的
局部化
是把一些关系密切的软件元素物理地放得彼此靠近。

显然, 局部化有助于实现信息隐藏
5》模块独立性:模块独立是好设计的关键,而设计又是决定软件质量的关键环节
模块化程度较高的软件容易编制
独立的模块比较容易维护和测试
● 2.什么是耦合?有哪几种耦合?什么是内聚?有哪几种内聚?如何增强模块的独立性?
耦合:是对一个软件结构内不同模块之间互连程度的度量
耦合强弱取决于模块间接口复杂程度,进入或访问一个模块的点,以及通过接口的数据
模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性
《耦合表示一个软件结构内各个模块之间的互连程度,应尽量选用松散耦合的系统

耦合种类:公共耦合:几个模块共享一个数据区域
特征耦合:把整个数据结构作为参数传递而被调用模块只使用其中一部分数据元素时就出现了特征耦合。

控制耦合:一个模块通过传递控制信息来控制另一个模块
标记耦合: 模块间通过参数表传递记录信息,这个记录是某一数据结构的子结构,而不是简单变量
数据耦合: 只有数据在模块之间进行交换,只通过参数传递基本类型的数据
非直接耦合: 两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的
非直接耦合的模块独立性最强
内聚:标志着一个模块内各个元素彼此结合的紧密程度
内聚有七种,由弱到强分别为
偶然内聚->逻辑内聚->时间内聚->过程内聚->通信内聚->顺序内聚->功能内聚
增强模块独立性:提高模块的内聚程度,减少耦合
3.衡量模块独立性的两个标准是什么?它们各表示什么含义?
* 高内聚,少耦合;*对于一个模块而言,模块自身的内聚越强,模块间的耦合就越小,模块所具有的独立性就越好。

可以说高内聚低耦合是我们进行软件设计的一贯原则
4.什么叫模块?什么叫模块化?模块设计时应注意哪些规则?
模块:是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。

模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。

规则:高内聚,少耦合
4.影响耦合度的因素有哪些?.降低耦合度的方法有哪些?
内容耦合公共耦合特征耦合控制耦合标记耦合数据耦合非直接耦合 --内容
方法:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合环境的范围,完全不用内容耦合。

第六章详细设计
1.详细设计的根本目标和任务?
详细设计阶段的根部目标是确定应该怎样具体地实现所要求的系统。

详细设计阶段的任务是要设计出程序的“蓝图”。

2.层次图和层次方框图分别适用于软件工程的那个阶段?并比较它们的区别?
层次图和层次方框图不同点:
①层次图的形式和第3.7节中介绍的层次方框图形式相同,但是表现的内容却完全不同。

②层次图描绘的是软件的结构,层次方框图描绘的是数据结构
③层次图中的一个矩形框代表一个模块,方框间的连线表示调用关系。

层次方框图矩形框代表数据,连线表示组成关系。

层次图很适于在自顶向下设计软件的过程中使用。

层次方框图适用于需求分析阶段.
3.Jackson方法的步骤?Jackson图的优点是什么?三种基本结构
Jackson 结构化设计方法基本上由下述五个步骤组成:
1 分析并确定输入数据和输出数据的逻辑结构,并用Jackson 图描绘这些数据结构
2 找出输入数据结构和输出数据结构中有对应关系的数据单元
3 从描绘数据结构的Jackson 图导出描绘程序结构的Jackson 图
-- 按照在数据结构图中的层次,在程序结构图的相应层次,为每对有对应关系的数据单元画一个处理框 -- 根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图相应层次分别为它们画上对应的处理框
-- 根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图相应层次分别为它们画上对应的处理框
-- 若在构成顺序结构的元素中出现了重复或选择元素,需在Jackson 图中增加一个中间层次的处理框。

4 列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置。

5 用伪码表示程序
Jackson 图的优点
A :便于表示层次结构,而且是对结构进行自顶向下分解的有力工具;
B :形象直观、可读性好
C :既能表示数据结构也能表示程序结构(因为结构程序设计也只使用上述三种基本结构。

三种基本结构
顺序结构
顺序结构的数据由一个或多个数据元素组成,每个元素按确定次序出现一次。

选择结构
选择结构的数据包含两个或多个数据元素,每次按一定的条件从这些数据元素中选择一个使用,具体分为:
(1)选择结构,(2)可选结构
A B C D A seq B C D A end
重复结构
重复结构的数据,根据使用时的条件由一个数据元素出现零次或多次构成。

4.程序复杂程度的度量方法?环形复杂度的计算方法?
McCabe方法和Halstead方法
McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。

环形复杂度的计算方法:
可以用下述3种方法中的任何一种来计算环形复杂度。

(1)流图中的区域数等于环形复杂度。

(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。

(3)流图G的环形复杂度V(G)=P+1,其中,户是流图中判定结点的数目。

例如,使用上述任何一种方法,都可以计算出图6.16所示流图的环形复杂度为4。

5. 说明结构化程序设计的主要思想是什么?结构化设计方法的步骤是什么?
结构程序设计的经典定义如下所述:“如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。


结构化设计的步骤如下:①评审和细化数据流图;②确定数据流图的类型;③把数据流图映射到软件模块结构,设计出模块结构的上层;④基于数据流图逐步分解高层模块,设计中下层模块;⑤对模块结构进行优化,得到更为合理的软件结构;⑥描述模块接口。

掌握过程设计工具:程序流程图,N-S图,PAD图,判定树,判定表(应用题)
程序流程图也称为程序框图,程序流程图使用五种基本控制结构是:
盒图 (N-S图) 基本符号
PAD图
第7章实现
一.程序设计语言的选择、编码风格(选择)
程序设计语言的选择:
1.系统用户的要求: 如果所开发的系统由用户负责维护,用户通常要求用他们熟悉的语言书写程序.
2.可以使用的编译程序:运行目标系统的环境中可以提供的编译程序往往限制了可以选用的语言的范围.
3.可以得到的软件工具:如果某种语言有支持程序开发的软件工具可以利用,则目标系统的实现和验证都变得比较容易
4.工程规模:如果工程规模很庞大,现有的语言又不完全适用,那么设计并实现一种供这个工程项目专用的程序设计语言,可能是一个正确的选择
5.程序员的知识:如果和其他标准不矛盾,那么应该选择一种已经为程序员所熟悉的语言
6. 软件可移植性要求:如果目标系统将在几台不同的计算机上运行,或者预期的使用寿命很长,那么选择一种标准化程度高、程序可移植性好的语言就是很重要的
7.软件的应用领域:
FORTRAN语言特别适合于工程和科学计算
COBOL语言适合于商业领域应用
C语言和Ada语言适用于系统和实时应用领域
LISP语言适用于组合问题领域
PROLOG语言适于表达知识和推理
编码风格:
源程序代码的逻辑简明清晰、易读易懂
二.软件测试的定义、目的?软件测试的原则?简述软件测试的各个步骤的主要任务?
定义:为了发现程序中的错误而执行程序的过程。

目的:从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。

从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。

测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用
原则:
1.所有测试都应该能追溯到用户需求
2. 应该在测试开始之前就制定出测试计划:1.完成了需求模型就可以着手制定测试计划2.在建
立了设计模型后就可以立即开始设计详细的测试方案
3.测试发现的错误中的80%很可能是由程序中20%的模块造成的。

问题是怎样找出这些可疑的
模块并彻底地测试它们
4.应该从“小规模”测试开始,并逐步进行“大规模”测试
通常,首先重点测试单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误
5.穷举测试是不可能的,所谓穷举测试就是把程序所有可能的执行路径都检查一遍的测试
6.为了达到最佳的测试效果,应该由独立的第三方从事测试工作
7.充分注意测试中的群集现象。

经验表明,测试后程序中残存的错误数目与该程序中已发现
的错误数目成正比。

8.严格执行测试计划,排除测试的随意性。

9.妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。

步骤:1.模块测试
模块测试的目的是保证每个模块作为一个单元能正确运行
模块测试通常又称为单元测试
在这个测试步骤中所发现的往往是编码和详细设计的错误
2.子系统测试
子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试
模块相互间的协调和通信是这个测试过程中的主要问题
这个步骤着重测试模块的接口
3.系统测试
把经过测试的子系统装配成一个完整的系统来测试
发现的往往是软件设计中的错误,也可能发现需求说明中的错误
兼有检测和组装两重含义,通常称为集成测试
4.验收测试(验收测试也称为确认测试)
验收测试把软件系统作为单一的实体进行测试,测试内容与系统测试基本类似,但是它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试
验收测试的目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误
5.平行运行
所谓平行运行就是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。

这样做的具体目的有如下几点:
(1)可以在准生产环境中运行新系统而又不冒风险
(2)用户能有一段熟悉新系统的时间
(3)可以验证用户指南和使用手册之类的文档
(4)能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标
三.集成测试中常使用自顶向下集成和自底向上集成两种策略,比较它们的区别?
自顶向下:可在测试早期实现并验证系统主要功能且不需驱动模块,但是需桩模块
自底向上:设计测试用例容易且不需桩模块但是只有到最后程序才能作为一个整体。

四.黑盒测试的优缺点?白盒测试的优缺点?
白盒测试:
优点:迫使测试人员去了解软件的实现;检测代码中的每条路径和分支;揭示隐藏在代码中的错误;对代码的测试进行比较彻底。

缺点:白盒测试投入较大,成本较高;白盒测试不验证规格的正确性;无法检查代码中遗漏的路径和数据敏感性错误。

黑盒测试:
优点:对较大的代码单元来说,黑盒测试比白盒测试的效率高;测试人员不需要了解实现得细节,包括特定的编程语言;测试人员和编程人员是相互独立的;从用户的角度进行测试,很容易被接受和理解;有助于暴露任何与闺阁不一致或者歧异的地方;测试用例可以在规格完成后马上进行。

缺点:不能测试程序内部特定部位;如果程序未执行的代码无法发现;没有清晰的和简明的规格,测试用例很难被设计。

四.掌握白盒测试技术(逻辑覆盖)(重点考查题,详细介绍看书P162-165),设计测试用例(应用题)简介:逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试
适合于白盒测试覆盖程度由弱到强次序是:语句覆盖->判定->条件->判定/条件->条件组合。

相关文档
最新文档