ITPub博客

首页 > 数据库 > 数据库开发技术 > 软件高效交付10大策略解读 - 综合手段保证质量和安全

软件高效交付10大策略解读 - 综合手段保证质量和安全

原创 数据库开发技术 作者:茹炳晟聊软件研发 时间:2022-05-13 07:30:00 0 删除 编辑
软件交付过程是指在编程序改代码之后的一系列活动,如提交、集成、构建、部署、测试等,直到将软件发布给用户使用。
我们大致梳理了软件开发 “从古至今”的思潮、运动、方法、实践,从软件工程到 DevOps,再到研发效能,它们之间有演进、有纠偏、有补充,也有大量的交叠。做这样的梳理,是为了能够融会贯通,以便综合运用。本系列文章就来看看对它们做到融会贯通以后,提炼出来的软件高效交付的10大策略。

作为本系列的第二篇文章,我们来解读其中的第二个策略:综合手段保证质量和安全。

源代码改动发生后的软件交付过程,主要包括三类事情:
一是源代码改动的累积和汇聚;
二是构建、部署这类的软件形态的转换;
三是各种类型的检查、测试和反馈,以保证质量和安全。
若论所需的时间和精力,其中第三类事情是最大头。接下来就围绕这类事情来讲“运用综合手段保证质量和安全”这个策略。

各种各样的测试
我们把代码改动发生后进行的各种类型的检查、测试和反馈,统称为测试。
各种各样的测试,用来发现软件中的缺陷,以及稳定性、可靠性、安全性等方面的问题,也用来发现软件与产品设计不相符的情况,并探测用户是不是喜欢。下面我们来小结一下这个广义的测试具体包括哪些测试方法。
首先,它包括我们平常说的测试,也就是程序运行起来的测试,比如单元测试、集成测试、系统测试等。同时它也包括无须程序运行,直接对源代码或安装包进行的静态检查,比如代码扫描、代码评审等。
其次,它既包括人工测试,比如人工的UI测试,也包括自动化测试,比如自动化接口测试。
再次,测试不仅可以发生在测试环境下,也可以在生产环境中做测试,比如生产环境的全链路压测、混沌工程、灰度发布、A/B测试等。在生产环境中做测试的一个重要的思路是小范围尝试。金丝雀部署是小范围尝试,先部署并切换10%甚至1%的流量观察观察,别搞出故障。灰度发布也是小范围尝试,看看有没有产品设计的问题或者功能实现的问题。A/B测试也是小范围尝试,小范围内,看看是A方案效果好还是B方案效果好。
最后,虽然构建、部署活动不是以测试为主要目的的,但是从测试的角度来看,它们具备测试的性质:测试程序能不能构建,测试程序能不能部署。此外,生产环境部署过程本身,可以采用灰度发布、蓝绿部署等方式来降低风险。严格地讲,这也属于测试。
这么多种测试手段,我们该怎么选用呢?核心思路是,根据实际情况,综合运用多种手段:
一是在合适的时机做合适的测试,不能一味地强调测试左移或测试右移;
二是并非所有的事情都应该分派给测试人员或者开发人员;
三是自动化测试并不能完全取代人工测试。
接下来我们稍微详细地看一下。

测试左移 + 测试右移
我们先来看在合适的时机做合适的测试。
有些测试很“便宜”,可以早早地做、反复做、经常做,所发现的问题可以很快得到修复。但这样仍然会有不少漏网之鱼。那些“贵”一些的测试,则可以进一步找出问题,当然,发现问题的代价和修复问题的代价都要大一些。还有些测试,必须搭一个测试环境来做,不仅太“贵”了,而且效果可能也不好,所以干脆到线上去做。
一会儿说测试左移,也就是尽量写完代码就测试;一会儿又说测试右移,跑到线上去做。其实它们并不矛盾,这正是体现了不同的测试手段都有相应的使用时机、场合和策略。

测试人员 + 开发人员
测试该由谁来做呢?对源代码本身的检查当然由开发人员来做,也就是代码评审甚至结对编程。那把软件运行起来之后做的测试呢?一般来说,越是需要专业能力的测试,就越是倾向于由测试人员来编写和执行,比如探索性测试、安全方面的测试等。而越是与编程实现相关,对系统结构中某个组件甚至某个类和函数进行的测试,就越是倾向于由开发人员来编写和执行,比如单元测试、对单个接口的自动化测试等。

人工测试 + 自动化测试
自动化测试并不能完全取代人工测试。一般认为单元测试、接口测试是可以完全自动化执行的。而自动化的代码扫描尽管可以发现不少问题,但不能完全取代人工的代码评审。人工的探索性测试也没法自动化完成。一般来说,需要反复执行的、检查判断有明确标准和规则的测试适合自动化完成,然而并非所有的测试都是如此。
自动化测试要根据实际情况,逐步将自动化的比重和测试覆盖率提高到一个合理的范围内。要按不同的测试类型,比如单元测试、对单个接口的自动化测试、接近端到端的自动化接口测试、自动化UI测试等分别考查,确定自动化的比重和测试覆盖率多大,确定对于特定场景来说是否合理。

综合运用
这么多种测试手段,不是必须要全部用上。流程设计得简单点儿还是复杂点儿,每个活动要做得多么深入、全面,也需要根据系统/产品/模块的具体情况来定。
总体来说,越是对质量要求高的产品和服务、越是复杂的紧密耦合的系统,就越是需要步骤多一些的流程,流程中的每一件事情就越是需要严防死守,深入、全面地做。反之,就可以简单点儿做,抓重点做。
应该为不同的测试手段各分配多少力气,这个话题通常被称为测试分层策略。测试分层策略有理想主义的金字塔模型、更务实的橄榄球模型等。而在整个开发、集成发布流程中,何时该做哪种测试、以什么频率测试、如何进行质量卡点,则是集成发布策略的一部分。

软件高效交付10大策略解读系列文章
软件高效交付10大策略解读 - 小批量持续流动

推荐阅读
董越老师的新书《软件交付通识》从头到尾梳理了软件交付过程(也就是从改了一行代码到它发布上线的过程),分门别类地讲解了流程各个阶段的各个要点,以及流程中各个活动的各个要点。软件高效交付的10个策略更是这本书中的核心观点和内容,如果你想快速通读所有10个策略,请关注这本不容错过的好书。

作者简介:
董越,DevOps 资深专家,阿里巴巴集团前研发效能事业部架构、高级产品专家等职,从事 Aone&云效 DevOps 产品设计、阿里云专有云集成与交付解决方案设计等工作。在加入阿里之前,他还曾就职于西门子、摩托罗拉、雅虎、索尼、去哪儿网等大型企业,一直从事软件配置管理、软件集成与交付、DevOps 相关的工作。当前主要从事企业级DevOps体系建设与咨询工作,帮助众多企业提升软件研发交付效能。已服务过的客户有华为、工商银行、交通银行、招商银行、中信银行、中国移动、中国联通、中国电信、华泰证券、泰康人寿等。

原文作者:茹炳晟聊软件研发;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-04-23

  • 博文量
    32
  • 访问量
    14226