提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|使用教程|编辑:郑恭琳|2020-12-02 10:26:43.730|阅读 148 次
概述:
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
在处理遗留代码时,您需要一种可持续的方式来管理变更。使用遗留代码可能会成为敏捷和DevOps的障碍,但是您可以利用适当的技术来克服挑战。
许多人使用“遗留代码”一词来简单地指代旧代码。但是“旧”和“遗留”对不同的人意味着不同的事情。在这里,我将遗留代码的定义用作团队尚不了解的任何现有代码。
有关代码的知识可能不完整,原因有几个,例如:
无论如何,我们要明确一点:遗留代码是规则,而不是例外。当今世界上许多软件基础架构都在遗留代码上运行。问题是,当我们需要进行更改时,我们如何减轻与遗留代码相关的风险?在这篇文章中,我将为您提供一些解决方案,以有效地处理遗留代码。
遗留代码的问题不是它的年代久远,而是您不了解更改它如何影响现有功能。如果您要过渡到新的开发方法(例如敏捷或DevOps),则与遗留代码相关的知识鸿沟可能会成为障碍。
敏捷和DevOps已成为创建软件的主要方法,因为它们可以帮助团队在最小的可销售功能准备就绪后快速迭代和发布应用程序。短而频繁的开发周期是迭代开发方法的特点,但是这些方法没有余地。用于在处理遗留代码时减轻潜在问题的结果。尝试快速迭代您不了解的代码可能会引入新的问题。
现实情况是,在开始新项目时,这些技术更容易应用。对于已经存在了一段时间的项目,团队通常会使用涉及遗留代码的系统。开发人员可能不知道现有代码库如何工作,但仍必须修复缺陷或扩展功能而不会引入新问题。甚至表面上或看似很小的更改都可能对应用程序产生重大影响。
为什么技术债务很重要(或不重要)
软件开发游戏旨在不断地平衡软件质量、上市时间和开发成本。在大多数情况下,我们会根据市场情况进行权衡以实现业务目标。随着时间的流逝,我们积累了技术债务。
什么是技术债务?
技术债务是减轻与实施不完善解决方案有关的风险的成本,以实现您的上市时间或开发成本目标。(例如,放弃升级到库是因为这样做会延迟发布,这代表了技术上的债务,这是以后需要更新库的时间形式。)
在许多情况下,继承的遗留代码库负担沉重,因为它们具有可测试性差、覆盖率低、代码过于复杂等形式的技术债务。技术债务可能使较新的软件开发实践的应用不堪重负,因为团队始终面临着是否应对该债务的问题。
您应该担心技术债务吗?
确切地说,每个应用程序都有技术债务,许多组织可以投入大量资源来偿还它,而没有实现任何实质性利益。归根结底,决定投入资源以偿还技术债务的决定取决于您计划更改的应用程序部分。但是,除非您开始采取一些其他步骤,否则您将不会知道(我会暂时介绍)。
扩大对遗留代码的覆盖
当组织继承遗留代码库进行处理时,他们通常会采用覆盖策略,以帮助他们为新开发创建基准。遗留代码已经在现场并且可以正常工作,因此重点在于确保新代码的质量。为了遵守覆盖范围政策,许多组织通过任何必要的手段来提高对遗留代码的覆盖范围。低覆盖率会拖累整体指标,这使得难以准确衡量新开发项目的覆盖率。如果您知道您使用的是覆盖范围广的遗留代码,则总体项目指标可以表明新开发是否朝着正确的方向发展。
此策略的基本原理是合理的,但是问题是组织为了遵守其覆盖策略而盲目生成测试。结果,该项目中加载了无法维护的测试,这些测试提供了错误的软件质量意识。如果您不打算接触代码或不关心测试的可维护性或质量,则可以使用市场上可以帮助您实现此目标的几种测试生成工具之一。
创建有意义的、可维护的Java测试
需要明确的是,我不主张盲目生成测试。相反,请使用可帮助您快速创建有意义的测试以覆盖Java遗留代码的工具。Parasoft Jtest提供了一个点击界面,该界面为开发人员提供了基于现有代码的自动测试创建过程。由此产生的回归套件是有意义的、可维护的和可扩展的。
与其尝试在宏级别上工作,不如创建一个基线并将质量活动的范围缩小到受计划更改影响的代码区域。在进行了评估以评估代码的范围和状态之后,您应该创建捕获当前行为的测试,以便团队可以了解更改如何影响现有功能。
然后,您可以利用一系列技术,这些技术可以在重构遗留代码时帮助您收集分析数据,并确保您对代码更改的投资可以提高旧系统的安全性和可靠性。
1.定义您的范围。
了解更改如何影响系统行为需要至少一个数据点。首先选择基准构建,然后开始跟踪指标。设置范围并查看遗留代码的三个特征:
您有多少个违反静态分析的违规行为,严重程度如何?您需要了解代码中内置了多少潜在缺陷。
您目前的测试范围是什么?低覆盖率表示与变更相关的潜在风险。
需要多少清洁?诸如复杂性、注释等之类的其他指标可以提供有关软件质量状态的观点。
Parasoft提供了一个强大的分析平台,用于捕获、关联和报告违反代码分析的行为、测试结果、覆盖率分析以及其他软件质量数据。该平台不仅提供静态报告,还可以应用其他分析,以帮助您确定应用程序中受更改影响的部分。
利用资源组的概念,您可以标识一组特定的文件或目录、范围覆盖、静态分析违例以及针对这些特定资源的指标数据。此信息有助于您在代码的这些部分内进行更改之前为代码库的各个区域创建基线。
2.捕获行为。
有了初始数据点,下一步就是通过创建测试来开始捕获系统的当前行为。建立高质量的回归套件不仅可以捕获现有行为,而且还可以扩大覆盖范围,这是确保更改不会破坏功能的安全网。
Parasoft Jtest非常适合此任务,因为它使您能够基于现有代码批量创建JUnit测试的基线,包括断言。Jtest还具有创建测试的能力,该测试可以直接访问私有方法,以防最初没有考虑可测试性的情况下编写原始代码。
最好通过有意义的测试来扩大覆盖范围。在覆盖范围差距分析期间,Jtest可以识别现有的测试,可以对其进行克隆和变异,以达到未测试的代码部分。创建这些现有测试需要进行大量工作,Jtest中的克隆和变异功能可以提高测试创建投资的回报。
您应该争取尽可能高的覆盖率,但是在大多数情况下,在整个代码库上实现100%覆盖率是不切实际的。我们将讨论可以用作安全网的其他技术,以确保稍后再覆盖修改后的代码。
从功能的角度出发,当您拥有良好的覆盖范围时,就可以开始进行更改和修改测试。
3.改进隔离的旧代码。
捕获到系统的行为后,您可以开始修复违规,解决PR或应用要关注的更改,而将破坏现有功能的风险降至最低。Parasoft可以帮助您管理现有的技术债务,并将静态分析违规等数据放入适当的工作流中,在这些工作流中可以轻松地对其进行优先级排序、抑制或解决,以提高应用程序的整体质量。每次构建之间的更改也应作为正在进行的过程的一部分进行监控,以确保软件质量不会恶化。
解决遗留代码中的技术债务的最佳时间是在进行更改时。报告的数据应包括在有关项目的总体统计信息中。技术债务可能不会立即对应用程序产生影响,但是您应该应用最佳实践来系统地控制和管理它。在需要进行更改时,只要重构遗留代码,就可以逐步减少债务。
此过程有助于确保更改范围不会对现有功能造成负面影响,但您还需要确保团队遵循良好的做法,不断向前发展。继续保持较高的覆盖率并随着代码的发展编写或更新测试需要在文化层面上予以支持。这就是为什么我们采用的技术可以在修改后的代码(即新的或更改的代码)不符合覆盖政策时自动通知您。
通过分析指定基准构建之间的更改,您可以集中精力并监视整个代码库中的更改,以确保没有任何漏洞。在整个代码库中实现100%的覆盖率是不切实际的,但是通过监视修改后的代码的覆盖率,团队可以专注于正在积极研究的代码部分,并有信心测试所有更改。
总而言之,全球的软件都基于已在团队之间传递的代码运行。 处理遗留代码是日常工作。 随着开发人员对维护或扩展功能进行更改,有关代码知识的空白会带来潜在的风险,此处使用的流程和技术应有助于您信心满满地承担团队中几乎所有的代码库。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢