写点什么

想要确保架构目标达成?适合度函数了解一下

  • 2019-02-21
  • 本文字数:1659 字

    阅读完需:约 5 分钟

想要确保架构目标达成?适合度函数了解一下

Paula Paul 和 Rosemary Wang 撰写的一篇博文中介绍了适应度函数(fitness function)的基本概念、入门方法,并给出了如何验证各种架构质量的一些实例。文中提出,适应度函数驱动开发的方法可用于编写测定系统符合架构目标的测试,这类似于使用测试驱动开发(TDO)的方法验证功能是否符合所需的业务输出。


Paul 和 Wang 均供职于Thoughtworks。文中强调指出,架构标准完全独立于功能需求,它是随着目标和限制条件的更改而持续演进的。作者们引用了《构建演进架构》(“Building Evolutionary Architecture”)一书中的说法:


从多个维度上看,演进架构的首要原则是支持受控的增量更改。


Paul 和 Wang 认为,对于支持这样的架构演进,适应度函数有助于自动确定系统在多大程度上符合特定的架构目标和限制条件。举个例子,打日志的方法通常是事后诸葛亮,并缺少一些重要的信息。如果引入适应度函数功能,可确保日志具有良好的结构化,并包含足够的有用信息。


对于使用适应度函数的时机,作者们给出的建议是首先收集所有利益相关者的意见,了解在他们看来最为重要的架构功能。之后对这些功能区分为通用主题组,比如弹性、安全性、可操作性和稳定性等。有时,在分组时会暴露出一些相互冲突的目标。例如,稳定性和敏捷性这二者的目标通常是截然相反的。稳定性是通过建立对更改的控制而实现的,而敏捷性是通过减少实现更改的障碍而实现的。为了解决目标冲突的问题,必须对各项功能的动机加以评估,对组织最为重要的功能应优先处理。


在描述所有适应度函数的意图时,应使用对团队和利益相关者有意义的客观度量。度量有助于团队测定技术债务,同时也避免架构偏移。所有的适应度函数都应在测试框架中制定,并添加到适当的交付流水线中。这样,所有新的软件都需要通过适应度函数的测试。Paul 和 Wang 将此视为持续集成的一种自然延伸。


文中给出了一个针对代码质量的适应度函数示例。该例测定了可修改性、可管理性和适应性,以防止将质量过低的代码部署到生产环境中。


describe "Code Quality" do    it "has test coverage above 90%" do        expect(quality.get_test_coverage()).to > .9    end    it "has maintainability rating of .1 or higher (B)" do        expect(quality.get_maintainability_rating()).to < .1    endend

复制代码


文中还给出了一个针对性能的示例。Paul 和 Wang 指出,由单独团队完成的常规做法会延迟交付时间,并且结果并非总是提供给开发人员的。而将自动化性能测试实现为适应度函数并添加到构建流水线中的做法,可以尽早地运行测试,并且也可以立即看到结果。


除了上述两个示例,作者们还在文中针对弹性、可观测性、符合度、安全和可操作性给出了示例。


Paul 和 Wang 最后强调,架构(例如业务功能)可通过适应度函数的方式在代码中予以表达。他们在文中提出,使用适应度函数具有三方面的优势:


  • 适应度函数客观地衡量了技术债务,并提高了代码的质量。一旦由于新的安全性或操作标准等原因而发生更改时,适应度函数还可提供实时反馈。

  • 适应度函数可提供编码选择的信息,包括与下游进程相关的接口、事件和 API 的选择。在应用“绞杀者模式”(strangler pattern)时,适应度函数可用于验证业务逻辑解耦过程是否满足要求。

  • 适应度函数支持以代码形式表达架构标准,从而有助于开发人员交付更加符合架构的功能。使用同一方式,用户可以请求更改功能,架构师可以请求更改某些架构问题,这些都可以在构建过程中加以验证。


在一篇博文中,Ben Morris 强调了使用适应度函数而非实际度量的重要性。在 Morris 看来,适应度函数为更具迭代性的架构提供了基础,并可引导持续演进的设计朝着理想的结果发展。


Vijini Mallawaarachchi 介绍了适应度函数的一般需求(https://towardsdatascience.com/how-to-define-a-fitness-function-in-a-genetic-algorithm-be572b9ea3b4),以及如何针对特定问题给出适应度函数。


Tim Sommer 撰文指出,适应度函数可用于为各种架构特性添加约束条件,进而引导架构的演进方向。


查看英文原文: Fitness Functions to Ensure Architectural Goals Are Met


2019-02-21 07:304005
用户头像

发布了 391 篇内容, 共 136.6 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

Nevercenter CameraBag Photo for Mac(照片滤镜软件) 2024.0.1永久激活版

mac

苹果mac Windows软件 照片滤镜软件 Nevercenter

外贸推广方式有哪些

九凌网络

罗拉ROLA告诉你Facebook广告账号被封怎么办?

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

开发电竞游戏直播平台,选择成品系统源码更明智

软件开发-梦幻运营部

OpenAI 曾收到 AI 重大突破警告;半独立的 OpenAI 比与微软合并更好丨 RTE 开发者日报 Vol.91

声网

一文详解Vue生命周期

EquatorCoco

Vue 生命周期

Rola详解国外住宅IP代理选择的8个方法,稳定的海外IP哪个靠谱?

Geek_bf375d

爬虫 代理IP 免费代理ip 跨境电商 IP 路由

软件测试/人工智能|如何使用ChatGPT帮我们写自动化测试脚本

霍格沃兹测试开发学社

每天5分钟复习OpenStack(十)Ceph 架构

快乐非自愿限量之名

云计算 架构 Ceph

以阿里云全球故障为例,聊聊如何保障 Auth 服务的 SLA

Authing

阿里云 身份认证 事件驱动 Idaas Authing

App 测试工具大全,收藏这篇就够了

优测云服务平台

直播预告丨大模型+Agents疏通京东金融运营堵点

京东科技开发者

人工智能 AI 大模型

软件测试/人工智能|如何使用ChatGPT编写符合PO模式的数据驱动测试框架

霍格沃兹测试开发学社

软件测试/人工智能|使用ChatGPT帮我们查找bug

霍格沃兹测试开发学社

item_search_coupon-优惠券查询API接口提供了哪些功能?

技术冰糖葫芦

API 文档

最新demo版 | 如何0-1开发支付宝小程序之小程序页面功能介绍(三)

盐焗代码虾

支付宝小程序 支付宝 小程序开发

WorkPlus实现完全私有化部署,企业数据安全有保障

WorkPlus

企业网站建设怎么做?

九凌网络

FACEBOOK有哪些错误养号行为?罗拉ROLA-IP为您详解

Geek_bf375d

代理IP 免费代理ip 跨境电商 爬虫软件 IP 路由

OmniOutliner 5 Pro for Mac激活版下载

iMac小白

《实现领域驱动设计》笔记——上下文映射图

快乐非自愿限量之名

架构 框架 领域驱动

人工智能应用:文本分类的技术突破与实战指导

不在线第一只蜗牛

人工智能 文本 技术 优化体系

「支持M1/M2」DBeaverUltimate数据库管理软件下载

iMac小白

软件开发王者搭配:80%低代码+20%高代码

互联网工科生

软件开发 低代码 JNPF 高代码

如何让你的网络推广实现最大性价比

九凌网络

海外代理IP测试|如何检测代理IP质量?罗拉ROLA详解方法与工具全干货!

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

【Spring Cloud实战】分布式系统控制与组件应用

快乐非自愿限量之名

分布式 服务器 组件 spring-cloud

爱莫科技国际前沿 AI 技术与应用闭门研讨会即将启幕

科技热闻

程序员进阶高管指南,看懂工资最少加5k

伤感汤姆布利柏

程序员 面试 前端 升职加薪

HDD城市站九城联动,超1500位HarmonyOS开发者积极参与

最新动态

工作流引擎的架构设计与对比

小狗围观科幻

想要确保架构目标达成?适合度函数了解一下_架构_Jan Stenberg_InfoQ精选文章