论软件维护方法及其应用
试题二 论软件维护方法及其应用
软件维护是指在软件交付使用后,直至软件被淘汰的整个时间范围内,为了改正错误或满足新的需求而修改软件的活动。在软件系统运行过程中,软件需要维护的原因是多种多样的,根据维护的原因不同,可以将软件维护分为改正性维护、适应性维护、完善性维护和预防性维护。在维护的过程中,也需要对软件的可维护性进行度量。在软件外部,一般采用MTTR来度量软件的可维护性;在软件内部,可以通过度量软件的复杂性来间接度量软件的可维护性。
据统计,软件维护阶段占整个软件生命周期60%以上的时间。因此,分析影响软件维护的因素,度量和提高软件的可维护性,就显得十分重要。
请围绕“软件维护方法及其应用”论题,依次从以下三个方面进行论述。
1.概要叙述你参与管理和开发的软件项目,以及你在其中所承担的主要工作。
2.详细论述影响软件维护工作的因素有哪些。
3.结合你具体参与管理和开发的实际项目,说明在具体维护过程中,如何度量软件的可维护性,说明具体的软件维护工作类型。
摘要:
2022年3月,我负责了某公司基于云原生理念的“自动化运维系统”的建设项目,由我担任系统架构设计师,负责系统架构设计工作,在架构设计初期就充分考虑了软件的可维护性,影响软件维护性的因素有可理解性、可测试性、可修改性、可移植性,软件的维护工作包含改正性维护、适应性维护、完善性维护和预防性维护,本文将针对该系统的维护工作做详细说明。该项目总投入近450万,历时15个月,于2023年6月交付至今,不仅帮助运维人员高效、安全的管理云上应用和后端服务器资源,同时帮助开发和测试人员实现应用的快速迭代和测试,大大提升了团队之间的协作效率,消除了运维和开发之间的壁垒,得到了用户的一致好评。
正文:
随着云原生技术的发展,企业也逐渐引入相关技术,在基础设施层,越来越多的企业开始购买云上服务器,如应用服务器企业可选择阿里云的ECS服务器,数据库服务器企业可选择阿里云的RDS,DNS服务企业可选择阿里云的域名解析,云上资源购买十分方便,在页面中点击几下即可购买成功,但在实际工作中,不能随意购买,需要结合企业成本和服务器资源使用情况来综合考量,避免资源浪费,所以对云上资源的成本、资源使用情况的可视化管理就很重要。同时,随着容器技术和微服务架构的发展,企业应用也都选择微服务架构,采用容器的方式部署在kubernets集群中,在这种情况下,应用的快速发布、容器资源管理、监控告警就显得尤为重要。
为了实现云上资源的可视化管理和基于云原生应用的快速发布,我所在的公司决定开发一个“自动化运维”系统,我们称之为云平台,并在2022年3月正式启动该项目的建设工作,我被任命为系统架构设计师,负责系统架构设计工作。该项目总投入450万元人民币,建设周期从2022年3月至2023年6月截止,历时15个月。该系统主要包括应用中心、发布中心、监控中心、成本中心、容器中心、权限管理和变更管理七大模块,应用中心是整个系统的数据中心,其他模块的功能都围绕“应用”来进行资源的展示和操作;发布中心以“应用”为单位,向用户提供应用的快速发布功能;监控中心以“应用”为单位,向用户提供应用的监控告警功能;成本中心以“应用”为单位,向用户展示每个应用的成本;容器中心以“应用”为单位,展示应用的相关容器资源;权限管理是对用户分类,使得不同的用户可看到不同的模块;变更管理主要对云上资源的变更进行管控,避免对云上资源的误操作导致系统故障。
影响软件可维护性的因素有软件的可理解性、可修改性、可测试性、性能、可移植性,可理解性包含软件功能的可理解,即用户不需要查看很多文档,就能使用该系统;代码的可理解性,即开发人员可通过阅读代码,快速了解系统的业务逻辑,进行代码的开发;架构的可理解性,即开发人员能通过架构图,就能清楚的知道整个系统的数据流转和组件交互;接口文档的可理解性,即用户通过接口文档就能了解一个组件的调用方式,根据接口文档来获取满足自己需求的接口,进行功能的开发。可修改性指后期功能新增,软件开发人员能在短时间内完成新功能的开发,可修改性越好,开发人员越能以最快的速度、最少的变更进行新功能的开发;可测试性指一个软件系统开发完成后,要能以最快的速度对软件系统的功能、性能进行验证;性能是指一个系统性能越好,能支持的用户量越大,处理速度就越快,用户体验越好;可移植性是指系统从一个环境能够快速的移植到另一个环境中运行,不会因为环境的改变导致系统运行异常,可移植性越好,当一个环境出现问题时,就能快速迁移到另一个环境中。
软件的维护工作包含正确性维护、适应性维护、完善性维护和预防性维护,下面将从这四方面介绍该系统的维护过程。
正确性维护是指系统出现bug时,对该系统异常功能的修复工作。在正确性维护过程中,可通过bug数量来度量我们平台的可维护性。例如,系统交付给用户之后,在应用中心模块中,有应用搜索功能,用户可在页面中搜索应用的名称、环境、集群、负责人、部门、实例IP等相关信息,但是有用户在进行应用名称搜索时,发现有的应用搜索不到,经过研发人员仔细检查,发现当一个应用没有进行发布时,该应用没有容器实例,这时就不会将该应用的相关信息存储到搜索引擎数据库中,用户就搜索不到相关信息,开发人员进行代码修复后,即使应用没有发布,也能搜到相关信息了。
适应性维护是指外部环境变化时,系统能在新环境中正常运行需要做的更改,在适应性维护过程中,可通过从旧的环境移植到新环境的速度来进行度量平台的可维护性。例如,我们系统的服务是全部运行在 kubernets集群中的,kubernets集群版本变更很快,基本是每四个月一个版本,那么我们每一年会进行一次集群的版本升级工作,在版本升级过程中,需要确保我们系统在新环境中也能稳定运行。
完善性维护是指用户新需求的提出,系统能进行功能完善,支持用户最新需求,可通过新功能开发的速度来度量平台的可维护性。例如在成本中心,最初用户需求是统计所有云厂商中每种产品的每月成本、每年成本,后来随着企业降本增效的提出,公司管理层对基础设施的成本越来越关注,希望查看每个应用、每个部门每月成本和每年成本,及基础设施资源是否存在浪费,针对新的需求,我们新增应用、部门成本数据模型,展示更详细的成本信息。
预防性维护是指对系统可能出现的异常做一些应对措施,当系统出现故障时,能快速进行系统恢复,可通过MTTR系统修复时间来进行度量,如为了避免mysql宕机导致数据丢失,一方面采用mysql主从架构,当主库宕机时,从库提供服务,另一方面为了保证数据的准确性,我们会每天进行数据增量备份,每周进行一次数据全量备份,备份的数据还会存在单独的服务器中,确保数据不丢失。
经过近15个月的项目开发,“自动化运维系统”顺利投入使用,开发人员和测试人员可通过该系统实现应用发布的自动化,无需运维人员的协助,消除了运维和开发的固有壁垒;运维人员可通过该系统高效管理云上资源,实时查看云上资源的使用率和成本,减少资源浪费,提高资源使用率。当然,在本项目中还有一些不足之处,在进行云上资源成本统计时,最初我们通过阿里云的费用接口来拉取各个产品的成本,由于产品很多,写了很多逻辑,后来通过和阿里云的技术人员沟通,可以在阿里云平台上将所有产品的费用一键转储到oss中,直接通过oss的sdk即可快速查询所有产品的费用,后来我们开发人员快速修改下成本获取的逻辑,并没有对项目产生什么影响。由于架构合理且考虑周全,进展顺利,得到了公司技术人员的认可,大大提高了技术团队的协作效率。