「规模化敏捷」SAFe:内置的质量

2019-09-04 14:48:52 浏览数 (1)

检验不能提高质量,也不能保证质量。检查太迟了。产品的质量,无论好坏,都已经存在。产品或服务的质量不能检验;它必须融入其中。” - w。爱德华兹•戴明

内置的质量

内置的质量实践确保每个解决方案元素在每个增量中都符合整个开发过程中的适当质量标准。

企业能否以最短的可持续交付时间交付新功能,并适应快速变化的业务环境,取决于解决方案的质量。因此,内置的质量是安全的核心价值之一,也是敏捷宣言“持续关注技术卓越性和良好的设计增强敏捷性”的原则之一,这一点也不奇怪。内置的质量也是精益敏捷思维的核心原则,有助于避免与召回、返工和修复缺陷相关的延迟成本(CoDs)。外管局的内在品质理念,运用系统思维,优化整个系统,确保整个价值流的快速流动,让品质成为每个人的工作。

软件和硬件共享内置质量的目标和原则。然而,硬件的工作物理和经济学有些不同。本文将讨论这两个问题。

细节

企业必须不断地对市场变化作出反应。建立在稳定技术基础上的软件和系统更容易更改和适应。对于大型解决方案,这甚至更为关键,因为即使是小缺陷和错误假设的累积效应也可能产生不可接受的结果。

构建高质量的系统是一项严肃的工作,需要持续的培训和承诺,但业务利益需要投资:

  • 更高的客户满意度
  • 提高了速度和交付的可预测性
  • 更好的系统性能
  • 改进了创新、扩展和满足法规遵循需求的能力

图1说明了内置质量的五个维度。首先,流说明了一个事实,即内置质量是实现连续值流状态的必要条件。另外四个描述了应用于系统本身的质量。下面将讨论每个维度。

图1所示。内置质量的五个维度

通过连续的输送管道和测试优先来实现流程

内置的质量使安全的连续输送管道和能力释放的需求。图2演示了SAFe的DevOps雷达的持续集成部分,并展示了如何在进入生产之前跨多个环境测试内建组件的更改。通过用更快的代理(如内存中的数据库代理)替换慢速或昂贵的组件(如企业数据库),“测试加倍”速度测试。

图2。连续的输送管道确保了产品出厂前的质量

为了支持管道的测试需求,组织必须在开发周期的早期将测试左移。作为规范的一部分,每个系统行为—故事、特性、功能、非功能需求(NFR)—都包括自动化测试。这种测试优先的方法允许团队尽早并持续地应用质量实践,以及为管道创建一组丰富的测试。

本文的其余部分将讨论内置质量体系结构和设计、代码、系统和发布的其他四个维度。

实现架构和设计质量

内置质量从体系结构和设计开始,这最终决定了系统能够多好地支持当前和未来的业务需求。体系结构和设计中的质量使未来的需求更容易实现,系统更容易测试,并有助于满足NFRs。

支持未来的业务需求

随着需求基于市场变化、开发发现和其他原因的发展,架构和设计也必须发展。传统过程迫使早期的决策常常导致两个糟糕的选择,要么重新工作以更改决策,要么忍受次优决策的低效。确定最佳决策需要通过实验、建模、仿真、原型化和其他学习活动获得知识。它还需要一种基于集的设计方法来评估多个备选方案,以获得最佳决策。一旦确定了,开发人员就使用架构跑道来实现最终的决策。敏捷架构为团队间的设计和实现同步提供了有意的指导。

几个设计特性是良好质量的预测器,确保工件是可理解和可维护的,包括高内聚和低耦合、良好的抽象和封装、可读性和关注点分离。坚实的[2]原则创造了这些特点的设计。

架构和设计以简化测试

体系结构和设计也决定了系统的可测试性。通过定义良好的接口进行通信的模块组件包含seam[3],它允许测试人员和开发人员用测试替身替换昂贵或缓慢的组件。例如,图3显示了一个速度控制器组件,需要从GPS位置组件获得当前车辆位置来调整其速度。测试带有GPS定位的速度控制器需要相关的GPS硬件和信号发生器来复制GPS卫星。将这种复杂性替换为测试加倍,可以减少开发和测试速度控制器或任何与GPS定位接口的其他组件的时间和精力。

图3。模块组件创建接缝以简化测试

将设计质量应用于网络物理系统

这些设计原则也适用于网络物理系统。许多学科的工程师使用建模和仿真来获得设计知识。例如,集成电路(IC)设计技术(VHDL, Verilog)是类似软件的,并且从这些设计特性和坚实的原理[4]中共享相同的好处。硬件设计还应用了通过模拟和模型进行测试的概念,或者在切割金属之前提供木材原型。

这通常需要改变心态。和软件一样,硬件也会发生变化。通过构建质量来规划未来的变化,而不是根据当前的需求进行优化来完成设计,从而提供更好的长期结果。

实现代码质量

所有系统功能最终都由系统的代码(或组件)执行。添加新功能的速度和容易程度取决于开发人员修改新功能的速度和可靠程度。受极限编程(XP)[5]的启发,这里列出了一些实践。

单元测试和测试驱动开发

单元测试实践将代码分解为多个部分,并确保每个部分都有自动化测试来执行它。这些测试在每次更改后自动运行,允许开发人员快速地进行更改,并确信修改不会破坏系统的其他部分。测试还充当文档,并且是与组件接口交互的可执行示例,以显示应该如何使用该组件。

测试驱动开发(TDD)通过在创建变更之前指定变更的测试来指导单元测试的创建。这迫使开发人员更广泛地考虑问题,包括实现之前的边界用例和边界条件。更好的理解导致更快的开发,更少的错误和更少的返工。

结伴工作

结对让两个开发人员在同一工作站上进行相同的更改。一个充当编写代码的驱动程序,另一个充当提供实时评审和反馈的导航器。开发人员频繁地转换角色。结对创建并维护质量,因为代码将包含来自每个成员的共享知识、观点和最佳实践。当队友们互相学习时,它也能提高和扩大整个团队的技能。

集体所有权和编码标准

集体所有权减少了团队之间的依赖关系,并确保任何一个开发人员或团队都不会阻碍快速的价值交付流。作为更改的一部分,“任何开发人员都可以更改任何代码行来添加功能、修复bug、改进设计或重构。因为代码不是由一个团队或个人拥有的,所以支持编码标准可以促进一致性,这样每个人都可以理解并维护每个组件的质量。

在网络物理系统中应用代码质量

虽然并非所有硬件设计都有“代码”,但物理构件的创建是一个协作过程,可以从这些实践中获益。用于硬件开发的计算机辅助设计(CAD)工具以断言的形式为电子设计提供“单元测试”,然后在机械设计中进行模拟和分析。切分、集体所有权和编码标准可以产生类似的好处,从而创建更容易维护和修改的设计。

一些硬件设计技术非常类似于代码(例如VHDL),具有明确定义的输入和输出,非常适合TDD[4]之类的实践。

实现系统质量

虽然代码和设计质量确保可以轻松理解和更改系统构件,但是系统质量确认系统按预期工作,并且每个人都对要做的更改保持一致。下面重点介绍实现系统质量的技巧。

创建对齐以实现快速流

对齐和共享理解减少了开发人员的延迟和返工,从而支持快速流。行为驱动开发(BDD)定义了一种协作实践,在这种实践中,产品所有者和开发团队就故事或特性的精确行为达成一致。应用BDD可以帮助开发人员在第一时间构建正确的行为,并减少返工和错误。基于模型的系统工程(MBSE)将这种对齐扩展到整个系统。通过一个分析和综合过程,MBSE提供了一个高层次的、完整的视图,展示了系统的所有建议功能,以及系统设计如何实现这些功能。

持续集成端到端解决方案

如图2所示,持续集成(CI)和持续部署(CD)为开发人员提供了对更改的快速反馈。每个变更都是快速构建的,然后在多个级别进行集成和测试,包括在部署环境中。CI/CD自动将更改移动到各个阶段,并在测试失败时做出响应。NFRs的质量测试也是自动化的。当CI/CD努力使所有测试自动化时,一些功能性(探索性)和NFR(可用性)测试只能手工执行。

将系统质量应用于网络物理系统

网络物理系统还可以支持快速流、CI/CD方法——即使物理部件的交付时间很长。如前所述,仿真、模型、以前的硬件版本和其他代理可以替代最终的系统组件。图4展示了一个系统团队,该团队提供了一个可演示的平台,通过连接这些组件代理来测试增量行为。随着每个组件的成熟(通过增加红色来显示),端到端集成平台也会成熟。使用这种方法,组件团队将负责支持其最终解决方案的一部分,以及成熟的增量端到端测试平台。

图4。网络物理系统的持续集成(CI)

实现发布质量

发布允许业务度量特性的效益假设的有效性。一个组织发布得越快,它学习得就越快,提供的价值也就越多。定义组件间标准接口的模块化体系结构允许独立地发布较小的组件级更改。较小的更改允许更快、更频繁、风险更小的版本,但是需要一个自动化的管道(如图2所示)来确保质量。

与传统的服务器基础设施不同,“不可变的基础设施”不允许手动或直接对生产服务器进行更改。相反,更改应用于服务器映像,经过验证,然后启动,以替换当前运行的服务器。这种方法创建了更一致、更可预测的版本。它还允许自动恢复。如果操作环境检测到一个生产错误,它可以通过简单地启动前一个映像来替换错误的映像来回滚发布。

支持合规

对于必须为遵从性或审计证明客观证据的系统,发布还有其他条件。这些组织必须证明该系统符合其预期目的,并且没有意外的、有害的后果。如法规遵循文章所述,精益质量管理系统(QMS)定义了经过批准的实践、策略和过程,这些实践、策略和过程支持精益敏捷的、基于流程的、持续的集成部署发布过程。

完成的可伸缩定义

“已完成”的定义是保证增值能够被认为是完整的重要方法。增量系统功能的持续开发需要对已完成的工作进行缩放定义,以确保在正确的时间完成正确的工作,有些是早期的,有些只是为了发布。表1显示了一个示例,但是每个团队、培训和企业都应该构建自己的定义。虽然对于每个艺术或团队来说这些可能是不同的,但它们通常共享一组核心项目。

表1。示例安全可伸缩的完成定义

在网络物理系统中实现发布质量

对于发布质量的看法是不要让变更闲置,等待集成。相反,要快速且频繁地通过系统的较大部分集成更改,直到更改到达验证环境为止。一些网络物理系统可以在客户环境中验证(例如,车辆的空中更新)。其他人使用一个或多个模型代理该环境,这些模型努力获得早期反馈,如图4所示。端到端平台会随着时间的推移而成熟,提供更高的保真度,从而支持更早的验证和验证(V&V)以及遵从性工作。对于许多系统,早期的V&V和遵从性反馈对于理解发布能力是至关重要的。

了解更多

  • 敏捷软件开发的[1]宣言。www.AgileManifesto.org。
  • [2] Robert Martin,《OOD的原则》,http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
  • Michael, [3] Feathers,《使用遗留代码进行有效测试》,Prentice Hall, 2005。
  • 《VHDL的有效编码原理与最佳实践》,麻省理工学院出版社,2016年。
  • 《极限编程解释:拥抱变化》,Addison-Wesley, 1999。
  • [6]www.extremeprogramming.org/rules/collective.html

原文:https://www.scaledagileframework.com/built-in-quality/

本文:https://pub.intelligentx.net/safe-built-quality

讨论:请加入知识星球或者小红圈【首席架构师圈】

0 人点赞