软件架构该如何测试?

2024-03-16   出处: Medium  作/译者:Dr Milan Milanović/暖阳

开发组织常常面临的一个标准问题是,代码实现往往需要与原始设计和架构更加一致。这个问题很常见,尤其是在大型项目中。

软件架构对于代码库的可理解性、可变性和遵循软件质量目标至关重要。就代码库而言,有三个重要的软件架构目标:可维护性、可替代性、可扩展性

要使软件系统保持良好的状态,就必须确保它是模块化的,相互依赖关系尽可能小且正确,从而实现高内聚和低耦合。这些目标可以通过引入特定的模式和代码约定来实现,并且整个团队成员都愿意去遵守。

我们可以使用适应度函数来实现我们的架构目标。Neal Ford、Rebecca Parsons和Patrick Kua在《演进式架构》一书中提出了这种方法。通过适应度函数,我们可以编写测试来衡量系统与架构目标(如安全性、弹性或稳定性等属性)之间的一致性,类似于测试驱动开发的方式。这些函数应该在测试框架中编写,并接入适当的CI/CD流程。

在《演进式架构》中,架构适应度函数定义为:

对某些架构特征或架构特征组合,进行客观完整性评估的任何机制。

一个这样的函数的例子可以在Web应用程序的上下文中找到,其中我们的一个架构目标是我们的应用程序应该在200毫秒内响应用户请求(延迟和性能)。在这里,我们测量API端点的响应时间。如果我们想要自动化它,我们可以将这个函数放入您的CI/CD流程中,以便在每次推送新代码时自动运行。

此类功能的一个示例如下:在 Web 应用程序中,我们的架构目标之一是程序应在 200 毫秒内响应用户请求(考虑延迟和性能)。在这里,我们测量的是API 端点的响应时间。如果我们想自动化它,我们可以将此函数放入 CI/CD 流程中,以便在每次推送新代码时自动运行。

C# 的架构适应度函数示例

此外,一些工具还可以测试代码实现是否与定义的架构一致。ArchUnit是一个小型、简单、可扩展的开源Java测试库,用于验证预定义的应用程序架构特性和架构约束。同时,NetArchTest是一个针对.NET 标准的流畅API,可以在单元测试中强制执行架构规则。

下面是 NetArchTest 中的一个示例,说明我们如何执行分层架构和一些特定规则。您可以分别测试这些规则并断言结果(使用 Assert.True​)。

使用 NetArchTest 强制执行架构规则


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
180° /1800 人阅读/0 条评论 发表评论

登录 后发表评论