0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在重构或重新设计时验证你的代码

星星科技指导员 来源:嵌入式计算设计 作者:Pierre-Henri Stanek 2022-06-30 14:52 次阅读

一切都是为了改变。

“当源代码被修改时,我有哪些选择来维护我现有的测试?” 这是我在与客户交谈时遇到的一个非常常见的问题。

我的一些对话者指出他们必须重构他们的软件,其他一些人会谈论重新设计的努力。

首先,我注意到这两个与软件更改相关的概念在人们的头脑中并不总是很清楚,有时会在错误的环境中使用。这些概念对您来说可能非常清楚,但如果不是,这里有一些提示可以帮助您理解差异。

重新设计和重构软件有什么区别?

这些概念之间的主要区别在于:重新设计意味着您修改软件以改变它的功能,而重构则是努力修改它的工作方式。

出于多种原因进行重新设计工作。例如,由于硬件更改,软件需要在不同的 CPU 上运行或必须处理新的外围设备,因此需要修改或扩展代码以解决这些物理修改并提供新功能。当软件需要与新的或更新的 3 rd方库交互时,也可能发生重新设计,这些库提供了有益于您的应用程序的新服务。您可能会找到许多其他重新设计的原因,但在大多数情况下,在此上下文中执行的软件更改会影响一般行为或修改后的应用程序提供的功能。

与重新设计相反,重构是努力优化代码的内部实现,以提高其可维护性并降低其总体运营成本。和许多人一样,我相信 Martin Fowler 在他的“重构书”中写了软件重构的最佳定义之一:

“对软件的内部结构进行了更改,使其更易于理解且修改成本更低,而不会改变其可观察到的行为。”

鉴于此定义,重构通常由开发人员在以下情况下执行:

需要将技术债务控制在可容忍的水平,即低于从头开始重新构建整个代码看起来更经济的线以下。

降低复杂性和内部依赖,使软件更模块化、更容易扩展、对开发团队中的新人更易读和更易管理等。

确保随着时间的推移,原始设计保持可理解和清晰,并保留其预期功能。..。..

鉴于我们现在对重新设计与重构工作有了更清晰的了解,

哪些情况需要重新验证您的软件?

好吧,软件测试的本质是它们主要检查代码是否符合其目的。换句话说,他们根据应用程序的功能需求验证组成系统的每个软件单元的行为是否符合预期。话虽如此,如果您尝试重新设计代码,则必须对其进行测试以确保新功能已根据新引入的要求进行验证,同时确保这些新扩展不会在您现有的通过测试中引入回归。

您可能会争辩说,重构工作只会影响软件内部结构,因此不一定会影响代码接口和根据应用程序需求交付的一般服务。是的,但是…… 像任何其他开发活动一样,重构是引入新错误的一种非常简单的方法,因此您必须重新测试您的软件。维护一组完整且详尽的通过测试将确保您的重构不会导致代码中的回归错误未被检测到。确实,每当您进行小的更改时,您都应该重新执行现有的测试作为安全网,以检查您没有修改预期的行为。经过一系列增量更改后,您将以安全的方式达到最初目标的重构状态。

大多数组织希望通过在源代码更改时更新这些测试来保留先前测试投资的价值。但这会导致高昂的测试维护成本。该解决方案并不像仅仅识别受代码更改影响的受影响测试的子集以重新运行(有时称为测试影响分析或基于更改的测试)那么简单。测试维护的昂贵部分是开发人员花费在识别依赖关系和更新相应测试以确保它们与修改后的软件同步的工作。

那么适当的测试自动化如何降低这些测试维护成本呢?

1) 通过 对代码变更和测试依赖的初步分析:

· 了解正在测试的代码的更改(通过保留上次测试时的代码信息并将其与更改的代码进行比较)

· 识别哪些测试受到代码更改的影响

· 在单个视图中识别影响测试的所有代码更改

· 识别可能影响现有测试实现的代码覆盖率的代码更改

2) 通过为开发人员提供自动测试更新的指导选择,以便重新同步源代码和测试:

• 对于每个代码更改,建议对测试脚本和用例进行适当的更新

• 自动重构测试脚本以节省时间和成本

3) 对于主要影响软件内部结构的代码更改,自动生成安全网或通过测试的基线,以便:

• 在回归测试或持续集成期间查明故障

• 识别可测试性问题,例如无法访问的代码

作为专业的软件供应商,QA Systems 敏锐地意识到在软件修改的情况下控制测试维护成本的重要性。为了解决这个问题,我们开发了作为我们的测试解决方案 Cantata的一部分,一个代码更改分析和管理功能以及一个AutoTest生成框架,它们是在您的软件项目的整个生命周期中自动化单元和集成测试维护的独特技术。当您需要管理测试时,重新设计或重构您的软件不再是(烦人的)问题!

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10338

    浏览量

    206235
  • 源代码
    +关注

    关注

    94

    文章

    2923

    浏览量

    65984
收藏 人收藏

    评论

    相关推荐

    adas1000 CALxx寄存器未见到工厂设置的默认值,需要自己重新设置吗?

    CALxx寄存器未见到工厂设置的默认值,需要自己重新设置吗? 校准值如何能准确得到呢,谢谢
    发表于 12-11 07:37

    LabVIEW不同操作系统上使VI、可执行文件安装程序

    时,LabVIEW检测到VI来自另一个平台,并重新编译以正确运行。 然而,如果VI包含特定于平台的功能,例如.NETActiveX,不能在不同平台之间移动它。有关阻止
    发表于 12-02 21:47

    fpga是什么?看完就明白了

    描述语言(如Verilog、VHDL)编写逻辑代码,并通过专门的开发工具将代码下载到FPGA芯片中,从而实现对其功能的定制。 三:FPGA的应用领域 由于其灵活性和可重构性,FPGA
    发表于 11-13 15:43

    脉冲定时器时间未到而在此触发IN端则会重新计时是否正确?为什么?

    脉冲定时器时间未到而在此触发IN端则会重新计时是否正确?为什么? 脉冲定时器是一种广泛应用于电子领域的计时装置,其主要通过对输入信号或时钟信号进行计数来控制输出脉冲的时间。由此可知,在脉冲定时器
    的头像 发表于 10-24 11:49 332次阅读

    如何使用NUC1262 CRC对代码完整性进行验证

    : NuMaker-NUC1262SE V1.0 本示例代码使用 NUC1262 CRC 对代码完整性进行自我验证。 确保执行守则的完整性是终端产品应具备的安全条件之一,可避免产品执行期间
    发表于 08-29 06:49

    代码重构的经验总结

    具体的重构手段可参考《代码大全2》或《重构:改善既有代码的设计》,本文不再班门弄斧,而侧重重构时一些粗浅的“方法论”,旨在提高
    的头像 发表于 08-23 10:10 294次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>重构</b>的经验总结

    SUSE对Red Hat最近限制其源代码的行动发表声明

    情况变得更糟的是,红帽试图为他们的决定辩护时,将重新编译他们的源代码的人标记为“吃白食者”、“重构者”和“业余爱好者”,甚至声称“仅仅重新构建代码
    的头像 发表于 07-04 11:42 267次阅读
    SUSE对Red Hat最近限制其源<b class='flag-5'>代码</b>的行动发表声明

    【机器视觉】欢创播报 | 三星或将重新设计Galaxy XR

    1 三星或将重新设计Galaxy XR 早前三星已经证实将于谷歌合作开发新的XR设备,但随着Meta Quest 3和苹果的Vision Pro陆续发布,三星带感受到了来自友商的压力。   一直以来
    的头像 发表于 06-15 11:48 613次阅读

    如何重新设计基于RTD的温度传感器?

    本文介绍如何快速重新设计电阻温度检测器(RTD)工业温度传感器,以更小尺寸、支持灵活通信和远程配置的产品,满足智能工厂对温度测量器件的需求。使用高度集成的模拟前端(AFE)和IO-Link收发器可以实现上述目标。
    的头像 发表于 06-14 12:28 398次阅读
    如何<b class='flag-5'>重新设</b>计基于RTD的温度传感器?

    重新设计基于RTD的温度传感器,以适应智能工厂时代

    本文介绍如何快速重新设计电阻温度检测器(RTD)工业温度传感器,以更小尺寸、支持灵活通信和远程配置的产品,满足智能工厂对温度测量器件的需求。使用高度集成的模拟前端(AFE)和IO-Link®收发器可以实现上述目标。
    的头像 发表于 06-12 15:49 427次阅读
    <b class='flag-5'>重新设</b>计基于RTD的温度传感器,以适应智能工厂时代

    能用任何测试代码其他步骤来帮助我测试我的应用程序软件吗?

    我想通过重现导致 PLL 锁定重置的场景来测试我的代码。 我不确定如何重现 PLL 锁定重置。 能用任何测试代码其他步骤来帮助我测试我的应用程序软件吗?
    发表于 05-18 08:08

    基于51单片机的分钟倒计时代码

    基于51单片机的一分钟倒计时例程源代码
    发表于 05-12 16:30 16次下载

    基于AT89C51单片机100000秒以内的计时仿真及代码

    基于AT89C51单片机100000秒以内的计时仿真及代码
    发表于 05-04 17:44 4次下载

    如何借助GPT-4评审、重构代码

    重构代码之所以重要,有以下几个原因:它增强了可读性和可维护性,使开发人员更容易理解和修改代码。它还有助于防止潜在的错误,并确保您的代码遵循已建立的最佳实践。最终,
    的头像 发表于 03-31 09:27 2159次阅读

    剖析Android项目组件化重构架构

    重构前的代码业务封装在宿主app中,业务耦合严重,如果修改一个业务模块,需要对整个app进行完整测试,测试工作量巨大 而**重构后,我们只需要对单一app进行独立调试即可
    的头像 发表于 03-30 10:41 678次阅读
    剖析Android项目组件化<b class='flag-5'>重构</b>架构