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

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

3天内不再提示

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

星星科技指导员 来源:嵌入式计算设计 作者:Pierre-Henri Stanek 2022-11-25 15:17 次阅读

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

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

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

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

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

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

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

需要将技术债务控制在可接受的水平,即低于从头开始重建整个代码似乎更经济的线。

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

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

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

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

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

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

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

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

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

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

·确定哪些测试受代码更改的影响

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

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

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

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

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

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

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

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

审核编辑:郭婷

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

    关注

    68

    文章

    10732

    浏览量

    209740
  • 代码
    +关注

    关注

    30

    文章

    4678

    浏览量

    67842
收藏 人收藏

    评论

    相关推荐

    中继器如何重新设

    中继器(Repeater)是一种网络设备,用于扩展无线信号覆盖范围,增强无线网络的信号强度。无线网络中,中继器可以帮助解决信号衰减问题,提高网络的稳定性和覆盖范围。重新设置中继器通常涉及到以下几个
    的头像 发表于 09-05 09:33 377次阅读

    重构:改善既有代码的设计」实战篇

    背景 软件开发的世界里,代码重构是提升项目质量、适应业务变化的关键步骤。最近,我重新翻阅了《重构:改善既有
    的头像 发表于 08-14 10:42 141次阅读
    「<b class='flag-5'>重构</b>:改善既有<b class='flag-5'>代码</b>的设计」实战篇

    FPGA和ASIC有什么不同之处

    FPGA是“可重构逻辑”器件。先制造的芯片,再次设计时重新配置”。
    的头像 发表于 07-24 09:32 735次阅读
    FPGA和ASIC有什么不同之处

    spi_flash期间的计时器中断导致崩溃怎么解决?

    : spi_flash_erase_sector(...); spi_flash_write(...); 如果在闪存访问期间发生计时器中断,ESP 似乎会崩溃并重新启动。 当然,这可以通过访问 Flash 时禁用中断来
    发表于 07-12 11:54

    ESP8266随机崩溃,不会自行启动重新启动怎么处理?

    看门狗软件看门狗的帮助下崩溃,它也应该再次重新启动并正常工作。为什么它期待硬重启。 您能否建议问题的根本原因。模块遇到这种情况的可能性有多大,为什么看门狗计时器无法帮助模块启动和运行,以及模块在运行时环境中期望硬重启的可能性
    发表于 07-11 07:41

    每次调用espconn_send之前,重新设置远程IP和端口的目的是什么?

    每次调用 espconn_send() 之前,应重新设置远程 ip 和远程端口的目的是什么? 如果我们只将它用于一对一的重复 UDP 通信,它仍然是必须的吗? 首先,我们通过打印调试发现,如果
    发表于 07-11 07:25

    TLE986x如何定期重新启动计时器?

    模式 0-13 位定时器模式下运行 T3。 达到溢出时,计时器停止。 请问如何定期重新启动计时器?
    发表于 07-03 07:13

    该如何提高代码容错率、降低代码耦合度?

    处理用户输入外部数据时,进行严格的输入验证和数据校验是确保系统安全和稳定的重要步骤。硬件和软件的故障隔离:硬件和软件设计中,采取故障隔离的措施可以减少故障传
    的头像 发表于 06-26 08:10 423次阅读
    该如何提高<b class='flag-5'>代码</b>容错率、降低<b class='flag-5'>代码</b>耦合度?

    FPGA的sata接口设计时需要注意哪些问题

    FPGA的SATA接口设计时,需要注意以下几个方面的问题,以确保设计的稳定性和性能: 接口版本和速度 : SATA有三代标准,分别为SATA I(1.5 Gb/s)、SATA II(3.0 Gb
    发表于 05-27 16:20

    计时器触发的中断中使用了HAL_I2C_Mem_Read函数(I2C数据读取)导致代码卡死怎么解决?

    计时器触发的中断中使用了HAL_I2C_Mem_Read函数(I2C数据读取)导致代码卡死,这有什么解决办法吗?十分感谢,个人猜测是中断优先级问题,但是不知如何设置 以下是计时器相关
    发表于 05-20 07:34

    fpga验证和uvm验证的区别

    FPGA验证和UVM验证芯片设计和验证过程中都扮演着重要的角色,但它们之间存在明显的区别。
    的头像 发表于 03-15 15:00 1180次阅读

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

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

    python如果不符合条件重新输入怎么办

    。下面将详细介绍 Python 中如何实现这一功能。 首先,我们需要定义一个函数来验证用户的输入是否符合预期的条件。例如,我们可以编写一个函数来验证用户输入的是否为一个整数。函数的代码
    的头像 发表于 11-29 16:56 1456次阅读

    使用VectorCAST MATLAB Toolbox获取代码覆盖度的基本步骤

    程序与硬件的交互。SILPIL验证的过程中,可以使用VectorCAST MATLAB Toolbox来捕获代码的覆盖数据,从代码覆盖的
    的头像 发表于 10-26 11:06 918次阅读
    使用VectorCAST MATLAB Toolbox获取<b class='flag-5'>代码</b>覆盖度的基本步骤

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

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