软件工程实践(9)维护
软件工作总结范文9篇

软件工作总结范文9篇第1篇示例:软件工作总结报告一、主要工作内容在过去一年中,我主要负责了公司旗下一个项目的软件开发工作。
该项目是一个面向企业客户的管理系统,涉及到客户信息管理、订单管理、财务管理等多个模块。
在这个项目中,我主要负责了订单管理和财务管理两大模块的开发工作。
在订单管理模块的开发过程中,我主要做了以下工作:1. 完成了客户端的UI设计和开发,包括订单列表的展示、订单详情的查看和编辑等功能;2. 实现了订单的增删改查功能,包括订单的新建、修改、删除和查询等操作;3. 优化了订单查询功能的性能,提高了系统的响应速度和稳定性。
1. 设计和实现了财务报表的生成和展示功能,包括收入统计、支出统计和利润分析等功能;2. 完成了对账功能的开发,实现了对账单的生成、对账数据的对比和对账结果的展示;3. 优化了财务报表的导出功能,支持将报表数据导出为Excel或PDF格式。
二、工作成果在过去一年的软件工作中,我取得了以下成果:1. 完成了订单管理和财务管理模块的开发工作,按时交付了项目;2. 优化了订单查询和财务报表导出功能,提高了系统的性能和用户体验;3. 参与了项目的需求分析和系统设计工作,为项目的顺利实施提供了技术支持;4. 积极学习和研究新技术,提升了自己的软件开发能力和水平。
三、工作不足1. 在项目的初期,由于需求变更频繁,导致工作计划的调整较多,影响了项目的进度和质量;2. 在软件测试方面,由于工作量较大,测试不够充分,导致部分功能存在bug和问题;3. 在团队合作方面,由于沟通不畅和协调不够,影响了项目的进展和效果。
四、总结与展望在过去一年的软件工作中,我不断学习、积累经验,取得了一定的成绩。
通过这次总结,我深刻认识到自己的不足之处,明确了今后的发展方向。
在未来的工作中,我将进一步提升自己的专业技能,加强团队合作,规范工作流程,提高工作效率和质量。
相信在公司的支持和帮助下,我能够不断进步,为公司的发展和项目的成功做出更大的贡献。
《实用软件工程》第9章 面向对象设计

• 信息隐藏:对于类而言,其内部信息如属性的表示方法和操作的实现算法,对 外界是隐藏的。外界通过有限的接口来访问类的内部信息。
17
9.3.2 面向对象设计的原则
• 低耦合:在面向对象设计中,耦合主要指对象之间相互关联的紧密程度,低耦 合有利于降低一个模块改变对其他模块的影响。
• 高内聚:内聚与耦合密切相关,低耦合往往意味着高内聚,高内聚有助于提高 系统独立性。
但随着需求理解的加深,以及对系统认识程度的逐步 提高,设计人员还要对模型进行修正和完善。 • 设计任务管理子系统包括确定任务,分配任务,还包 括权衡一致性、成本、性能等因素以及未来可扩充性。 • 设计数据管理子系统,需要设计数据格式以及相应的 服务,设计数据格式的方法与所用的数据存储管理模 式密切相关,不同数据存储管理模式时,属性和服务 的设计方法是不同的。
9.2 面向对象设计与面向对象分析的关系
• 设计阶段的任务是及时把分析阶段得到的需求转变成符合各项要求的 系统实现方案。与传统的软件工程方法不同的是,面向对象的方法不强调 需求分析和软件设计的严格区分。实际上,面向对象的需求分析和面向对 象的设计活动是一个反复迭代的过程,从分析到设计的过渡,是一个逐渐 扩充、细化和完善分析阶段所得到的各种模型的过程。严格的意义上来讲, 从面向对象分析到面向对象设计不存在转换问题,而是同一种表示方法在 不同范围的运用。面向对象设计也不仅仅是对面向对象分析模型进行细化。
• (2)人机交互子系统包括有效的人机交互所需的显示和输入,这些类在很大程度上 依赖于所用的图形用户界面环境,例如Windows、Delphi、C++,而且可能包括“窗 口”、“菜单”、“滚动条”、“按钮”等针对项目的特殊类。
25
9.5.1 系统分解
软件工程--习题及答案---第九章

一、判断题1、(×)测试是为了验证该软件以正确地实现了用户的需求。
2、(√)发现错误多的程序模块,残留在模块中的错误也多。
3、(×)白盒测试法是根据程序的功能来设计测试用例的。
4、(×)黑盒法是根据程序的内部逻辑来设计测试用例的。
5、(√)确定测试计划是在需求分析阶段制定的。
6、(√)集成测试计划是在概要设计阶段制定的。
7、(√)单元测试是在编码阶段完成的。
8、(√)集成测试工作最好由不属于该软件开发组的软件设计人员承担。
9、(√)为了提高软件的测试效率,测试工作需要有测试工具的支持。
10、(×)在做程序的单元测试时,桩模块比驱动模块容易编写。
二、选择题1、测试用例是专门为了发现软件错误而设计的一组或多组数据,它由(C)组成。
A、测试输入数据B、预期的测试输出数据C、测试输入与预期的输出数据D、按照测试用例设计方法设计出的数据2、测试和调试最大的不同在于(A)。
A、操作者的心理状态不同B、它们的行为取向不同C、使用的工具不同D、运用的方法不同3、一个成功的测试是(B)。
A、发现错误B、发现至今尚未发现的错误C、没有发现错误D、证明发现不了错误4、白盒法和黑盒法最大的不同在于(A)。
A、测试用例设计方法不同B、测试的任务不同C、应用的测试阶段不同D、基于的知识集不同5、单元测试阶段主要涉及(D)的文档。
A、需求设计B、编码和详细设计C、详细设计D、概要设计6、检查软件产品是否符合需求定义的过程称为(A)。
A、确认测试B、集成测试C、验证测试D、验收测试7、软件调试的目的是(B)。
A、发现错误B、改正错误C、改善软件的性能D、挖掘软件的潜能8、进行软件测试的目的是(A)。
A、尽可能多地找出软件中的错误B、缩短软件的开发时间C、减少软件的维护成本D、证明程序没有缺陷9、选择一个适当的测试用例,用于测试下面的程序,能达到判定覆盖的是(C)。
A、B、C、 D、10、在进行单元测试时,常用的方法是(A)。
软件工程08-维护[1]
![软件工程08-维护[1]](https://img.taocdn.com/s3/m/ccb08dfc51e79b896902262e.png)
⑸ 可移植性(Portability)
是指程序被移到一个新环境的容易程度。
好程序的特征:结构好,不特别依赖于某一具
PPT文档演模板
体的计算机或操作系统。
软件工程08-维护[1]
软件的可维护性
⑹ 可使用性 ⑺ 效率(Efficiency)
是指程序能执行预定功能,而又不浪费机器资源 (包括内存、外存、通道容量、执行时间等等) 的程度。
PPT文档演模板
软件工程08-维护[1]
软件的可维护性
2、文档 —— 影响可维护性的决定因素, 比代码更重要。
⑴ 用户文档:
①功能描述 —— 说明系统能做什么;
②安装文档 —— 说明安装系统的方法及适应特定 的硬件配置的方法;
③使用手册 —— 说明使用方法以及错误挽救方法;
④参考手册 —— 详尽描述用户可使用的所有系统设 施以及它们的使用方法;给出错误 信息注解表;
⑤操作员指南(如果需要有系统操作员的话)—— 说明操作员处理使用中出现的各种情况的方法。
⑵系统文档:即软件生产过程中每一步产生的文档。
PPT文档演模板
软件工程08-维护[1]
3、复审 各阶段复审重点:
软件的可维护性
分析
设计
编码
测试
可靠性 可移植性 可用性
可理解性 可修改性 可测试性
可理解性 可修改性 可移植性
n 预防性维护的认识
n 维护一行源代码的代价是开发的14-20倍 n 重新设计软件体系结构的必要性 n 现有软件可作为“原型”使用,提高开发效率 n 容易明确“变更需求和变更的范围” n 可利用逆向工程和再工程工具,使部分工作自动化 n 可以建立起完善的软件配置
PPT文档演模板
软件工程中的软件维护与更新策略考核试卷

9. AB
10. ABC
11. ABC
12. ABC
13. ABCD
14. ABC
15. ABC
16. BC
17. ABC
18. ABC
19. ABC
20. ABC
三、填空题
1.可用性
2.纠错性维护3.金丝雀发布4.复杂循环结构5.适应性维护
6.完善性维护
7.不可理解或未文档化
8.预防性维护
A.夜间部署
B.金丝雀发布
C.滚动部署
D.立即全面部署
8.以下哪些做法可以提高软件的可维护性?()
A.编写简洁的代码
B.保持模块间的低耦合
C.使用设计模式
D.避免使用注释
9.在软件维护过程中,以下哪些活动属于适应性维护?()
A.更新操作系统
B.修改代码以适应新硬件
C.优化算法提高性能
D.增加新的功能需求
9.短期
10.变更管理
四、判断题
1. ×
2. ×
3. √
4. √
5. ×
6. ×
7. √
8. ×
9. √
10. √
五、主观题(参考)
1.纠错性维护:修复已知的错误。活动包括错误诊断和修复。
适应性维护:适应技术或环境的变化。活动包括更新硬件、操作系统等。
完善性维护:改进软件性能或增加新功能。活动包括功能增强和性能优化。
A.定期进行代码审查
B.保持详细的更改记录
C.忽视小的性能问题
D.定期更新依赖库
5.软件维护中的预防性维护可能包括以下哪些活动?()
A.代码重构
B.性能调优
C.硬件升级
D.安全漏洞扫描
《软件工程》作业及答案.

《软件工程》作业及答案1-1 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?答: 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
软件危机典型表现:对软件开发成本和进度的估计常常很不准确。
用户对“已完成的”软件系统不满意的现象经常发生。
软件产品的质量往往靠不住。
软件常常是不可维护的。
软件通常没有适当的文档资料。
软件成本在计算机系统总成本中所占的比例逐年上升。
软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
产生软件危机的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。
管理和控制软件开发过程相当困难。
软件是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。
目前相当多的软件专业人员对软件开发和维护还有不省糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这是使软件问题发展成软件危机的主要原因。
1-2 假设你是一家软件公司的总工程师,当你把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意你的观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”你怎么反驳他?1-3 什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?答: 软件工程是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
软件工程本质特性:1、软件工程关注于大型程序的构造;2、软件工程的中心课题是控制复杂性;3、软件经常变化;4、开发软件的效率非常重要;5、和谐地合作是开发软件的关键;6、软件必须有效地支持它的用户;7、在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。
软件工程—方法与实践(许家珆)
《软件工程——理论与实践》(第2 版)习题答案习题答案习题一答案一、选择题1. 软件的主要特性是(A B C)。
A) 无形B) 高成本C) 包括程序和文档D) 可独立构成计算机系统2. 软件工程三要素是(B)。
A) 技术、方法和工具B) 方法、工具和过程C) 方法、对象和类D) 过程、模型、方法3. 包含风险分析的软件工程模型是(A)。
A) 螺旋模型B) 瀑布模型C) 增量模型D) 喷泉模型4. 软件工程的主要目标是(C)。
A) 软件需求B) 软件设计C) 风险分析D) 软件实现5. 下列属于面向对象开发方法的是(A B C D)。
A) Booch B) UML C) Coad D) OMT6. 软件危机的主要表现是(B D)。
A) 软件成本太高B) 软件产品的质量低劣C) 软件开发人员明显不足D) 软件生产率低下7. 软件开发方法的主要工作模型有(A B C)A) 螺旋模型B) 循环模型C) 瀑布模型D) 专家模型8. 软件工程的目标有(A B C)。
A) 易于维护B) 低的开发成本C) 高性能D) 短的开发期9. 软件工程学的目的和意义是(A D)。
A) 应用科学的方法和工程化的规范管理来指导软件开发B) 克服软件危机C) 作好软件开发的培训工作D) 以较低的成本开发出高质量的软件二、判断题1. 软件就是程序,编写软件就是编写程序。
(×)2. 瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰。
(×)3. 结构化方法的工作模型是使用螺旋模型进行开发。
(×)4. 结构化方法和OO 方法都是一种面向过程的软件开发方法。
(×)5. 原型化开发方法包括生成原型和实现原型两个步骤。
(×)6. 面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。
( √)7. 软件危机的主要表现是软件的需求量迅速增加,软件价格上升。
(×)8. 软件工具的作用是为了延长软件产品的寿命。
软件工程与实践习题与参考答案
软件工程与实践习题与参考答案[判断题]1.由于今天个人计算机不断发展壮大,人们不再采用软件团队的开发方式。
(×)2.由于软件是产品,因此可以应用其他工程制品所用的技术进行生产。
(×)3.购买大多数计算机系统所需的硬件比软件更昂贵。
(×)4.大多数软件产品在其生命周期中不需要增强功能。
(×)5.大多数软件系统是不容易变化的,除非它们在设计时考虑了变化。
(√)6.一般来说,软件只有在其行为与设计者的目标一致的情况下才能成功。
(×)7.在需求分析过程中,分析员要从用户那里解决的最重要的问题是明确软件做什么。
(√)8.软件需求规格说明书在软件开发中具有重要的作用,它是软件可行性分析的依据。
(×)9.目前存在一个很普遍的现象,即不同的客户提出的需求是相互矛盾的,但每个人都争辩自己是正确的。
(√)10.利益相关者(stakeholders)是将来购买所开发软件系统的人。
(×)11.需求工程师的任务是将所有利益相关者的信息进行分类以便允许决策者选择一个相互一致的需求集。
(×)12.模型是对现实的简化,建模是为了更好地理解所开发的系统。
(√)13.UML语言支持面向对象的主要概念,并与具体的开发过程相关。
(×)14.开发人员与客户创建用例以帮助软件团队理解有多少类型的最终用户将使用这些功能。
(×)15.用例参与者总是人员而不是系统设备。
(×)16.在需求确认过程中需求模型被评审以保证其技术可行性。
(×)17.面向对象分析的核心在于建立一个描述软件系统的模型。
(×)18.分析类用于描述系统中概念层次的对象。
(√)19.在基于用例的面向对象分析过程中,定义交互行为的关键在于通过描述分析类实例之间的消息传递将用例的职责分配到分析类中。
(√)20.需求评审人员主要由开发人员组成,一般不包括用户。
软件工程实践考核试卷
B.减少软件开发成本
C.提高软件质量和可维护性
D.以上都是
2.下列哪种方法不是软件需求分析常用的方法?()
A.数据流图(DFD)
B.用例图
C.类图
D.波特图
3.在软件开发过程中,下列哪项活动属于设计阶段?()
A.编码
B.测试
C.需求分析
D.概要设计
4.下列哪种编程范式不属于面向对象编程?()
15. D
第二部分多选题
1. ABCD
2. ABCD
3. ABCD
4. ABCD
5. ABC
6. ABCD
7. ABC
8. ABC
9. ABCD
10. ABCD
11. ABCD
12. ABCD
13. ABCD
14. ABCD
15. ABCD
第三部分判断题
1. √
2. ×
3. ×
4. √
5. ×
6. √
5.关于软件测试,以下哪些说法是正确的?()
A.单元测试通常由开发者执行
B.集成测试用于测试模块间的交互
C.系统测试关注整个系统的行为
D.所有测试应当在编码完成前进行
6.敏捷开发方法包括以下哪些特点?()
A.短周期迭代开发
B.客户合作大于合同谈判
C.重视工作软件胜过详尽的文档
D.团队内聚大于流程和工具
1.软件工程是应用科学和工程原理来设计、开发、测试和评估软件和系统的一门学科。()
2.在软件开发过程中,需求分析阶段是在设计阶段之后进行的。()
3.面向对象编程语言不支持多态这一特性。()
4.敏捷开发强调快速响应变化,而不是遵循预先制定的计划。()
软件工程理论与实践课后习题
软件工程理论与实践课后习题1、下列要素中,不属于DFD的是()。
[单选题] *A、加工B、数据流C、数据存储D、联系(正确答案)2、当使用DFD对一个工资系统进行建模时,()可以被认定为外部实体。
[单选题] *A、接收工资单的银行(正确答案)B、工资系统源代码程序C、工资单D、工资数据库的维护3、采用瀑布模型进行系统开发的过程中,每个阶段都会产生不同的文档。
以下关于产生这些文档的描述中,正确的是() [单选题] *A、外部设计评审报告在概要设计阶段产生B、集成测试计划在程序设计阶段产生C、系统计划和需求说明在详细设计阶段产生D、在进行编码的同时,独立的设计单位测试计划(正确答案)4、在UML提供的图中,()用于描述系统与外部系统及用户之间的交互。
[单选题] *A、用例图(正确答案)B、类图C、对象图D、部署图5、在UML提供的图中,()用于按时间顺序描述对象间的交互。
[单选题] *A、网络图B、状态图C、协助图D、序列图(正确答案)6、在开发一个系统时,如果用户对系统的目标不是很清楚,难以定义需求,这时最好使用()。
[单选题] *A、原型法(正确答案)B、瀑布模型C、V-模型D、螺旋模型7、应该在()阶段制定系统测试计划。
[单选题] *A、需求分析(正确答案)B、概要设计C、详细设计D、系统测试8、在软件项目管理中可以使用各种图形工具来辅助决策,下面对Gantt图的描述不正确的是()。
[单选题] *A、Gantt图表现各个活动的顺序和它们之间的因果关系(正确答案)B、Gantt图表现哪些活动可以并行进行C、Gantt图表现了各个活动的起始时间D、Gantt图表现了各个活动完成的进度9、以下内容中,()应写入操作手册。
[单选题] *A、描述系统对各种输入数据的处理方法B、说明系统升级时厂商提供的服务C、描述系统处理过程的各个界面(正确答案)D、说明系统各部分之间的接口关系10、耦合度描述了()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
取理解他人的程序常是 极为困难的,缺乏文档 增加了困难 编码人员不经常说明软 件,人员流动使得无法 由编码者维护 没有合适的文档或文档 太少 大多数软件不是为以后 的修改进行设计 人们没有把维护性工作 看作有吸引力的工作
软件的维护性
维护“异常程序” 维护“异常程序”
采用软件工程方法开发的软件,可以采用结构化维护方法来维护 对没有按工程化要求开发的老程序(“异常程序”)的维护建议: 1)维护前先研究,力图得到尽可能多的背景信息。 2)努力熟悉(重画)总的控制流程,开始时先忽略细节。 3)分析现有文档确定其是否合理;在源程序清单中插入的注解。 4)充分使用编译/汇编所提供的交叉引用表、符号表等有用信 息。 5)极为谨慎地修改,尊重此程序的风格格式,注释修改。 6)不要删除程序语句,除非你完全肯定它是没用的。 7)不要试图共用程序中已有的临时变量及工作区。为了避免麻 烦,应该自行设置你自己的变量。 8)保存详细的记录(维护工作及结果)。 9)不要过于积极地劝说抛弃此程序而重新编写。 10)插入错误检验。
维护评价
根据以下度量对维护进行评价:
每次程序运行的平均出错次数 花费在每类维护上的总人时数 每个程序、每个语言、每种维护类型的平均修改次 数 花费在由于维护所增加或删除的每条源语句上的平 均人时数 用于每个语言的平均人时数 一个维护申请表的平均处理时间 各类维护申请的百分比
申请维护
结构性维护
齐全 软件文档齐全?
完善性维护策略
使用数据库管理系统、程序生成系统、 应用软件包等,可以减少维护工作量 开发时使用原型,让用户先期对系统进 行评价,可以减少完善性维护的需求
将维护成本和延误减少到最低限度的措施
对于不断变化着的应用问题,要明确区分哪些是 预先规定的,哪些是由用户支配的,懂得随着应 用的变化,需要完全不同的技术 理解数据库技术的重要性 理解第四带语言对维护过程的作用 在作出一个系统的计划时,要估计长期维护的费 用,并选择一种能将这一费用降低到最小程度的 技术 估计出用户在完善性维护方面潜在的作用 在最后进行程序设计之前,使用原型技术,以确 保系统尽可能地适应用户的要求
维护的成本
软件维护的费用不断增 加 典型的占结构的40%60% 不及时合理的修改降低 用户满意度 引发新问题降低重量 占用资源影响开发 维护的生产性活动 维护的“兜圈子”活动
M=p+K×ec-d
M=用于维护的总工 作量 p=生产性工作量 K=经验常数 c=复杂性度量 d=对该软件的熟悉 程度
维护工作存在的问题
文档资料的副作用
维护不应只注意修改源程序而应注意整个软件配置 修改了源程序而没有相应地修改文档就会出现文档副作用 改动数据流、数据结构、模块过程或任何其它有关特征时,有关 的技术文档资料必须要相应地更新 结构化的维护要求先维护设计,再依此维护软件的源代码 不能准确地反映软件现状的文档,可能比完全没有文档更糟糕。 在以后的维护工作中将出现副作用,那时仔细地阅读文档将 得到对软件特性的错误认识。 用户认为软件就象描述其使用的文档中所介绍的那样。如果 对可执行软件的改动没有在用户文档中得到反映,那就一定 要产生副作用。 在重新交付前审计整个软件的文档,将可大大减少文档的副作用 有时维护工作的重点就是维护文档
维护面临的问题
技术人员重开发、轻维护
维护缺乏创造自由 维护是“无期”的
用户对维护了解不多,问题被搁置 将维护和开发混为一谈 如何维持旺盛士气,改善支援环境
影响维护各种的因素
系统大小 系统年龄 输入/输出数据项个数 应用类型 程序设计语言 结构化程度
维护任务
建立维护机构 提出维护申请报告 进行维护 记录和保持维护信息 维护评价
维护工作流程
维护申请 类型 改错 严重 分析错误 的严重性 适应性 开始分 析问题 指定人员 更新软件
⊕ ⊕
⊕
不严重 改错调 度安排
*
维护任务
测试
完善性 确定 优先级 低
*
更新软件 系列文件
改错排队
⊕
高
指定人员
复审
开发安排排队
开始分析
批准交付软件 系列文件
维护记录保持
程序名称 源程序的数目 机器代码指令的数目 使用的编程语言 程序投入使用的日期 从投入使用以来,程序 运行过的数目 与上有关的故障处理次 数 程序改变的级别及名称 修改程序所增加的源语 句数 修改程序所减少的源语 句数 每次修改所付出的人时 数 修改程序的日期 软件工程师的姓名 维护申请表名称 维护类型 维护开始和结束的日期 累计花费在维护上人时 数 维护工作的净收益
软件的维护性是软件能够被理解、被校 正、被修改和(或)被改善的容易程度 软件维护工作量的超线性增长是引起软 件危机的一个重要原因,提高和保证软 件的维护性是软件工程的一个关键目的
Байду номын сангаас
影响维护性的因素
在开发过程中粗心大意 文档质量低下 最重要因素是在需求分 析时是否将提高软件的 维护性作为一项重要要 求明确地提了出来,并 采取相应的办法来保证 采用的开发方法对软件 的维护性也有影响 与开发环境有关的因素:
能否得到有经验的软件设 计人员 系统结构是否易于理解 系统是否便于使用 是否采用标准的编程语言 是否采用标准的操作系统 是否采用标准的文档格式 能否得到各种测试用例 有没有提供排错手段
维护性的实现
因为维护性是软件必不可少的特征,必须保证在 软件开发时就认真考虑影响软件维护性的因素
在每个阶段的评审中,要对软件的维护性进行审查 在评审软件需求时,应注明将来可能要修改的地方 要讨论软件移植的问题,以及考虑会影响软件维护 的系统接口 在设计评审中,要从易于修改、模块性及功能独立 性方面去评价软件结构和模块过程 代码审查要强调程序风格和内部的文档资料 通过软件测试也可以知道,哪个程序在交付前应进 行预防性维护
再工程(Re-engineering)
业务再工程:“搜寻并首先业务过程中 的根本性改变以达到突破性结果。” 软件再工程:对软件产品的再工程,软 件的重新构建。 对软件再工程的强调源于30年不断形成 的软件维护冰山。
一个软件再工程过程模型
正向工程 库存目录分析
数据重构
文档重构
代码重构
逆向工程
软件再工程
比“异常程序”更糟的程序 异常程序”
当一类程序其控制流程图象一碗面条,其“模块”有 2000行语句那么长,在9000行语句中只有3 行有意义 的注释,而且再也没有其它的软件文档了,这个时候 如何去对它进行维护? 1)可以反复修改,不断地同软件和源程序“搏斗”, 1) 以实现必要的更改。 2)可以重新设计、重新编写和测试需要修改的那部 分软件,在改写时,要采用软件工程方法。 3)可以重新设计,重新编写和测试该程序。 没有唯一“正确”的办法。即使第二种或第三种办法 看来更好一些,但客观情况往往选定第一种办法。
预防性维护是否太浪费
1)维护一行源语句的费用可能多达原先开发该行语句 所花费用的40倍。 2)采用新的设计概念重新设计软件结构,可以使将来 的维护工作十分方便。 3)由于已经有了一个软件模型,因而开发的生产率必 然远高于平均生产率。 4)用户对这些软件已有经验,因此可以比较方便地确 定新的要求以及定出修改的方向。 5)在预防性维护完成的时候,就可以得到一套系列的 软件文档。 很多软件开发机构在对他们的软件产品推出新一代的 版本时,可以看得出其中已经作过预防性维护了。
维护机构
正式和非正式的维护机构 维护管理员:管理维护工作 修改负责人:评价维护申请 系统监督员:决定如何进行修改
维护报告
外部:维护申请表(软件问题报告), 由申请维护的用户填写,说明错误情况 或新需求规格说明 内部:软件修改报告,指出
为满足某个维护申请表所需的工作量 所需修改变动的性质 申请的优先级 预计修改后的状态
修改数据的副作用
数据改变了,它可能不再与原先的软件设计相适应而产生 错误。 修改数据的副作用是修改软件信息结构所引起的。 下述数据改变往往产生副作用: 1)重新定义局部的及全局的常数; 2)重新定义记录和文件的格式; 3)改变一个数组的大小或改变高层数据结构的大小; 4)改变全局数据; 5)对控制标志或指针的重新初始化; 6)重新安排I/O或子程序参量。 修改数据的副作用可以通过完善的设计文档资料加以限制
北京理工大学 软件工程实践
汤铭端 中国航天科工集团公司204所
第九讲
软件维护和软件重用
内容和目的
了解软件维护的概念 掌握软件维护的种类 了解再工程的概念 了解逆向工程的概念 了解软件重用的内容和方法
维护的必要性
改正在运行中新发现的错误和缺陷 改进设计,以增强功能,提高性能 要求已运行的软件适应特定的工作环境, 或已变动的数据和文件 使投入运行的软件与其它相关系统有良 好的接口 使运行的软件的应用范围得到必要的补 充
仅有源程序
分析原设计 计划维护方法
分析原设计
? 修改设计 重新编程 修改源程序
复审
复审
交付
维护策略
减少改正性维护工作量的策略 减少适应性维护工作量的策略 减少完善性维护工作量的策略 将维护成本和延误减少到最低限度的措 施
改正性维护策略
通过采用新技术,可大大提高软件的可 靠性,减少进行改正性维护的需要 可在开发时考虑如下的方法:
四类维护
完善性维护是为扩充功能和改善性能而进行修 改和扩充,以满足用户变化了的需求。 适应性维护是为适应软件运行环境的变化而作 的修改。例如因为硬件配置、系统软件的变化 而要求进行的修改。 改正性维护是为了维持系统操作运行,针对在 开发过程产生但在测试和验收时没有发现的错 误而进行的改正。 第四种维护预防性维护,是为了进一步改进软 件的维护性和可靠性,或者为进一步的提高提 供一种更好的基础,而对软件进行的更改。