上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.2.1 按范围分类:原子与整体
原子适应度函数针对单一上下文执行,用以校验架构的单一维度。一个很好的原子适应度函数的例子就是验证一些架构特征的单元测试,例如模块耦合度(我们会在第4章详细介绍这类适应度函数的例子)。因此,一些应用层测试可以纳入适应度函数的范畴,但不是所有单元测试都能作为适应度函数——只有那些验证架构特征的才是。图2-3就展示了一个原子适应度函数:它只检查组件间是否存在循环。
对于某些架构特征,开发人员不能只孤立地测试单一架构维度。整体适应度函数可以在运行在共享上下文中,综合校验多个架构维度。开发人员设计整体适应度函数来确保在原子级可以正常工作的特性在真实世界的组合中仍然能够正常工作。例如,试想架构中同时包含安全和可伸缩性的适应度函数。安全适应度函数检查的关键项目之一是数据是否过期,可伸缩性测试检查的关键项目之一是一定延迟范围内的并发用户数量。开发人员应用了缓存技术以满足可伸缩性需求,从而通过可伸缩性的原子适应度函数检查。而在缓存关闭的情况下,安全适应度函数也可以通过。然而,当整体运行时,缓存开启使过期数据无法通过安全适应度函数的检查,整体测试失败。
显然,我们无法去测试架构特征的所有组合,所以架构师需要有选择地使用整体适应度函数来测试那些重要的组合。通过选择和优先级排序,架构师和开发人员会去评估实现某个特定测试场景的复杂性,从而帮助评估某个架构特征的重要性。通常,架构关注点之间的相互作用决定了架构的质量,整体健适应度函数解决了这一问题。