Tanzu Application Platform 小步快跑的代码扫描,实现质量左移

f331975390ee8d73702b061487a34c4a.jpeg

题图摄于北京黄花水长城

本篇转发 TAP 系列文章之十二,Tanzu Application Platform 的代码扫描和质量左移。

测试是软件质量的基础,测试左移为应用准时上线的关键

在以往的日子,一个应用软件项目开发工作,相关人员无不将注意力放在范畴、预算与项目周期三个面向。而「墨菲定律」却如影随形,不断发威;我们总是无法避免的如「人月神话」书中所描述的一样陷入困境。

通常,需求访谈消耗掉大量时间,大大的压缩了开发所需要的时间,即使系统设计被清楚的讨论与制订,开发者依旧被项目周期压得喘不过气来,所以测试是最常被省略的部分;一直到应用要上生产环境时,才发现应用程序没有完全实现原先设计目标,没办法满足客户要求,甚至源代码的编写或是使用的框架,都具有安全的风险,最后导致整个项目延期。

即便最终,系统在跌跌撞撞的开发过程后上线,紧接的一连串 Bug 修正、功能增加与修改,都是是项目规划初期应该想到,却又没想到的部分。

一个系统经过多年的使用与维护,历经多代轮替的开发者,早已偏离原来的设计;再加上没有良好的架构设计,也没有从项目开始时就纳入的测试,后续的开发者没有充足的信心与多余的时间进行重构,以至于整个系统的维护工作日趋沉重,也让迭代速度不断下降,整个系统也越加混乱,与热力学的熵增定律:「每个系统会从有序走向无序,日趋混乱,且不可逆」,不谋而合。

相信许多具有应用开发与运维实务经验的读者,每次在系统上线时总是有种惶惶不安、惊涛骇浪的刺激感。

Working Effectively with Legacy Code  的作者 Michael C. Feathers 在书中定义了遗留系统即为没有测试覆盖(保护)的系统,也是有待改善的系统,可见测试的重要性,却是传统应用开发所欠缺的部分。

前述的传统瀑布式项目管理方式,确实弊病丛生,因此敏捷开发思维横空出世,提倡测试先行、增量开发与及早部署;这个概念改变了这个世界开发软件的方式。

VMware Tanzu Labs (原 Pivotal Labs)的技术专家 Mark Parker,曾经于2016年的 SpringOne 活动上,以 “TDD: The Bad Parts”为题目的演讲中提出,如何让应用程序可以高效开发、持续且即时部署的关键,即为测试。

但是,现在多半开发在个阶段测试工作所花费的时间与精力,通常如下图左边的倒三角形,单元测试花费很少时间,系统整合测试与验收测试则需要更多的工作量才可完成;其中原因不难理解,一旦系统进入 SIT 或是 UAT 的测试阶段,其需要与其他系统对接,所以在问题查找需要更多时间,且功能修正过程中则需要请其他周边系统与团队配合,才能够重新部署测试。

e031965757b106f0b2513c28bbbcba6e.png

综合上述问题,反之,若将更多时间与精力放在单元测试工作上,将会省去大量的 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 后的安全性。

67ed65532c5580bb6d6ee8dd4122f2fe.jpeg

不管是 Inner Loop 还是 Outer Loop,TAP皆以 Choreographer Supply Chain 技术为基础框架,根据两个阶段的不同要求与架构设计,可选择单集群或是单一责任的多集群,如 Iterate、Build、Stage 与 Production 等。

54aeea5ad089d750e14131a1cc118398.jpeg

并搭配 Tanzu Build Service、Anchore Syft&Grype 等技术,其中提供的 Supply Chain Security Tool 将可大幅简化,Outer Loop 流程中相关团队的建置与管理工作负担。

890e3dfb21af8cb90697648bf455f476.png

Outer Loop 中包含 Scan、Store 与 Sign 等安全相关技术;Scan 包括了源代码扫描与容器镜像扫描,Store 则可以在 Scan 之后,将应用程序中所使用的相关套件进行记录,做为软件元数据库(software metadata),Sign 则可为容器进行安全签名。

从几个关键的步骤来逐一理解:

c7fd884ca01d7aba3a633a2537a71e35.png

 1.源代码扫描 Source Scan 与镜像扫描 Image Scan:

TAP 采用 Anchore Syft&Grype 针对源代码与打包完成容器镜像进行扫描,除了在 Inner Loop 的第一阶段进行测试,在 Outer Loop的第二阶段依然可以再次进行测试,彻底实现敏捷测试要求的测试左移或是测试前移要求。TAP 所采用的 Anchore Grype 可支持 CycloneDX 格式的软件物料清单 SBOM,为未来的扩充留下宽广的一条路。以下图示,简单呈现其架构与运作方式。

a330e3468c7b84f2de372387d3c5e116.jpeg

在扫描过程中,将会自动化的清查与盘点,该应用程序所使用相关框架、程序库等,并将其结果纪录于 TAP 的数据库之中,做为后续运维的备查资料,在发生安全遗漏时,将有迹可循,提供快速解决问题的线索。

2.软体元资料纪录(metadata store):

根据统计,每个系统使用将近 130 个左右的相依套件,其中百分之九十为开源软件,因此这些开源软件状况的掌握,与未来在发生安全疑虑的时候可以快速反应与处置,对于企业客户极为重要。

TAP 自带 PostgreSQL 实现 Metadata Store 功能,负责纪录 Scan 后的结果,将应用程序所使用的相关套件进行记录。当前,TAP 可以使用insight cli 与 API 对 metadata store 内容进行查询,提供使用者完整的参考信息。

e9bf9471d981d96f6fb6b31d9fd31d21.png

*查询程序码 metadata

63fb0a2d76289a755b1bc75e880927ae.jpeg

*查询容器镜像 metadata

3.镜像建置 Build:

TAP 采用 Tanzu Build Service (简称 TBS)或是 Kpack,提供安全的基础容器镜像、Spring Runtime、OpenJDK 与多种程序语言支持;

使用 TBS 除了省去撰写与管理 Dockerfile 的麻烦,经过 TBS 所建置的容器更是优化后的结果,避免因为不同技术人员所撰写的 Dockerfile,存在着技术水平落差;并让基础镜像、runtime 有统一的版本,达成容器管理工作;

此外 TBS 还可以对镜像进行签名,配合平台的安全策略,即可过滤掉未被安全签名认可的容器,满足安全控管的需求。

428161f68ed8c3f9b656380d15329063.png

总结与展望

现今企业所需要面对的竞争对手,已经不仅仅来自同一行业,而是任何一个携带强大企图心与创新能力的跨界公司。

因此,除了要在原本的领域中创新,更急需让自身的IT技术可以快速反应需求,提供创新的服务去吸引客户。因此,IT 技术已经成为企业竞争的核心能力。

另外,在互联网技术发达的环境下,企业赖以为生的系统,在一个不经意的情况下,极有可能遭受不明的攻击;轻微的,企业名声与信用受损,严重的,造成无法计算的财产损失。

从基础设施建设、软件开发技术、部署流程,乃至于信息安全的提升,都应该是企业关注,且投入大量资源的目标。

因此,应用程序从开发、测试到部署、运维的整个生命周期,皆需重新思考并层层把关,让应用程序可以快速迭代部署,更要防堵漏洞、提升信息安全。

这样的需求之下,一个容易搭建、使用与管理的工具链是现代化企业所需的法宝。

而VMware 的 Tanzu Application Platform 就是集应用程序开发生命周期中所需之大成,内含 Supply Chain Security Tools,可让开发团队与运维团队各司其职,亦可紧密合作,朝向开发运维合一的高效团队迈进。

快速发展中的 Supply Chain Security Tools,除了为安全工具链奠定一个具有规范的框架,其可任意抽拔的设计架构,更为未来的扩展工作留下伏笔。采用的企业除了可以享受开箱即用的安全应用部署的技术栈,在不久的将来更可以根据自身需求,更换适合的相关工具与套件。

52fb9550fdf4e1e71a5d2fcd669088d4.png

作者简介

 王钧平 

王钧平是 VMware 大中华区应用现代化部门的架构师,具有 20 余年的应用程序开发经验,曾经协助电信、金融、制造等产业客户,进行应用现代化与数字转型等工作。

近年来更专注于领域驱动设计、测试驱动开发、设计模式等软件工程技术,并辅导客户采用微服务架构与引进容器技术等,对于云原生相关技术具有丰富经验。


要想了解联邦学习、隐私计算、云原生和区块链等技术原理,请立即长按以下二维码,关注本公众号亨利笔记 ( henglibiji ),以免错过更新。

4969f3cab08f1af2047f31c5f2cd7a74.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值