十年前,《全程软件测试》第1版和广大读者见面了,它是我在WebEx七年测试工作之结晶。这本书受到了读者的喜欢,甚至有好几家公司把这本书作为测试工程师的入职培训教材。十年过去了,软件测试领域发生了很大变化,我自己也发生了很大变化。我虽然离开了WebEx、Cisco,离开了在企业一线的测试工作,来到了同济大学教书,但我一直没有失去和工业界的联系,而且不再局限一家公司的实践,视野更开阔了。我和近百家公司的测试工程师都有交流,为他们提供测试培训、咨询等服务(包括为中国南车、华为2012实验室的研发能力中心等提供较长期的测试技术咨询服务)。今天,我对测试的理解和认识,相比自己写本书第一版、第二版时,在广度和深度方面都有了较大的提升。这也可以从我的公众号“软件质量报道”的几篇文章中略见一斑。
·软件测试的一个新公式引起的思考
·软件测试进入了一个新时代
·究竟什么是软件测试架构?
·看家本领系列:软件测试的系统性思维、分析性思维……
·DevOps兴起意味着专职测试人员消亡?
·安息吧,“全栈工程师”
·你被“敏捷测试四象限”蒙蔽多少年了
·这才是世界上最全的“软件测试”思维导图
·《软件测试能力图谱》升级版
十年来,软件测试自身也发生了很大变化 。在测试理论方面,业界提倡测试左移、测试右移(这和我十年前写本书的主要思想——“测试贯穿软件全生命周期”是一致的),DevOps也快速兴起,而且在实际工作中,我们看到专职测试人员开始融入研发之中,同时更多的开发人员开始做测试;人们更关注自动化测试和探索式测试,招聘更多的测试开发人员……
理论的发展和实践的创新固然可喜,但是在今天,软件测试仍然存在被引入“歧途”的风险。具体表现为:软件测试的定义日渐模糊,对软件测试的功能和职能的各种说法、看法莫衷一是。
例如,一些公司号称“赋予了软件测试团队新的价值和使命”,将软件测试部门改名为“工程生产力(Engineering Productivity,EP)”部门。作为EP,其职责是提高专业服务,给产品部门提供一些专业的建议(这些建议涵盖可靠性、安全、国际化、测试、发布、部署等)。EP更重要的职责是负责所有能够提高软件研发效率的工具的开发与维护。这些工具包括业务建模工具、源代码管理系统、代码分析工具、版本构建工具、自动化测试工具、质量管理工具、缺陷管理系统等。他们甚至强调,在策略上多开发有助于缺陷预防的工具,而不是仅开发传统的测试工具(发现缺陷的工具)。将工作重点放在“提升工程生产力、降低软件缺陷”之上,强调缺陷预防,从这个角度上讲,“成立EP部门”这种做法是一件好事,但EP部门做的事情已不是软件测试的主要工作,和测试工作已相差甚远,这时不能把EP看作软件测试,EP就是EP,不能将EP和软件测试混为一谈。就像我们有时候容易把测试称为质量保证(Quality Assurance,QA)、把QA当作测试,但实际上两者也有明显的区别。QA强调有好的研发过程产生好的产品,侧重过程定义、过程评审和过程改进,工作重心是预防缺陷;而测试属于质量控制,强调对软件阶段性产品和最终产品的质量检验,其工作重心是发现缺陷。虽然测试是QA的重要手段之一,但是不等同于QA。
即使测试左移、测试右移,敏捷开发模式、DevOps已经流行,我们讨论软件测试需要在这样背景展开——要将软件测试更好地融入整个软件开发和运维的大环境中,但 我们依旧需要清楚软件测试本身要做的工作,区分质量管理、运维管理、研发能力提升等工作 。在谈到“软件测试”时,人们说的是软件测试的相关工作,如单元测试、集成测试、系统测试等,也不局限于动态测试,也可以包括静态测试——需求评审、设计评审、代码评审和借助工具进行代码静态分析。如今谈软件测试,也不再专指测试人员所做的工作,而是指完全可以由开发人员所完成的测试工作。开发人员做测试,也不再局限于单元测试,他们可以做集成测试、系统测试等。
虽然不能说“一千个测试人员就有一千种说法”,但可以列出对软件测试的很多种不同定义:
·软件测试是验证软件产品是否满足用户的需求;
·软件测试不仅要验证设计和需求、实现和设计的一致性,还要确认所实现的功能是否真正满足用户的实际需求。
·软件测试是为了发现软件缺陷而开展的活动;
·软件测试就是不断揭示软件产品的质量风险;
·软件测试就是对软件产品质量进行全面评估,提供产品质量信息。
十年弹指一挥间,软件行业和软件测试发生了这么多的变化,我个人也有了很多新的实践、经验和体会。基于此,我觉得非常有必要对《全程软件测试》一书的内容进行全面的更新和补充。恰逢第1版推出十周年之际,《全程软件测试(第3版)》得以与广大读者见面,这便是我对软件测试过去十年所发生的变化以及自身经历和经验的一次全新概括和总结。
正是基于上述的这些现象,本书一开始(本书的第一部分,第1章和第2章)就全面阐述对软件测试的不同理解,解析全程测试思想,力求揭示软件测试的内涵,以期帮助读者更好地理解不同的测试目标、测试价值,进而有利于做好软件测试的策划和执行。
本书的第二部分(第3章至第9章)讨论了完整的一个软件测试生命周期。这部分从测试项目的“准备”开始,侧重讨论测试基础设施与TA框架、团队能力等建设——这是后续测试计划、设计和执行的基础。在目前复杂的环境和技术、快速交付的背景下,我们必须首先关注基础设施,然后逐步深入到测试计划、设计、执行。其中,测试计划侧重讨论测试需求分析——往往被测试人员忽视,而实际上测试需求分析是测试设计的基础。这部分兼顾传统的测试和敏捷模式下的测试,的确不容易,但核心的东西一般都具有良好的生命力,是不容易被抛弃的,而且最好不要把“测试计划、设计、执行”看作不同的测试阶段,而是看作研发过程中要经历的、基本的测试活动。注意:本书重点讨论测试方法的灵活运用和实践,而不再赘述基本的测试设计方法(即人们通常提到的黑盒测试方法、白盒测试方法等),相关内容建议可以参考我写的测试教材——《软件测试方法和技术(第3版)》和《软件测试——基于问题驱动模式》。
全程测试思想,不仅局限于功能测试,还要扩展到非功能性测试(包括持续的性能测试与优化、持续的安全性测试与加固),并聚焦到彻底的自动化测试——全程测试建模、全程可视化管理。这就是本书的第三部分(第10章至第14章)所介绍的内容。
本书最后一部分内容(第15章)对软件测试的发展趋势加以展望——涉及当今软件测试面临的挑战,如微服务、云技术、AI技术及其应用等。囿于篇幅,这部分力图启发读者如何应对挑战、如何设计出云测试和AI测试的解决方案,让云计算技术、AI技术更好地为测试服务。
即使写了15章、几百页、几十万字,但我还是感觉许多东西还没写出来。如果慢慢写,可以写1000页、100-200万字。如果把具体的操作步骤都描述出来,再多给几个实例分析,每一章都可以写一本书。毕竟精力有限,我还是先把精髓展现出来,至于细枝末节,留给大家自学、自我拓展。 IT人,最主要的能力就是学习能力——自学能力,所以对于工具如何使用这样的问题,答案就是“自己实践是最有效的” 。专业的软件工程师使用工具不是一件难事,但改变自己的思想、思维方式倒是挺难的。归根结底,通过编写本书,我力求给大家呈现软件测试的思想、流程、方法、优秀实践以及自己的思考,剩下的事,就留给读者思考、实践、再思考、再实践吧。
首先感谢美国哈佛商学院顾问委员会委员、宽带资本基金董事长 田溯宁 老师在百忙之中为本书写序,把软件测试与当今时代的客户运营联系起来,进而提升到“只有掌握了软件的企业,才能理解和把握未来世界,紧跟时代浪潮”的高度。
其次,感谢为本书写推荐辞的诸位朋友,其中有些朋友还提了宝贵意见,他们是(排名不分先后,只是按拼音首字母列出):
· 蔡立志 ISO/IEC中国专家代表,中国软件测试机构联盟技术委员会主任,上海计算机软件技术开发中心副主任
· 陈霁 上海霁晦信息科技有限公司CEO & VipTest联合创始人
· 程岩 京东物流研发负责人
· 陈晓鹏 埃森哲中国卓越测试中心负责人
· 陈振宇 南京大学教授、慕测平台创始人
· 耿晓倩 (Christina Gen)Splunk旧金山总部测试总监
· 胡星 百度智能驾驶事业群主任研发架构师
· 孔德晋 华为终端Hicloud测试经理
· 李戈 北京大学副教授、CCF软件工程专委秘书长
· 李怀根 广发银行研发中心总经理
· 刘琛梅 (梅子)绿盟科技防火墙研发经理、《软件测试架构师修炼之道》作者
· 刘江 美团点评技术学院院长、CCF技术前线委员会秘书长
· 刘琴 ISTQB中国首席代表、同济大学软件学院教授
· 刘冉 ThoughtWorks资深软件质量咨询师
· 廖志 腾讯质量管理通道委员、CSIG地图产品质量中心总监
· Phyllis Chang Senior Manager, Webex Engineering,Cisco HQ
· 茹炳晟 Dell EMC 测试架构师
· 王斌 Testin云测解决方案事业部副总
· 王冬 360测试总监
· 王金波 中国科学院空间软件评测中心、主任/研究员
· 熊志男 京东高级测试开发工程师、“测试窝”社区联合创始人
· 许永会 知名通信企业资深测试专家
· 杨春晖 工信部第五研究所软件中心主任、中国赛宝实验室软件评测中心主任
· 杨凯球 中兴通讯公司测试经理
· 杨晓慧 前华为测试专家、现AI机器时代CTO
· 杨忠琪 东方证券测试负责人
· 于洪奎 中国银行软件中心高级经理
· 钟思德 灼识咨询顾问、知名通信公司高级测试经理
· 周震漪 CSTQB 常务副理事长、TMMi中国分会副理事长
· 朱波 香港航空有限公司IT经理
再者,感谢人民邮电出版社编辑们的辛勤工作,特别是陈冀康、吴晋瑜等编辑大力支持和愉快的合作,使本书以良好的状态与读者见面。最后,感谢家人的全力支持,使我能够全心致力于本书的写作,能够和读者有一次更深、更流畅的思想和技术交流。
谢谢你们!
朱少民(Test Ninja)
于乙未仲夏之夜