软件工程期末复习问答题
[软件工程期末复习问答题]
1-1什么是软件危机?它有哪些典型表现?为什么会出现软件危机?
答:
ü 软件危机是指在计算机软件开发、使用与维护的过程中遇到到一系列严重问题。它包括两方面:如何开发软件以满足对软件日益增长的需求;如何维护数量不断增长的已有软件。
Ø 软件危机的典型表现:
(1) 对软件开发成本和进度的估计常常很不准确
(2) 用户对“已完成的”软件系统不满意的现象经常发生
(3) 软件产品的质量往往靠不住
(4) 软件常常是不可维护的
(5) 软件通常没有适当的文档资料
(6) 软件成本在计算机系统总成本中所占比例逐年上升
(7) 软件开发生产率提高的速度远远跟不上计算机应用迅速普及的需求
Ø 软件危机出现的原因:
(1) 来自软件自身的特点:逻辑部件,缺乏可见性;规模庞大、复杂,修改、修护困难。
(2) 软件开发与维护的方法不当:忽视需求分析,认为软件开发等于程序编写;轻视软件维护
(3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心
1-4 简述结构化范型和面向对象范型的要点,并分析他们的优缺点。
Ø 传统方法学:也称为生命周期方法学或结构化范型。他把生命周期全过程依次划分为若干阶段,然后顺序完成每个阶段的任务。
优点:把软件生命周期划分成若干个阶段,每个阶段的任务相对独立,比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。
缺点:当软件规模庞大时,或者对软件的需求是模糊的或会随时间变化而变化的时候,开发出的软件往往不成功;而且维护起来依然很困难。
Ø 面向对象方法学:是以数据为主线,把数据和对数据的操作紧密结合起来的方法。
要点:
(1)用对象分解取代了传统方法的功能分解
(2)把所有对象划分为类
(3)按父类与子类的关系把若干个相关类组成一个层次结构的系统。也称继承。
(4)对象彼此间仅能通过发送消息互相联系。
优点:降低了软件产品的复杂性;模拟人类习惯的思维方式,提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。
3-2怎样与用户有效的沟通以获取用户的真实需求?
Ø 与用户沟通获取需求的方法:
(1) 访谈
(2) 面向数据流自顶向下求精
(3) 简易的应用规格说明书
(4) 快速建立软件原型
5-1为每种类型的模块耦合举一个具体例子
耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于接口的复杂度,进入或访问一个模块的点,以及通过接口的数据。(a~g 耦合性:低à高,独立性:强à弱)
a. 非直接耦合:两个模块没有直接的关系。
b. 数据耦合:两个模块彼此之间通过参数交换信息,而且交换的信息仅仅是数据。
c. 特征耦合:把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素。
d. 控制耦合:传递的信息之间有控制信息(开关、标志、名字)
e. 外部耦合:一组模块都访问统一全局简单变量而不是统一全局数据结构,而且不是通过参数传递该全局变量的信息。
f. 公共环境耦合:两个或多个模块通过一个公共数据环境相互作用;当耦合模块的个数增加时复杂度显著增加。
g. 内容耦合:一个模块访问另一个模块的内部数据;一个模块不通过正常入口赚到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口
8-1软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护性?
ü 可维护性:维护人员理解、改正、改动或改进这个软件的难易程度。
ü 因素:可理解性、可测试性、可修改性、可移植性、可重用性
1) 在需求分析阶段的复审过程中,对将来要改进的部分和可能会修改的部分加以注意并指明;
2) 讨论软件的可移植性问题,并考虑可能影响软件维护的系统界面;
3) 在正式和非正式的设计复审期,从容易修改、模块化和功能独立的目标出发,评价软件的结构和过程;
4) 每个测试步骤都可以暗示在软件正式交付使用前,程序中可能需要做预防性维护的部分;
5) 在测试结束时进行最正式的可维护性复审
6) 在完成每项维护工作之后,都应该对软件维护本身进行仔细认真的复审。
7) 每当对数据、软件结构、模块过程或任何其他相关的软件特点做了改动时,必须立刻修改相应的技术文档
在软件生命周期的每个阶段都必须充分考虑维护问题,并且为软件维护预做准备。
Ø (P56)确定对系统的综合要求(需求分析的任务)
(1) 功能需求
(2) 性能需求
(3) 可靠性和可用性需求
(4) 出错处理需求
(5) 接口需求
(6) 约束
(7) 逆向需求
(8) 将来可能提出的需求
Ø 单元测试、集成测试的优缺点、特点
n 单元测试的测试对象是这些模块下的实现具体功能的单元,一般是对应详细设计中所描述的设计内容。单元测试主要关注每个具体单元模块内部的逻辑结构和功能是否正确,使问题及早暴露,也便于问题的定位解决,允许多个被测单元的被测工作同时开展。但是,具有不彻底性,对于模块间接口信息内容的正确性,相互调用关系是否符合设计无能为力。
n 集成测试的被测对象是单元间的组合,不同模块往往是分配给不同的人员开发。集成测试主要关注不同单元模块之间的接口和配合,找出与软件设计相关的程序结构,模块调用关系,模块间接口方面的问题。从程序结构出发,目的性、针对性更强,发现问题和定位问题的效率较高。
Ø 模块独立性的定义、标准含义以及实践指导意义
Ø 模块独立性是指模块内部各部分及模块间的关系的一种衡量标准,通常由内聚和耦合来度量。耦合衡量不同模块间的互相连接的紧密程度,内聚衡量一个模块内哥哥元素的结合的紧密程度。
Ø 有效的模块化的软件比较容易开发;独立的模块比较容易测试和维护。
Ø 软件生命周期三个周期的概念与关系
Ø 软件定义:确定软件开发工程必须完成的总目标;确定工程的可行性;到处实现工程目标应采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并制定工程进度表。
Ø 软件开发:具体设计和实现在前一个时期定义的软件。
Ø 软件维护:使软件持久地满足用户的需求。