软件维护与软件工程管理
《软件工程》第10章 软件维护

北京大学远程教育课程
Software Engineering_Chapter10-2
问题定义
计划 时期 可行性论证 及软件计划
需求分析
概要设计 开发 时期
详细设计Байду номын сангаас
编码
测试 运行时期 运行/维护
北京大学远程教育课程
Software Engineering_Chapter10-3
本章主要内容
• 10.1 软件维护的定义,目标与任务 • 10.2 软件维护的类型 • 10.3 软件的可维护性
北京大学远程教育课程
Software Engineering_Chapter10-13
10.2.1 改正性维护(续)
• 实践表明,软件测试和排错不可能完全暴露并改正一个大 型软件系统中的所有错误。 • 经过统计分析,在典型的市场销售的软件包中,还有缺陷 的代码行约占代码总行数的3%。正式投入使用的软件中 含有错误是不足为奇的,即使是已运行多年的软件。 • 改正性维护举例:
北京大学远程教育课程
Software Engineering_Chapter10-6
10.1.3 软件维护的任务
• 一个软件开发机构60%的精力用在维护现有的软件上。随 着产品的增加,这个比例还将不断提高。不仅当前的软件 版本要维护,仍在使用的旧版本和即将投入使用的新版本 也将需要维护。 • 在软件整个运行周期中,不仅要解决原有问题,还要解决 修改过程中产生的新问题。因此软件维护是一个无穷尽的 过程。
Software Engineering_Chapter10-18
10.2.4 预防性维护
• 维护人员不要单纯等待用户提出维护的请求,而应该选择 那些还能使用数年、目前虽能运行,但不久就须作重大修 改或加强的软件,进行预先的维护。预防性维护可以改善 软件的可维护性,减少今后对它们维护时所需要的工作量。
浅谈计算机软件系统的维护与管理措施

浅谈计算机软件系统的维护与管理措施摘要:互联网背景下,计算机软件系统的应用有效改善了人们的生活便利性,为社会经济发展提供动力基础,助力综合国力增强。
随着计算机软件系统的不断深入推广和普及,软件系统引发的各种影响和事故逐渐凸显,成为当前计算机网络应用亟待解决的重要问题之一。
因此,在有效应用计算机软件系统的同时,强化计算机软件系统的安全性和高效性,在提高工作效率及进度的基础上,进行必要的软件系统的维护和管理工作,能够改善上述的各种影响和不足,还能有效提升计算机软件性能,增强运行环境的安全性,提升运行的的稳定性,具有重要意义。
关键词:计算机软件系统;维护管理;存在的问题;解决措施前言在工业领域,计算机软件系统及技术减少了人力投入,降低了人工失误,提升工作效率,缩短工时,企业经济效益增加。
在日常生活领域,各种互联网计算机应用的普及,给人们的生活提供了便利,改变了传统的生活节奏,提供更好的服务与帮助。
因此,为了提高计算机软件的应用性能,提高应用效率。
本文通过对计算机软件系统当前应用及维护的分析,找到其中存在的不足,并提出针对性的解决措施,阐明维护管理工作的重要意义,并助力计算机软件系统的不断进步。
1计算机软件系统定义计算机软件系统常见的主要为系统软件和应用软件。
系统软件是计算机运行的动力和操作系统,对计算机硬件资源进行合理的配置;应用软件多为针对性软件,可以通过应用软件完成必要的操作目的,如office办公软件、wps办公软件等。
这两类软件共同作用,实现计算机的主要应用技术及应用效果,满足日常的生产生活所需。
2计算机软件系统维护管理现状当前,互联网技术发展迅速,计算机应用普及,大力提倡5G技术的时代背景下,计算机软件系统的开发与应用水平已经非常先进,甚至位居世界前列。
在不断发展的基于和健全管理体系监督下,向着标准化、规范化发展。
但是,对于不同的计算机技术研究单位,所研发的技术、软件都具有差异性,无法达成共享或统一,这是导致技术应用不够普及广泛的重要原因之一。
软件维护与软件工程管理

14
1. 逆向工程
软件的逆向工程通过对程序的分析,导出更高抽象层次的 表示,如从现存的程序中抽取数据、体系结构、过程的设计信息 等,是一个设计恢复过程。
逆向工程过程所抽取的信息,一方面可以提供给软件工程 师以便在维护活动中使用这些信息;另一方面可以用来重构原来 的系统,使新系统更易维护。
15
2. 重构
因此,进行维护工作要相当谨慎。
5
13.1 软件维护
• 13.1.1 软件维护的过程 • 典型的软件维护的过程可以概括为:
• 建立维护机构 • 用户提出维护申请并提交维护申请报告 • 维护人员确认维护类型并实施相应的维护工作 • 整理维护记录并对维护工作进行评审 • 对维护工作进行评价
6
13.1 软件维护
基于经验模型
• IBM 模型、普特南模型、COCOMO模型
21
13.3 软件开发进度计划
• 项目管理者的目标是定义全部项目任务,识别出关键任 务,规定完成各项任务的起、止日期,跟踪关键任务的进 展状况,以保证能及时发现拖延进度的情况。为了做到这 一点,管理者必须制订一个足够详细的进度表,以便监督 项目进度,并控制整个项目。
软件维护与软件工程管理
本章概述
本章首先介绍软件维护的概念,包括软件部署与软件交付、软件维护的过程和分类、软件的可维护
性、软件维护的副作用、自动化运维以及软件再工程技术;然后阐述软件估算软件开发进度计划、软件
开发人员组织、软件开发风险管理、软件质量保证、软件配置管理.软件工程标准与软件文档、软件过
程能力成熟度模型和软件项目管理等相关概念。 本章目标:
• 人类通过编程语言与计算机进行交流,每种编程语言都有严格的语义和语法结构。编程
软件工程第八章维护

软件工程第八章维护第一点:软件维护的定义和重要性软件维护是指在软件发布后对其进行的一系列操作和活动,旨在确保软件系统的持续可用性、可靠性和性能。
软件维护是软件开发生命周期中的一个重要环节,它涉及到对软件进行修正、优化和升级。
软件维护的重要性体现在以下几个方面:1.保障软件质量:软件在实际运行过程中可能会出现各种问题,维护可以帮助及时修复这些问题,保证软件的正常运行。
2.提高用户满意度:通过维护,可以对软件进行功能优化和界面调整,使其更加符合用户的需求,提高用户的使用体验。
3.降低风险:软件维护可以帮助提前发现并解决潜在的风险,避免因软件问题导致的损失。
4.延长软件寿命:通过不断的维护和升级,可以使软件适应不断变化的环境和需求,延长其使用寿命。
5.提高开发效率:良好的维护可以避免因软件问题导致的重复开发,提高开发团队的效率。
第二点:软件维护的类型和策略软件维护可以分为以下几种类型:1.改正性维护:这种维护类型主要是针对软件中存在的问题和错误进行修复,保证软件的正常运行。
2.适应性维护:随着环境的变化和用户需求的变化,软件需要进行相应的调整和优化,以适应新的环境和工作需求。
3.完善性维护:这种维护类型主要是针对软件的功能进行增强和扩展,以满足用户的新需求。
4.预防性维护:预防性维护是为了避免软件出现潜在的问题和风险,提前对软件进行调整和优化。
在进行软件维护时,可以采取以下策略:1.计划维护:制定详细的维护计划,包括维护的时间、内容、责任人等,确保维护工作的有序进行。
2.变更管理:对于软件的修改和更新,需要进行严格的变更管理,确保每次变更都是经过审核和评估的。
3.版本控制:通过版本控制工具,对软件的不同版本进行管理,确保软件的每个版本都是可追踪和可恢复的。
4.文档管理:对软件的维护过程和结果进行详细的文档记录,方便对软件进行管理和维护。
5.持续集成:将软件的维护工作与开发工作结合起来,通过持续集成的方式,确保软件的质量和稳定性。
软件工程学维护

20-40倍。 ② 使用现代设计概念重新设计软件体系结构,对未来的维护
工作将有很大的帮助。 ③ 由于软件原型已经存在,软件开发生产率将远远高于平均
水平。 ④ 由于用户已经有较丰富的软件使用经验,所以很容易确定
为了使软件和变化了的环境(如软/硬件升级、新数据库 等)适当地配合而修改软件的活动。约占全部维护活动的18 % ~25%。
§1. 软件维护的定义
③ 完善性维护(perfective maintenance) 为了增加软件新功能、改已有功能(如改造界面)、增强软
件性能、提高运行效率等,而修改软件的活动。 约占全部维护活动的50% ~66%。
④ 预防性维护(preventive maintenance)
为了改进未来的可维护性或可靠性,或为了给未来的改进奠 定更好的基础而主动修改软件的活动。与其它维护活动共占总 维护的4%左右。
注:① 一般维护的工作量占生存周期70%以上,维护成本约 为开发成本的4倍;
② 文档维护与代码维护同样重要。
§2. 软件维护的特点
1、建立维护组织(maintenance team)
在维护活动开始之前就明确维护责任是十分必要的,这样可 以大大减少维护过程中可能出现的混乱。
§3. 软件维护过程
钱太少 要
任务评价
变
不干!
求 维
客户要求
化
护
授
权
人
任务评价
维护管理员
系 统 管 理 员
2、维护报告
§3. 软件维护过程
⑴ 维护要求表(Maintenance Request Form)
软件工程中的软件项目维护管理

软件工程中的软件项目维护管理软件项目维护管理是指对软件项目在交付后进行的各种维护和管理工作,旨在确保软件系统的可靠性、稳定性和可扩展性。
在软件工程中,软件项目维护管理是一个重要的环节,它对于项目的后期运行和维护具有至关重要的作用。
本文将从软件项目维护管理的概念、重要性、方法与技术等方面进行论述。
一、软件项目维护管理的概念软件项目维护管理是通过对已交付的软件项目进行规划、组织、实施和控制,以保证软件系统的正常运行和持续发展。
它包括对软件项目的改进、更新、优化、故障修复等维护工作,以及对项目的进度、成本、质量等进行管理和控制。
软件项目维护管理的目标是满足用户对软件系统的需求,提高软件系统的可用性和性能,并与时俱进地适应新的需求和技术变化。
二、软件项目维护管理的重要性软件项目维护管理对于软件系统的长期运行和发展具有重要意义。
首先,软件项目维护管理可以及时修复软件系统的故障,确保系统的正常运行,并提高系统的稳定性和可靠性。
其次,通过对软件项目的改进和更新,可以提升软件系统的性能和用户体验,满足用户的新需求,增强软件系统的竞争力。
此外,软件项目维护管理还可以减少软件系统的维护成本,提高项目的可管理性和可维护性,为软件开发团队提供更好的技术支持。
三、软件项目维护管理的方法与技术为了有效进行软件项目维护管理,需要运用一系列的方法与技术。
下面列举几种常用的方法。
1.变更管理变更管理是软件项目维护管理的一项重要工作。
其目的是跟踪和控制对软件系统的变更,包括软件需求的变更、设计的变更、程序的变更等。
变更管理需要建立相应的变更控制机制,明确变更的审批流程和责任人,以确保变更的正确性和有效性。
2.故障管理故障管理是软件项目维护管理中的关键环节。
通过对软件系统中出现的故障进行分析和处理,可以保证系统的正常运行。
故障管理的具体方法包括问题定位、原因分析、解决方案设计、验证等。
在故障管理过程中,需要建立完善的故障报告和跟踪机制,及时响应用户的反馈,并持续改进系统的容错能力。
软件工程中的软件维护流程

软件工程中的软件维护流程软件维护是软件工程中不可缺少的一个环节。
它包括对软件进行修改、调试、优化和完善等活动,以确保软件能够持续运行并满足用户需求。
本文将介绍软件工程中常见的软件维护流程。
一、问题识别和报告软件维护流程的第一步是问题的识别和报告。
这是通过用户反馈、错误日志等方式来获取软件问题的信息。
在识别问题时,可以针对软件的功能、性能、可靠性等方面进行分类,以便更好地定位和解决问题。
二、问题诊断和确认在问题报告后,维护团队将进行问题诊断和确认。
这需要对问题进行详细分析和调查,以找出问题的根本原因。
同时,还需确认问题是否确实存在,并与用户进行沟通和确认。
只有明确问题后,才能制定有效的解决方案。
三、问题解决问题解决是软件维护流程的核心环节。
根据问题的性质和严重程度,维护团队将采取不同的策略和方法来解决问题。
可能的解决方案包括修复代码错误、重新设计功能模块、优化性能等。
在解决问题的过程中,需要进行详细的测试和验证,以确保解决方案的有效性和稳定性。
四、验证和发布解决问题后,维护团队将对软件进行验证和测试,以确保问题已经完全解决,并且没有引入新的问题。
验证过程中需要进行功能测试、性能测试、兼容性测试等,以确保软件的整体质量。
通过验证后,维护团队将发布修复版本,供用户升级使用。
五、文档更新在软件维护流程中,不可忽视的一个环节是文档的更新。
随着问题的解决和软件的升级,相应的文档也需要进行更新,包括用户手册、技术文档、API文档等。
更新文档可以帮助用户更好地理解和使用软件,减少后续的问题和困惑。
六、反馈和监控软件维护流程的最后一步是反馈和监控。
这需要与用户建立有效的沟通渠道,及时获取用户的反馈和建议。
同时,还需要对软件进行持续监控,以及时发现和解决潜在的问题。
反馈和监控可以帮助持续改进软件的质量和性能。
综上所述,软件维护流程包括问题识别和报告、问题诊断和确认、问题解决、验证和发布、文档更新以及反馈和监控等环节。
软件工程中的软件维护方法

软件工程中的软件维护方法在软件工程的开发过程中,软件维护是一个非常重要的环节。
软件维护是指对已经交付并投入使用的软件进行故障修复、功能增强、性能优化等一系列工作,以确保软件的稳定运行和持续发展。
本文将介绍几种常见的软件维护方法,帮助软件工程师更好地管理和优化软件系统。
I. 保障软件质量的测试维护方法为了保证软件系统的质量,测试维护是至关重要的。
在软件维护过程中,经常会遇到一些新的需求变更或功能扩展,这就需要进行相应的测试工作。
常见的测试维护方法包括:1. 单元测试(Unit Testing)单元测试是指对软件系统中最小的可测试单元进行测试,例如一个函数、一个模块或一个类。
通过创建针对这些最小单元的测试用例,验证其功能的正确性和可靠性,从而提高整体系统的稳定性。
2. 集成测试(Integration Testing)集成测试是指将多个模块或组件进行组合,对其进行测试以验证它们之间的交互和协作是否正常。
通过集成测试,可以发现各个模块之间可能存在的兼容性、接口问题等,提高整体系统的可靠性和稳定性。
3. 系统测试(System Testing)系统测试是指对整个软件系统进行全面而独立的测试。
通过模拟用户对系统进行各种操作,并验证其功能、性能、可靠性等方面的要求是否满足,确保软件系统符合预期的需求和质量标准。
II. 知识管理的文档维护方法在软件维护过程中,保留和管理相关的知识和信息是非常关键的,以便于团队成员之间的沟通和知识的传承。
文档维护是一种常见的方法,以下是几种常见的文档维护方法:1. 用户手册和技术文档用户手册和技术文档是对软件系统进行详细描述和说明的文档,包括软件的安装步骤、使用方法、注意事项等内容。
通过及时更新和维护这些文档,可以为用户和开发人员提供必要的信息和指导。
2. 缺陷报告和修复记录缺陷报告是指在软件系统中发现的问题和bug的记录,而修复记录则是记录对这些问题进行修复的过程和方法。
通过及时记录和整理这些信息,可以帮助开发人员更好地追踪和解决问题,提高软件系统的可维护性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14.1 软件维护
14.1.2 软件维护的分类
软件维护的分类
14.1 软件维护
14.1.3 软件的可维护性
软件的可维护性是用来衡量对软件产品进行维护的难易程度的标准,它是软 件质量的主要特征之一。软件产品的可维护性越高,纠正并修改其错误或缺陷, 对其功能进行扩充或完善时,消耗的资源越少,工作越容易。开发可维护性高的 软件产品是软件开发的一个重要目标。影响软件可维护性的因素有很多,如可理 解性、可测试性、可修改性等。
14.1 软件维护
14.束缚着新软件的开发。同时,待维护的软 件又常常是业务的关键,废弃它们重新开发不仅十分可惜,而且风险较大。软件 维护的此类问题引出了软件再工程。软件再工程是一类软件工程活动,通过对旧 软件实施处理,增进对软件的理解,同时又提高了软件自身的可维护性、可复用 性等。软件再工程可以帮助软件机构降低软件演化的风险,可使软件将来易于进 一步变更,有助于推动软件维护自动化的发展等等 1. 逆向工程
不同的软件开发阶段,估算的对象和使用的方法都会有所不同,估 算的精确度也不一样。一般来说,随着项目进展,对项目内容了解愈多, 估算也会越来越精确。
14.2 软件估算
14.2.2 软件估算的方法 估算的方法有很多,大致分为基于分解技术的估算方法
和基于经验模型的估算方法两大类。基于分解技术的方法包 括功能点估算法、特征点估算法、对象点估算法、代码行 (LOC)估算法、MARK Ⅱ等;基于经验模型的方法包括 IBM 模型、普特南模型、COCOMO模型等。
某项目的PERT图如左图所示 关键路径如图中粗黑线,该项目最 短完成时间为70。
14.4 软件开发人员组织
为了成功地完成软件开发工作,项目组成员必须以一种 有意义且有效的方式彼此交互和通信。如何组织项目组是一 个管理问题,管理者必须合理地组织项目组,使项目组有较 高生产率,能够按预定的进度计划完成所承担的工作。经验 表明,项目组组织得越好,其生产率越高,而且产品质量也 越高。组织软件开发人员的方法,取决于所承担的项目的特 点、以往的组织经验以及软件开发公司负责人的看法和喜好。
14.4 软件开发人员组织
14.4.2 主程序员组 为了使少数经验丰富、技术高超的程序员在软件开发过
程中能够发挥更大作用,程序设计小组也可以采用主程序员 组的组织方式。使用“主程序员组”的组织方式,可提高生 产率,减少总的人/年(或人/月)数。
14.4 软件开发人员组织
14.4.3 现代程序员组
第14章 软件维护与软件工程管理
本章目标
熟悉软件维护的基本概念。 了解软件估算的概念、方法、原则与技巧。 掌握制定软件开发进度计划的方法 了解软件开发人员组织的形式。 了解软件开发风险管理的概念。 了解软件质量保证的措施。 了解软件配置管理的相关概念。 熟悉软件工程标准与软件文档的概念。 熟悉软件过程能力成熟度模型。 了解软件项目管理的相关内容。 了解软件复用的概念。 掌握利用Microsoft Project管理开发过程。
软件重构的好处是,它可以提高程序的质量、改善软件生产率、减少维护工作量、使 软件易于测试和调试等等。
14.1 软件维护
3. 正向工程 正向工程也称为改造,用从现存软件的设计恢复中得到的信息去重
构现存系统,以改善其整体质量。在大多数情况下,实行再工程的软件 需重新实现现存系统的功能,并加入新功能和/或改善整体性能。正向 工程过程将应用软件工程的原则、概念和方法来重建现存应用。由于软 件的原型(现存系统)已经存在,正向工程的生产率将远高于平均水平; 同时,又由于用户已对该软件有经验,因而正向工程过程可以很容易地 确定新的需求和变化的方向。这些优越性使得再工程比重新开发更有吸 引力。
和代码重构不同,数据重构发生在相当低的抽象层次上,它是一种全范围的再工程活 动。当数据结构较差时,其程序将难以进行适应性修改和增强。数据重构在多数情况下由 逆向工程活动开始,理解现存的数据结构,称之为数据分析。数据分析完成后则开始数据 重新设计,包括数据记录标准化、数据命名合理化、文件格式转换、数据库类型转换等等。
14.2 软件估算
14.2.1 软件估算的概念
软件估算是指以准确的调查资料和项目信息(如人员和设备信息) 为依据,从估算对象的历史,现状及其规律性出发,运用科学的方法, 对估算对象的规模,所需工作量和成本进行的测定。
软件估算的内容包括软件规模、工作量和进度。对于估算来说,有 些可以做的很仔细,而大多数只是凭主观经验判断。所以多数估算难以 做到10%以内的精确度,有的甚至误差达几倍,尤其是估算人员经验不 足或估算项目没有可参考凭借之时。
软件维护不仅工作量大、任务重,而且如果维护的不恰当,还会产生副作用,引入新 的软件缺陷。因此,进行维护工作要相当谨慎。
14.1 软件维护
14.1.1 软件维护的过程
典型的软件维护的过程可以概括为:建立维护机构,用 户提出维护申请并提交维护申请报告,维护人员确认维护类 型并实施相应的维护工作,整理维护记录并对维护工作进行 评审,对维护工作进行评价。
14.1 软件维护
要想提高软件产品的可维护性,软件开发人员需要在开发过程和维护过程中 都对其非常重视。提高可维护性的措施有以下几种。 (1) 建立完整的文档。完整、准确的文档有利于提高软件产品的可理解性。文档 包括系统文档和用户文档,它是对软件开发过程的详细说明,是用户及开发人员 了解系统的重要依据。完整的文档有助于用户及开发人员对系统进行全面的了解。 (2) 采用先进的维护工具和技术。先进的维护工具和技术可以直接提高软件产品 的可维护性。例如,采用面向对象的软件开发方法、高级程序设计语言以及自动 化的软件维护工具等。 (3) 注重可维护性的评审环节。在软件开发过程中,每一阶段的工作完成前,都 必须通过严格的评审。由于软件开发过程中的每一个阶段都与产品的可维护性相 关,因此对软件可维护性的评审应该贯穿于每个阶段完成前的评审活动中。
14.1 软件维护
14.1.4 软件维护的副作用
软件维护是存在风险的。对原有软件产品的一个微小的改动都有可能引入新 的错误,造成意想不到的后果。软件维护的副作用主要有3类,包括修改代码的 副作用、修改数据的副作用和修改文档的副作用。 (1)人类通过编程语言与计算机进行交流,每种编程语言都有严格的语义和语 法结构。编程语言的微小错误,哪怕是一个标点符号的错误,都会造成软件系统 无法正常运行。 (2)修改数据的副作用是指数据结构被改动时有新的错误产生的现象。当数据 结构发生变化时,可能新的数据结构不适应原有的软件设计,从而导致错误的产 生。 (3)修改文档的副作用是指在软件产品的内容更改之后没有对文档进行相应的 更新而为以后的工作带来不便的情况。
14.1 软件维护
软件维护是软件产品生命周期的最后一个阶段。在产品交付并且投入使用之后,为了 解决在使用过程中不断发现的各种问题,保证系统正常运行,同时使系统功能随着用户需 求的更新而不断升级,软件维护的工作是非常必要的。概括地说,软件维护就是指在软件 产品交付给用户之后,为了改正软件测试阶段未发现的缺陷,改进软件产品的性能,补充 软件产品的新功能等,所进行的修改软件的过程。
14.3.2 PERT图
PERT图也称“计划评审技术”,它采用网络图来描述一个项目的任务网络。 不仅可以表达子任务的计划安排,还可以在任务计划执行过程中估计任务完成的 情况,分析某些子任务完成情况对全局的影响,找出影响全局的区域和关键子任 务。以便及时采取措施,确保整个项目的完成。
PERT图是一个有向图,图中的有向弧表示任务,它可以标上完成该任务所 需的时间;图中的结点表示流入结点的任务的结束,并开始流出结点的任务,这 里把结点称为事件。只有当流入该结点的所有任务都结束时,结点所表示的事件 才出现,流出结点的任务才可以开始。事件本身不消耗时间和资源,它仅表示某 个时间点。每个事件有一个事件号和出现该事件的最早时刻和最迟时刻。每个任 务还有一个松弛时间,表示在不影响整个工期的前提下,完成该任务有多少机动 余地。松弛时间为0的任务构成了完成整个工程的关键路径。
进行软件维护通常需要软件维护人员与用户建立一种工作关系,使软件维护人员能够 充分了解用户的需要,及时解决系统中存在的问题。通常,软件维护是软件生命周期中延 续时间最长、工作量最大的阶段。据统计,软件开发机构60%以上的精力都用在维护已有 的软件产品上了。对于大型的软件系统,一般开发周期是1~3年,而维护周期会高达5~ 10年,维护费用甚至会高达开发费用的4~5倍。
(1)可理解性是指人们通过阅读软件产品的源代码和文档,来了解软件的系统结构、功能、 接口和内部过程的难易程度。可理解性高的软件产品应该具备一致的编程风格,准确、完 整的文档,有意义的变量名称和模块名称,清晰的源程序语句等特点。 (2)可测试性是指诊断和测试软件缺陷的难易程度。程序的逻辑复杂度越低,就越容易测 试。透彻地理解源程序有益于测试人员设计出合理的测试用例,从而有效地对程序进行检 测。 (3)可修改性是指在定位了软件缺陷以后,对程序进行修改的难易程度。一般来说,具有 较好的结构且编码风格好的代码比较容易修改。
软件的逆向工程通过对程序的分析,导出更高抽象层次的表示,如从现存的 程序中抽取数据、体系结构、过程的设计信息等,是一个设计恢复过程。
逆向工程过程所抽取的信息,一方面可以提供给软件工程师以便在维护活动 中使用这些信息;另一方面可以用来重构原来的系统,使新系统更易维护。
14.1 软件维护
2. 重构 软件重构是对源代码和/或数据进行修改,使其易于理解或维护,以适应将来的变更。
14.4 软件开发人员组织
14.4.1 民主制程序员组
民主制程序员组的一个重要特点是,小组成员完全平等,享有充分 民主,通过协商做出技术决策,对发现错误抱着积极的态度,这种积极 态度有助于更快速地发现错误,从而导致高质量的代码;小组有高度凝 聚力,组内学术空气浓厚,有利于攻克技术难关。因此,小组成员间的 通信是平行的,如果一个小组有n个成员,则可能的通信信道有n(n−1)/2 条。但其缺点是,小组人多的话,通信量会非常大;如果组内多数成员 技术水平不高,或是缺乏经验的新手,很有可能不能完成项目。