共计 4493 个字符,预计需要花费 12 分钟才能阅读完成。
测试是软件品质的根底,测试左移为利用准时上线的要害
在以往的日子,一个应用软件我的项目开发工作,相干人员无不将注意力放在领域、估算与我的项目周期三个面向。而「墨菲定律」却如影随形,一直发威;咱们总是无奈防止的如「人月神话」书中所形容的一样陷入困境。
通常,需要访谈消耗掉大量工夫,大大的压缩了开发所须要的工夫,即便零碎设计被分明的探讨与制订,开发者仍旧被我的项目周期压得喘不过气来,所以测试是最常被省略的局部;始终到利用要上生产环境时,才发现应用程序没有齐全实现原先设计指标,没方法满足客户要求,甚至源代码的编写或是应用的框架,都具备平安的危险,最初导致整个我的项目延期。
即使最终,零碎在趔趔趄趄的开发过程后上线,紧接的一连串 Bug 修改、性能减少与批改,都是是我的项目布局初期应该想到,却又没想到的局部。
一个零碎通过多年的应用与保护,历经多代轮替的开发者,早已偏离原来的设计;再加上没有良好的架构设计,也没有从我的项目开始时就纳入的测试,后续的开发者没有短缺的信念与多余的工夫进行重构,以至于整个零碎的保护工作日趋惨重,也让迭代速度一直降落,整个零碎也越加凌乱,与热力学的熵增定律:「每个零碎会从有序走向无序,日趋凌乱,且不可逆」,不约而同。
置信许多具备利用开发与运维实务教训的读者,每次在零碎上线时总是有种惶惶不安、风平浪静的刺激感。
Working Effectively with Legacy Code 的作者 Michael C. Feathers 在书中定义了遗留零碎即为没有测试笼罩 (爱护) 的零碎,也是有待改善的零碎,可见测试的重要性,却是传统利用开发所欠缺的局部。
前述的传统瀑布式项目管理形式,的确弊病丛生,因而麻利开发思维横空出世,提倡测试后行、增量开发与及早部署;这个概念扭转了这个世界开发软件的形式。
VMware Tanzu Labs(原 Pivotal Labs)的技术专家 Mark Parker,已经于 2016 年的 SpringOne 流动上,以“TDD: The Bad Parts”为题目的演讲中提出,如何让应用程序能够高效开发、继续且即时部署的要害,即为测试。
然而,当初多半开发在个阶段测试工作所破费的工夫与精力,通常如下图右边的倒三角形,单元测试破费很少工夫,零碎整合测试与验收测试则须要更多的工作量才可实现;其中起因不难理解,一旦零碎进入 SIT 或是 UAT 的测试阶段,其须要与其余零碎对接,所以在问题查找须要更多工夫,且性能修改过程中则须要请其余周边零碎与团队配合,才可能重新部署测试。
综合上述问题,反之,若将更多工夫与精力放在单元测试工作上,将会省去大量的 SIT 与 UAT 工作量。
而如果期待零碎能够快速反应需要变动,也心愿有正确高品质的源代码,一直地重构以便获得整洁的源代码,也透过测试驱动开发,让开发者与业务相干人员对于推出的利用与提供的服务更加有信念,都是必要的步骤与正向循环。
麻利开发的工程实际治理形式,推动测试左移,品质左移
咱们简略将利用程序开发到上线,简略划分成迭代开发与上线部署两个阶段。
在第一个开发阶段,是属于开发者所需关注的局部,除了实现客户要求的零碎规格、性能,若期许达到开发者能够达到麻利团队的要求,则乐于分享的开放式心态、团队严密的单干形式、开发者讲求纪律的自我要求,皆是 VMware Tanzu Labs 提供给客户的参考意见。
Kent Beck 与 Uncle Bob 推广测试驱动开发(Test Driven Development, 简称 TDD),这是一种从 test code 的角度来是对待 production code 的软体开发方式,依据需要所布局的测试案例,遵循简略准则,先不思考进一步的架构问题,以满足测试条件为要点,反覆的以红灯、绿灯、重构为循环,从 test code 与 production code 中往返;
因为有 test code 的爱护,可落实 Martin Fowler 在他的著述—“Refactoring”书中所提:「一个零碎的重构工作是从第一源代码被写进去开始,到零碎停用为止」,大大防止了前述「熵增定律」的产生,更容易的开发出易于测试、保护的 production code。
有别过来写在文件上僵化且没有继续保护的规格,此过程中的测试案例,进而成为可执行的制品,防止开发过程中改 A 坏 B 的问题,确保零碎的正确性。如此一来,麻利开发与云原生概念中的继续集成、继续交付,才可能疾速且有信念的执行。
麻利开发方法论中,不论是 eXtreme Programing 的迭代 (Iteration) 或是 Scrum 的冲刺(Sprint),皆要求以小步快跑的增量形式,并尽速反覆的推送到生产环境,实现客户所需性能,获得业务价值。
这个要求,也就是利用程序开发与上线的第二阶段:一开始是所谓的继续集成,所涵盖的范畴,有源代码的集成、测试与扫描,在云原生的技术中,还要历经镜像生成,紧接着再进行镜像扫描、签章,最初存储至镜像仓库后,静待最初的部署。
这些过程,须由平安、运维与平台团队依据组织要求,独特制订与搭建流水线,提供给开发者应用;为求高效且缩小人为染指的谬误,须以自动化形式进行,但也可依据治理与平安上的要求设定品质门禁,让负责品质的人有机会可做最初的确认,之后再部署到 UAT 或是生产环境中。
前述这些工作皆可在云原生基金会所率领的生态系中,找到适宜企业用户想要的工具;然而稳固又牢靠的开源工具,有肯定抉择的艰难度。
加上须要平安、运维与平台团队自行评估、搭建与测试,再到前期的治理,让这项工作显得更加惨重。
Tanzu Application Platform 与 Supply Chain Security Tool
Tanzu Application Platform(简称 TAP)是依据 VMware 多年来帮助企业客户,进行数字化转型工作后,所累积的教训与汇整企业客户、开发者应用体验,演绎并设计出一系列的技术栈。
响应了后面提到的开发迭代与上线部署两个阶段(在此称为 Inner Loop 与 Outer Loop),其目标在晋升开发团队与运维团队的生产力、容器平台的可察看性,以及利用与容器部署至 Kubernetes 后的安全性。
不论是 Inner Loop 还是 Outer Loop,TAP 皆以 Choreographer Supply Chain 技术为根底框架,依据两个阶段的不同要求与架构设计,可抉择单集群或是繁多责任的多集群,如 Iterate、Build、Stage 与 Production 等。
并搭配 Tanzu Build Service、Anchore Syft&Grype 等技术,其中提供的 Supply Chain Security Tool 将可大幅简化,Outer Loop 流程中相干团队的建置与管理工作累赘。
Outer Loop 中蕴含 Scan、Store 与 Sign 等平安相干技术;Scan 包含了源代码扫描与容器镜像扫描,Store 则能够在 Scan 之后,将应用程序中所应用的相干套件进行记录,做为软件元数据库(software metadata),Sign 则可为容器进行平安签名。
从几个要害的步骤来逐个了解:
1. 源代码扫描 Source Scan 与镜像扫描 Image Scan:
TAP 采纳 Anchore Syft&Grype 针对源代码与打包实现容器镜像进行扫描,除了在 Inner Loop 的第一阶段进行测试,在 Outer Loop 的第二阶段仍然能够再次进行测试,彻底实现麻利测试要求的测试左移或是测试前移要求。TAP 所采纳的 Anchore Grype 可反对 CycloneDX 格局的软件物料清单 SBOM,为将来的裁减留下广阔的一条路。以下图示,简略出现其架构与运作形式。
在扫描过程中,将会自动化的追查与盘点,该应用程序所应用相干框架、程序库等,并将其后果纪录于 TAP 的数据库之中,做为后续运维的备查材料,在产生平安脱漏时,将有迹可循,提供疾速解决问题的线索。
2. 软体元材料纪录(metadata store):
依据统计,每个零碎应用将近 130 个左右的相依套件,其中百分之九十为开源软件,因而这些开源软件情况的把握,与将来在产生平安疑虑的时候能够快速反应与处理,对于企业客户极为重要。
TAP 自带 PostgreSQL 实现 Metadata Store 性能,负责纪录 Scan 后的后果,将应用程序所应用的相干套件进行记录。以后,TAP 能够应用 insight cli 与 API 对 metadata store 内容进行查问,提供使用者残缺的参考信息。
查问程序码 metadata
查问容器镜像 metadata
3. 镜像建置 Build:
TAP 采纳 Tanzu Build Service(简称 TBS)或是 Kpack,提供平安的根底容器镜像、Spring Runtime、OpenJDK 与多种程序语言反对;
应用 TBS 除了省去撰写与治理 Dockerfile 的麻烦,通过 TBS 所建置的容器更是优化后的后果,防止因为不同技术人员所撰写的 Dockerfile,存在着技术水平落差;并让根底镜像、runtime 有对立的版本,达成容器管理工作;
此外 TBS 还能够对镜像进行签名,配合平台的安全策略,即可过滤掉未被平安签名认可的容器,满足平安控管的需要。
总结与瞻望
现今企业所须要面对的竞争对手,曾经不仅仅来自同一行业,而是任何一个携带弱小企图心与创新能力的跨界公司。
因而,除了要在本来的畛域中翻新,更急需让本身的 IT 技术能够快速反应需要,提供翻新的服务去吸引客户。因而,IT 技术曾经成为企业竞争的外围能力。
另外,在互联网技术发达的环境下,企业赖以为生的零碎,在一个不经意的状况下,极有可能蒙受不明的攻打;轻微的,企业名声与信用受损,重大的,造成无奈计算的财产损失。
从基础设施建设、软件开发技术、部署流程,乃至于信息安全的晋升,都应该是企业关注,且投入大量资源的指标。
因而,应用程序从开发、测试到部署、运维的整个生命周期,皆需从新思考并层层把关,让应用程序能够疾速迭代部署,更要防堵破绽、晋升信息安全。
这样的需要之下,一个容易搭建、应用与治理的工具链是现代化企业所需的法宝。
而 VMware 的 Tanzu Application Platform 就是集利用程序开发生命周期中所需之大成,内含 Supply Chain Security Tools,可让开发团队与运维团队各司其职,亦可严密单干,朝向开发运维合一的高效团队迈进。
疾速倒退中的 Supply Chain Security Tools,除了为平安工具链奠定一个具备标准的框架,其可任意抽拔的设计架构,更为将来的扩大工作留下伏笔。采纳的企业除了能够享受开箱即用的平安利用部署的技术栈,在不久的未来更能够依据本身需要,更换适宜的相干工具与套件。
作者:王钧平
王钧平是 VMware 大中华区利用现代化部门的高级解决方案架构师,具备 20 余年的利用程序开发教训,已经帮助电信、金融、制作等产业客户,进行利用现代化与数字化转型等工作。近年来更专一于畛域驱动设计、测试驱动开发、设计模式等软体工程技术,并反对企业客户采纳微服务架构与引进容器技术等,对于云原生相干技术具备丰盛教训。
起源|公众号:VMwareTanzu 云原生