软件工程导论学习笔记——(4)项目维护和管理(含十二章、十三章课后题答案)

目录

 引言

十二、软件维护

12.1软件维护特点

12.2软件维护过程

12.3软件的可维护性

12.3.1决定软件可维护性的因素

十三、软件项目管理

十四、参考答案

14.1第十二章参考答案

14.1.1练练手

14.1.2动动脑

14.2第十三章答案

14.2.1练练手

14.2.2动动脑


 引言

尊敬的读者:
您好!在此次博客中,我将分享一些有关软件工程导论的重要观点和理论。这些内容均摘自清华出版社出版的《软件工程导论》一书。在此,我郑重声明,本次分享的目的是为了传播和普及软件工程领域的知识,绝非抄袭或剽窃。以下为本书的相关信息,以兹证明:
书名:《软件工程导论》
编著:吴艳 曹平
出版社:清华大学出版社
出版日期:2021.2(2022.7重印)
希望本次分享能够为您带来收获,并激发您对软件工程领域更深入的研究。再次感谢您的关注与支持!
敬请期待后续内容,我们将一同探索软件工程的奥秘。
顺祝商祺!


续前文:

软件工程导论学习笔记——(2)项目启动阶段(含三四五章课后题答案):

软件工程导论学习笔记——(2)项目启动阶段(含三四五章课后题答案)-CSDN博客

软件工程导论学习笔记——(1)基础知识(含一二章课后题答案):

软件工程导论学习笔记——(1)基础知识(含一二章课后题答案)-CSDN博客


十二、软件维护

        所谓软件维护,就是在软件已经交付使用之后为了改正错误或满足新的需求而修改软件的过程。可以通过描述软件交付使用后可能进行的4项活动,具体地定义软件维护。

12.1软件维护特点

1.改正性维护
        软件测试不可能暴露大型软件系统中所有可能潜藏的错误,因此用户在软件的使用中也会发现程序中的错误,并且把遇到的问题报告给维护人员。诊断和改正错误的过程称为改正性维护。改正性维护占全部维护活动的17%~21%。
2.适应性维护
        计算机科学领域发展迅速,硬件和软件更新快,时常会增加或更新外部设备和其他系统部件;此外,应用软件的使用寿命远远长于开发该软件时的运行环境寿命。因此,适应性维护是为了和变化了的环境(包括外部环境和数据环境)适当地配合而进行的修改软件的活动,是既必要又经常的维护活动。适应性维护占全部维护活动的18%~25%。
3.完善性维护
        在使用软件的过程中,为了满足用户提出的增加新功能或修改已有功能的要求和一般性的改进要求,需要进行完善性维护。这些新添的或改进的要求包括功能和性能的要求。完善性维护占全部维护的50%~66%。
4.预防性维护
        “把今天的方法学应用于昨天的系统以满足明天的需要。”预防性维护就是为了未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件的过程。该维护方法采用先进的软件工程方法对需要维护的软件或软件中的某一部分主动进行重新设计,编码和测试。这类维护活动相对于其他3类维护活动来说比较少,占全部维护的4%左右。
        通常,生成100%可靠的软件并不一定合算,成本太高。但通过使用新技术,可大大减少进行改正性维护的需要;适应性维护不可避免,可以控制;用前两类维护中列举的方法也可以减少完善性维护。在这4类维护活动中,只有预防性维护是主动的,其他维护活动都是被动的。
        应该注意,上述4类维护活动都必须应用于整个软件配置,维护软件文档和维护软件的可执行代码是同样重要的。

12.2软件维护过程

        维护过程本质上是修改和压缩了的软件定义和开发过程,而且事实上远在提出一项维护要求之前,与软件维护有关的工作就已经开始了。

12.3软件的可维护性

        可以把软件的可维护性定性地定义为:维护人员理解、改正、改动或改进这个软件的难易程度。提高可维护性是支配软件工程方法学所有步骤的关键目标。

12.3.1决定软件可维护性的因素

        决定软件可维护性的因素主要有以下8个,这些因素之间可能相辅相成,也可能相互抵触。因此,在实际考虑时不能走极端。
1.可理解性
        软件可理解性表现为外来读者理解软件的结构、功能、接口和内部处理过程的难易程度。
模块化(模块结构良好,高内聚,松耦合)、详细的设计文档、结构化设计、程序内部的文档和良好的高级程序设计语言等,都对提高软件的可理解性有重要贡献。
2.可测试性
        可测试性表明发现程序中错误的容易程度。良好的文档对论证和测试至关重要。此外,软件结构、可用的测试工具和调试工具,以及以前设计的测试过程也都非常重要。维护人员应该能够得到在开发阶段用过的测试方案,以便进行回归测试。
对于程序模块来说,可以用程序复杂度度量它的可测试性。模块的环形复杂度越大,可执行的路径越多,因此全面测试它的难度就越大。
3.可修改性
        可修改性表明程序容易修改的程度。一个可修改的程序应当是可理解的、通用的、灵活的、简单的。
        软件容易修改的程度与第8章讲过的设计原理和启发规则直接相关。耦合、内聚、信息隐藏、局部化、控制域与作用域的关系等,都影响软件的可修改性。
4.可靠性
        可靠性表明一个程序按照用户的要求和设计目标,在给定的一段时间内正确执行的概率。度量的标准主要有平均无故障时间(MTTF)和平均修复时间(MTTR)。
        其中,MTTF的计算方法是总的正常运行时间/故障次数,即 MTTF=∑T1/N.该值越大,表示系统的可靠性越高,平均无故障时间越长;MTTR的计算方法是总的故障时间/故障次数,即MTTR=∑(T2+T3)/N,该值越小,表示程序的易恢复性越好。
5.可移植性
        软件可移植性指的是把程序从一种计算环境(硬件配置和操作系统)转移到另一种计
算环境的难易程度。
        把与硬件、操作系统以及其他外部设备有关的程序代码集中放到特定的程序模块中,可以把因环境变化而必须修改的程序局限在少数程序模块中,从而降低修改的难度。
6.可使用性
        可使用性是指程序实用、易于操作、可容错的程度。一个可使用的程序应是易于使用
的、能允许用户出错和改变,并尽可能不使用户陷入混乱状态的程序。
7.效率
        效率表明一个程序能执行预定功能,而又不浪费机器资源的程度。这些机器资源包括内存容量、外存容量、通道容量和执行时间。
8.可重用性
        可重用性是面向对象软件工程中特有的软件可维护性因素。所谓重用,是指同一事物不做修改或稍加改动就在不同环境中多次重复使用。大量使用可重用的软件开发较件,可从两个方面提高软件的可维护性。
(1)软件中使用的可重用性构件越多,软件的可靠性越高,改正性维护需求就越少。
(2)可重用软件易修改,在新环境中的再应用、适应性和完善性也就越容易。
决定软件可维护性因素在各类维护中的侧重点见表1。

表1 决定软件可维护性因素在各类维护中的侧重点
因素改正性维护适应性维护完善性维护
可理解性
可测试性
可修改性
可靠性
可移植性
可使用性
效率
可重用性

十三、软件项目管理

        略



十四、参考答案

14.1第十二章参考答案

14.1.1练练手

1

2

3

4

5

6

7

8

9

10

C

B

C

C

B

C

B

D

D

C

11

12

13

14

15

D

C

C

C

C

14.1.2动动脑

1)预测“机票预订系统”交付用户后,用户可能会提出的改进或扩充功能的要求。如果由你开发这个系统,你会再设计和实现时,采取哪些措施,以便将来的系统维护?

【解答】

(以面向对象软件工程为例)

  1. 采用主流(开源的)框架,搭建软件体系结构。
  2. 根据面向对象设计原则,设计易扩展的软件结构,同时要控制类的规模(否则会增加系统的复杂性)。
  3. 设计和实现过程中,需要编制设计文档和编写源代码。
    1. 设计文档要详尽,逻辑思路明确,连贯且保持一致性。
    2. 源代码可读性强,具有好的编程风格(特别的,注释要详细和到位)。
  4. 编程语言适合系统的特点,类库丰富,易于移植。
  5. 重视预防性维护,把今天的方法学应用到昨天的系统上,以支持明天的需求。

2)理解软件再工程和预防性维护的出发点,并结合“机票预订系统”做深入研究。

【解答】

再工程:文档重构à使用PowerDesigner进行逆工程,导出类图和CDMà代码重构à数据重构

预防性维护:以退票为例,退票à考虑等票用例的设计à完善退票业务逻辑,考虑退票到等票的接口。


14.2第十三章答案

14.2.1练练手

1

2

3

4

5

6

7

8

9

10

C

A

D

D

C

D

D

C

B

B

14.2.2动动脑

1)设计一个算法,求解工程网络中的关键路径。

【解答】

  1. 设计一个算法,求解工程网络中的关键路径:
    1. 输入e条带权弧,建立AOE网的存储结构。
    2. 从源点出发,令Ve[0] = 0,按拓扑排序求其余各顶点的最早发生时间ve[i] (1 ≤ i ≤ n - 1)。如果得到的拓扑有序序列中顶点个数小于网中顶点数n,则网中有环,算法终止;否则执行下一步。
    3. 从汇点出发,令Vl[n-1] = Ve[n-1],按拓扑逆序求其余顶点的最迟发生时间vl[i] (0 ≤ i ≤ n - 2)
    4. 根据各顶点的VeVl值,求每条弧s的最早开始时间e(s)和最迟开始时间l(s)
    5. e(s) = l(s),则输出关键活动s
  2. 下面给出Ve的递推公式(用辅助数组Ve存放各个顶点的最早发生时间):
    1. 从源点出发,令Ve[0]=0 
    2. 按拓扑有序序列向前递推求其余各顶点的可能最早发生时间:Ve(k)=max{ ve(j) + dut(<j,k>) } ,其中,dut为弧上权值;j T T是以顶点vk为尾的所有弧的头顶点的集合(1 ≤ k ≤ n-1)
    3. 如果得到的拓扑有序序列中顶点的个数小于网中顶点个数n,则说明网中有环,不能求出关键路径,算法结束。
  3. 下面给出Vl的递推公式(用辅助数组Vl存放各个顶点的最早发生时间):
    1. 从汇点出发,令Vl(n-1) = Ve(n-1)
    2. 按逆拓扑有序序列求其余各顶点的允许的最晚发生时间:Vl (j)=min{ Vl(k) – dut (<j,k>)} ,其中,kS S 是以顶点vj是头的所有弧的尾顶点集合(0 ≤ j ≤ n-2)

(2)安装Project 2007或更高版本,进行项目计划实践。

【解答】

参照教材中提供的步骤,进行实践。


  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值