软件工程复习题(根据课本整理) 下载本文

内容发布更新时间 : 2024/5/3 10:17:39星期一 下面是文章的全部内容请认真阅读。

第一章:

1.什么是软件危机?有什么表现?P1-2

2.什么是软件工程?软件工程的基本目标是什么?软件工程与基本目标之间的关系? 软件工程的基本目标是:

①付出较低的开发成本 ②达到要求的软件功能 ③取得较好的软件性能 ④开发的软件易于移植 ⑤需要较低的维护费用

⑥能按时完成开发任务,及时完成开发任务,及时交付费用 ⑦开发的软件可靠性高

在具体项目的实际开发中,企图让以上几个目标都达到理想的程度往往是非常困难的。

软件工程目标之间的关系如上图:

表明了软件工程目标之间存在的相互关系。其中有些目标之间是互补关系,例如,易于维护和高可靠性之间,低开发成本与按时交付之间。还有一些目标是彼此互斥的,例如,低开发成本与软件可靠性之间,提高软件性能与软件可移植性之间,就存在冲突。

3.软件工程方法学有哪些要素?方法、工具和过程 4.软件生命周期(选择正确的模型)

(1)假设要求你开发一个软件,该软件的功能是把读入的浮点数开平方,所得到的结果应该精确到小数点后4位。一旦实现并测试完成后,该产品将被抛弃。你打算采用哪种软件生命周期模型?请说明你的理由。

对这个软件的需求很明确,实现开平方功能的算法也很成熟,因此,即无须通过原型来分析需求也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件。 因此,开发这个简单的软件,使用大多数人所熟悉的瀑布模型就可以了。

(2)假设你被任命为一家软件公司的项目负责人,你的工作是管理该公司已被广泛应用的字处理软件的新版本开发。由于市场竞争激烈,公司规定了严格的完成期限并且已对外公布。你打算采用哪种软件生命周期模型?为什么?

对这个项目的一个重要要求是,严格按照已对外公布了的日期完成产品开发工作,因此,选择生命周期模型时应该着重考虑哪种模型有助于加快产品开发的速度。使用增量模型开发软件时可以并行完成开发工作,因此能够加快开发进度。

这个项目是开发该公司已被广泛应用的字处理软件的新版本,从上述事实至少可以得出3点结论:1.旧版本相当于一个原型,通过收集用户对旧版本的意见,较容易确定对新版本的需求,没必要再专门建立一个原型系统来分析用户的需求;2.该公司的软件工程师对字处理软件很熟悉,有开发字处理软件的丰富经验,具有采用增量模型开发新版字处理软件所需要的技术水平;3.该软件受到广大用户的喜爱,今后很可能还要开发更新的版本,因此,应该把软件的体系结构设计成开放式的,以有利于今后的改进和扩充。

综上所述,采用增量模型来完成这个项目比较恰当。

第二章:

1.什么是数据流图?数据流图有什么作用?

数据流图的作用是什么?它有哪些基本成份?

答:数据流图可以用来抽象地表示系统或软件。它从信息传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程,同时可以按自顶向下、逐步分解的方法表示内容不断增加的数据流和功能细节。因此,数据流图既提供了功能建模的机制,也提供了信息流建模的机制,从而可以建立起系统或软件的功能模型。

2.画数据流图(如银行取款、订货、订飞机票)

(1)画出描述储户携带存折去银行办理取款手续的数据流图。

储户携带存折去银行办理取款手续的数据流图如下:

(2)订货的数据流图 P44

(3)订飞机票的数据流图:

第三章:

复习的范围(P65—67) 1. 怎么画状态图?如:

复印机的工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告等待维修人员来排除故障,故障排除后回到闲置状态。 请用状态转换图描绘复印机的行为。 解:

第五章:

什么是模块化?P94 什么是内聚?什么是耦合?P97---99

第六章:

画程序流程图和盒图(见作业) 作业如下:

下面是一段用赛德尔迭代法求解线性方程组的程序。其中A[n,n] 是方程组的系数矩阵, B[n]是方程组的右端项,X[n] 是方程组的解向量。eps是控制迭代精度的较小实数。imax是控制迭代的最大次数。flag是标志,=0,表示迭代不收敛;=1,表示迭代收敛。

for k := 1 to n do X[k] := 0.0; X[n] := 1.0;

for i := 1 to imax do begin flag := 1; for j := 1 to n to begin s := B[j]; for k := 1 to n do begin

if j =k then s := s + X[k]; s := s-A[j, k] * X[k] end;

if abs(X[j]-s) > (abs(s) + 1.0) * eps then flag := 0;