软件工程期末复习资料.docx
《软件工程期末复习资料.docx》由会员分享,可在线阅读,更多相关《软件工程期末复习资料.docx(17页珍藏版)》请在冰豆网上搜索。
![软件工程期末复习资料.docx](https://file1.bdocx.com/fileroot1/2023-2/25/bba9cacf-8090-4af3-b9d9-0e20cb0dba7e/bba9cacf-8090-4af3-b9d9-0e20cb0dba7e1.gif)
软件工程期末复习资料
一、选择题(2’×10=20‘)
二、填空题(2’×3=6‘)
三、名词解释(8’×8=64‘)
四、画图题(5’×2=10’)
案例题
Ø软件工程的基本原理。
1.用分阶段的生命周期计划严格管理
2.坚持进行阶段评审
3.实行严格的产品控制
4.采纳现代程序设计技术
5.结果应能清楚地审查
6.开发小组的人员应少而精
7.承认不断改进软件工程实践的必要性
Ø软件工程的定义
●将系统的、规范的、可度量的工程化方法应用于软件开发、运行和维护的全过程及上述方法的研究
Ø软件工程的原则
●软件工程原则:
抽象、信息隐藏、模块化、局部化、一致性、完整性和可验证性。
Ø软件工程方法学及软件工程方法学的三要素
⏹方法学:
在软件生命周期全过程中使用的一整套技术方法的集合成为方法学,目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。
•传统方法学:
传统方法学也称为生命周期方法学或结构化范型。
它采用结构化技术来完成软件开发的各项任务
传统方法学的特点:
传统方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。
每个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。
•面向对象方法学:
面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。
⏹软件工程方法学的三要素:
工具,方法,过程。
Ø什么是软件的生命周期
●软件生命周期是指某一软件项目被提出来并着手实现开始直到该软件报废或停止使用为止。
软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成
•软件定义时期的任务是:
确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。
•开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:
总体设计,详细设计,编码和单元测试,综合测试。
其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
•维护时期的主要任务是使软件持久地满足用户的需要。
●生命周期模型简洁地描述软件过程,又称过程模型
Ø什么是黑盒测试?
什么是白盒测试?
黑盒测试(又称功能测试)把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。
黑盒测试是在程序接口进行的测试,只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息(例如数据库或文件)的完整性。
白盒测试(又称结构测试)是把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。
这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
Ø需求变更可能带来哪些风险?
软件交付时间延长,软件成本提升,人事安排的变动,缺乏技术上的支持,现有软件架构不符合软件需求,使软件项目不能被实现。
或最终产品达不到用户要求。
Ø软件工程的基本目标有哪些?
组织实施软件工程项目,最终目标是降低软件的开发成本,提高软件的质量、软件的可维护性和软件开发的效率。
软件工程的主要目标是生产具有正确性、可用性以及开销合适的产品。
Ø软件测试的目标是什么?
测试决不能证明软件是正确的,也不能证明错误的不存在,它只能证明错误的存在。
Ø软件测试的基本任务是什么?
简述测试的目标和基本原则?
⏹基本任务
●软件测试的基本工作就是就是通过科学的、可靠的、有效的测试方法及技术找出软件中存在的缺陷
⏹基本准则
●所有测试都应该能追溯到用户需求;
●应该远在测试开始之前就制定出测试计划;
●把Pareto原理应用到软件测试中;群集现象:
80%的错误可能是由20%的模块造成的
●应该从“小规模”测试开始,并逐步进行“大规模”测试;
●穷举测试是不可能的;
●为了达到最佳的测试效果,应该由独立的第三方从事测试工作。
Ø如何理解模块独立性?
用什么指标来衡量模块独立性?
模块独立性是指软件系统中的每个模块只涉及软件要求的具体字功能,只通过简单的接口和软件系统中其他模块相联系。
模块的独立性好,对软件的可靠性和软件的可维护性是很有帮助的,耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量,模块的独立性度量的准则:
模块间的耦合与模块的聚合。
☐耦合是模块间的独立关系的度量,模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。
降低耦合度的设计原则:
尽量使用数据耦合,少用控制耦合和特征耦合,限制公共耦合的范围,完全不用内容耦合。
☐聚合是模块内部各元素之间结合的紧密的度量,软件的设计目标:
高内聚
ØUML是什么,主要作用是什么?
◎UML(UnifiedModelingLanguage)是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统的文档。
✦使用UML进行软件系统的分析与设计,能够加速软件开发的进程,提高代码的质量,支持变动的业务需求。
✦UML适用于各种大小规模的软件系统项目,能促进软件复用,方便地集成已有的系统软件资源。
✦UML是一种标准的表示方法,为不同领域的人提供了一种统一的交流方法。
✦UML采用面向对象的图形方式来描述任何类型的系统,因此,UML具有广泛的应用领域。
✦UML的应用覆盖了从需求分析阶段到软件测试阶段的各阶段。
Ø什么是软件?
它的特性是什么?
⏹软件的定义
软件是程序、数据以及开发、使用和维护程序需要的所有文档的完整集合。
软件一般认为由三部分组成:
●程序:
在运行时,能提供所希望的功能和性能的指令集。
是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。
●数据结构:
使程序能够正确运行的数据结构。
●文档:
描述程序研制过程、方法及使用的文档
⏹软件的特点:
◆是一种逻辑产品,不是物理实体
◆无折旧、磨损、消耗、老化
◆软件产品的开发主要是脑力劳动
◆成本昂贵(人力、物力、资金)
◆对硬件具有依赖性(可移植性)
◆软件复杂的(逻辑系统)
Ø软件工程过程有哪几个基本过程活动?
需求分析,系统设计,编码,测试和维护
软件开发过程是把用户要求转化为软件需求,把软件需求转化为设计,用代码来实现设计,对代码进行测试,完成各阶段的文档编制并确认软件可以投入运行使用的过程。
Ø什么是软件开发模型?
典型的软件开发模型有哪些?
软件开发模型是指软件开发全部过程,活动和任务的结构框架
Ø瀑布模型软件开发方法的基本过程及优缺点。
●将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型,包括问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和维护。
规定了由前至后、相互衔接的固定次序,恰如奔流不息拾级而下的瀑布。
实际情况是,每项活动都有以下特征:
•从上一项活动接受本项活动的工作对象,作为输入
•利用这一输入实施本项活动的工作内容
•给出本项活动的工作成果,作为输出传给下一项的活动
•对本项活动实施的工作进行评审,若其工作得到确认,则继续进行下一项活动,否者返回前项,甚至更前项的活动进行返工
●瀑布模型的优点:
可强迫开发人员采用规范的方法(例如,结构化技术);严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。
●瀑布模型的缺点:
缺乏灵活性,无法解决软件需求不明确或不准确的问题。
由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。
适用于需求已准确定义的项目
Ø为什么要进行需求分析?
需求分析要经过哪些步骤?
及需求分析的任务?
●掌握全部需求,准确定位目标系统,所具备功能
●一般分为以下四个步骤进行:
1.需求获取:
调查研究;
2.需求提炼:
分析建模;
3.需求描述:
编写SRS;
4.需求验证。
●需求分析的任务
1.确定对系统的综合需求
(1)功能需求:
所开发软件系统必须提供的服务,划分出系统必须完成的所有功能
(2)性能需求:
所开发软件的技术性能指标,比如存储容量、响应时间等。
(3)环境需求:
软件运行时所需要的软、硬件的要求
(4)接口需求:
描述应用系统与它的环境通信的格式。
(5)用户界面需求:
人机交互方式、输入/输出数据格式等。
(6)其他需求,包括可靠性、安全性、保密性、可移植性等方面的需求。
2.分析系统的数据需求;
分析系统事务数据要求通常采用建立数据模型的方法。
◆建立数据模型-----实体联系图(ER图);
◆描述数据结构-----层次方框图和Warnier图。
3.建立软件的逻辑模型;
用数据流图、数据字典、实体-联系图和主要的处理算法等描述目标系统的逻辑模型。
4.修正系统开发计划
在对系统分析的过程中,可以估计系统开发的成本和进度,修正之前的开发计划。
Ø需求分析建模的主要方法
⏹需求分析建模过程应该建立3种模型:
●数据模型:
ER图
●功能模型:
数据流图
数据流图的概念:
数据流图(DFD)是一种图形化技术,用于表示系统逻辑模型,它以直观的图形清晰地描述了系统数据的流动和处理过程。
是分析员与用户之间极好的通信工具。
●行为模型:
状态转换图
Ø么是软件危机?
它有哪些主要表现?
为什么会产生软件危机?
⏹软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
主要是两个问题。
•如何开发软件,怎样满足对软件的日益增长的需求。
•如何维护数量不断膨胀的已有软件。
⏹主要表现:
(×)
•对软件开发成本和进度的估计常常很不准确。
•用户对“已完成”的软件系统不满意的现象经常发生。
•软件产品的质量往往不可靠。
软件可靠性和质量保证的定量概念刚刚出现不久。
可靠性得不到保证。
•软件常常是不可维护的。
通常软件维护的费用占总费用的55%-70%。
•软件通常没有适当的文档资料,给软件开发和维护带来极大困难。
•软件成本在计算机系统总成本中所占的比例逐年上升。
•软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势。
⏹产生软件危机的原因(×)
•与软件本身的特点有关
软件不同于硬件,它是计算机系统的逻辑部件而不是物理部件。
在写出程序代码并在计算机运行之前,软件开发过程的进展情况较难衡量,软件开发的质量也较难评价。
因此,管理和控制软件开发过程相当困难。
•软件不易于维护
a)软件维护通常意味着改正或修改原来的设计,客观上使软件较难维护。
b)软件不同于一般程序,它的规模大,不易于维护。
•在软件开发过程中,或多或少地采用了错误的方法和技术。
•对用户需求没有完整准确的认识,就匆忙着手编写程序。
Ø什么是软件的维护?
有哪几种维护类型?
所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。
可以通过描述软件交付使用后可能进行的4项活动,具体地定义软件维护。
以下四类:
v改正性维护;
v适应性维护;
v完善性维护;
v预防性维护。
Ø软件测试要经过哪些步骤?
这些测试与软件开发各阶段之间有什么关系?
大型软件系统的测试过程基本上由模块测试、子系统测试、系统测试、验收测试和平行运行等五个步骤组成。
•步骤:
v模块测试、子系统测试、系统测试、验收测试和平行运行
v单元测试→集成测试→确认测试→系统测试。
•关系
v单元测试:
对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。
该阶段涉及编码和详细设计文档。
v集成测试:
是为了检查与设计相关的软件体系结构的有关问题,也就是检查概要设计是否合理有效。
v确认测试:
主要是检查已实现的软件是否满足需求规格说明书中确定了的各种需求。
v系统测试:
是把已确认的软件与其他系统元素(如硬件、其他支持软件、数据、人工等)结合在一起进行测试。
以确定软件是否可以支付使用。
Ø类与类之间的关系包括哪几种?
v关联,聚集,组合,泛化,依赖,细化
Ø什么是类,什么是对象,类和对象是什么关系?
v类的概念:
类是具有相同属性和服务的一组对象的集合。
为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。
v对象的概念:
对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位。
v类与对象的关系:
类实例化的结果就是对象,而一类对象的抽象就是类
Ø什么是软件可维护性?
可维护性度量的特性是什么?
⏹维护人员理解、改正、改动或改进这个软件的难易程度。
⏹特性:
•可理解性
•可测试性
•可修改性
•可移植性
•可重用性
Ø与客户沟通获取需求的方法有哪些?
1.客户访谈:
分为正式的和非正式的两种基本形式
Ø什么是数据字典?
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
Ø数据流图的作用是什么?
它有哪些基本成份?
是用于表示系统逻辑模型的一种工具。
它从数据传递和加工的角度,以图形的方式描述数据在系统中流动和处理过程。
它表示了系统内部信息的流向以及系统的逻辑处理功能。
数据流图的主要成分有四种:
数据流、数据存储、加工、数据流的源点和终点。
Ø软件项目的工作通常会产生哪些文档?
文档可以分为用户文档和系统文档两类。
用户文档是用户了解系统的第一步,它应该能使用户获得对系统的准确的初步印象。
所谓系统文档指从问题定义、需求说明到验收测试计划这样一系列和系统实现有关的文档。
需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望
Ø总体设计的原理主要包括哪些?
•模块化
•抽象
•逐步求精
•信息隐蔽和局部化
•模块独立
Ø什么是单元测试,什么是集成测试,什么是确认测试?
单元测试集中检测软件设计的最小单元——模块。
测试方法:
白盒测试为主,黑盒测试为辅,多个模块并行进行。
确认测试也称为验收测试,它的目标是验证软件的有效性。
集成测试是测试和组装软件的系统化技术。
主要目标是发现与接口有关的问题。
Ø总体设计阶段的主要目的和任务是什么?
•基本目的就是回答“概括地说,系统应该如何实现?
”这个问题
•重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
Ø如何区分数据流图的类型?
试述“变换型数据流图”和“事务型数据流图”的设计步骤。
⏹变换流:
•信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。
⏹事务流:
•数据沿输入通路到达一个处理T,T根据输入数据的类型在若干个动作序列中选出一个来执行。
Ø比较软件结构图和层次图的异同。
Ø软件详细设计的基本任务是什么?
有哪几种描述方法?
任务:
(1)确定每个模块的具体算法。
(2)确定每个模块的内部数据结构及数据库的物理结构。
(3)确定模块接口的具体细节。
(4)为每个模块设计一组测试用例
(5)编写文档,参加复审。
描述方法
程序流程图、PAD图、PDL。
Ø面向对象建模主要建立哪几种模型?
各自的特点是什么。
•用面向对象方法开发软件,通常需要建立3种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。
•对象模型表示静态的、结构化的系统的“数据”性质。
它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
•动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。
•功能模型表示变化的系统的“功能”性质,它指明系统应该“做什么”,因此更直接地反映了用户对目标系统的需求
Ø加工逻辑的描述
结构化语言,判定数,判定表
●结构化语言
If年龄〈=25then
if文化程度=初中then脱产学习endif
if文化程度=高中then电工endif
endif
if25〈年龄〈=40then
if文化程度=中学then
if性别=男then钳工
else车工
endif
endif
if文化程度=大学then技术员endif
endif
if40〈年龄〈=50then
if文化程度=中学then交通协管员endif
if文化程度=大学then技术员endif
endif
●判定数
●判定表
结构化程序设计
定义:
如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,而且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
设计规则:
(1)使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。
(2)选用的控制结构只准许有一个入口和一个出口。
(3)复杂结构应该用基本控制结构进行组合嵌套来实现。
(4)严格控制GOTO语句
PAD图问题分析图
NS盒图
程序复杂度(McCabe度量法:
又称环路度量法,Halstead方法)
V(G)=判定结点数+1
V(G)=流图中区域数(包括图外区域)
V(G)=E-N+2;E:
边数N:
节点