DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI)、持续部署(CD)为基础,来优化产品开发、测试、系统运维等所有环节,DevOps的引入能对产品交付、测试、功能开发和维护起到意义深远的影响。从大趋势上分析,未来所有企业都将是IT软件企业,无论是制药业、服务业,还是金融业等行业,比如说大部分银行都意识到创新的伟大驱动力,都在往金融科技企业转型,终究会转型为软件企业,过去几年,DevOps正在成为软件企业主流模式,正在成为企业能否在行业内脱颖而出的关键性因素。在DevOps实践中,测试策略的优劣成为了往往能决定DevOps实践是否获得成功的必要条件,下面我们来谈谈DevOps 在测试策略中的实践。
测试有很多种类,在持续测试中使用哪种测试,在团队融合的趋势下使用何种团队结构,使用什么样的测试架构,如何更好地推动验证效率,如何才能在知识不断更新的当下进行测试团队的建设,以及不同测试阶段需要使用什么样的策略,这些都是在实践中需要关注的。
1、测试促进架构重构策略:根据测试的反馈不断优化系统架构
诸如DevOps之类的实践,其中最重要的目标是,希望能够通过测试的反馈来促进系统架构的不断优化和重构。系统重构的基本前提和原则就是,在改变内部架构的同时不会对原有的外部关联和操作造成影响。在实际的项目实践中,这当然需要大量的测试来保证,只有通过测试用例验证,才能证明重构不会带来新的问题且原有的功能也都能正常工作,这些需要回归测试来进行保证。而完整的回归测试耗时、耗力,这也是导致开发人员对于修改畏手畏脚的重要原因之一。
在推动自动化测试的早期,出现过以覆盖率提升为导向的现象,在这个时期,比起提升测试率本身,发现代码存在的问题及如何进行改进才是自动化测试所追求的。例如,通过对测试覆盖率的确认,可能会发现一些在逻辑上永远走不通的分支和语句。这种情况往往是无用代码或者潜藏的缺陷引起的,而无论是哪种情况都值得我们对类似代码进行确认和重新检査。
而在推动自动化测试的中后期,自动化回归测试起到了非常重要的作用,稳定、快速并且保持实时更新的自动化回归测试的使用频度非常高,而它也能为开发团队带来信心,可以保证所有的修改会有它“兜底”,即使在复杂的大型项目中也不用再畏惧可能带来的影响。所以,在这种情况下,修改不是在问题出现的地方打“补丁”,而是真正从架构的角度对系统进行重构, 这样才能保证系统可持续发展。
2.测试团队技能提升策略:逐步推动测试团队知识与技能的重建
随着云计算、物联网、区块链、人工智能等的发展,以及敏捷、DevOps的推进,对测试人员的的要求也越来越高。基于这些挑战,建议采取如下4个步骤来推动测试团队知识与技能的重建。
步骤1:保证敏捷团队的测试成员具有相关测试技能及自动化技能,建议所有测试团队成员都具有自动化相关的技能。
步骤2:测试团队中具有编码基础的成员必须要具备更高级别的自动化技能,如白盒测试能力及开发能力。
步骤3:确保团队中拥有所需的具有小众测试技能(如安全、非功能性因素、测试环境、 数据管理等)的成员。
步骤4:测试专家具有人工智能相关技能,如深度学习概念、算法、神经网络、高级统计知识、数据优化等。
3.业务需求优先策略:根据业务需求推行自动化测试
自动化测试的实施是一个长期过程,其中推行的优先顺序非常重要。而关于如何确认推行的优先顺序,应该回归到DevOps实践的目的上。DevOps实践的目的是实现企业目标,在大部分情况下,盈利是企业最重要的目标,而关键业务则是企业实现盈利的重要保证。根据业务的重要性及相关需求设立优先顺序,优先保证关键业务的自动化测试,按照重要程度设定出短期、中期、长期对关键业务的应用覆盖,这样才能保证在修改问题时自动回归测试有效,以及增加新特性功能时能够实现敏捷实践所需要的速度,同时又不会在测试上因折中或让步而降低质量。
4.测试覆盖程度提升策略:根据项目状况逐步提升测试覆盖率
对于测试覆盖率的提升,一定要根据项目规模和架构特点,并结合业务变更程度,同时需要确认团队成员关于自动化测试用例及编写脚本的熟练程度等,对这些进行综合考量之后设立项目应用的测试覆盖率。一般按照如下步骤来实现测试覆盖率的提升。
步骤1:根据优先顺序,首先实现关键业务的良好路径(聚焦于正常操作的功能测试)及糟糕路径(聚焦于异常操作或异常状况下的功能测试)的自动化测试。
步骤2:对于大量的非关键业务,仍然按照优先顺序,首先实现非关键业务的良好路径(聚焦于正常操作的功能测试)的自动化测试。
步骤3:对于大量的非关键业务,仍然按照优先顺序,首先实现非关键业务的糟糕路径(聚焦于异常操作或异常状况下的功能测试)的自动化测试。
步骤4:实现自动回归测试并不断扩大回归测试所能包括的范围,而以上步骤同时也可以使用敏捷方式,小步快跑,最终实现整体的自动化回归测试。
作者:海底捞彭哥