推 荐 序
软件测试是软件产品质量控制的重要手段。在航空航天、智能汽车、轨道交通等关键安全软件的生产和应用中,软件测试是质量保证极其重要和关键的环节。软件测试领域正处于快速发展阶段,目前国内高水平软件测试人才紧缺。高质量软件测试教材对于培养创新能力强和适配企业实际需求的高水平软件测试人才至关重要。
赵国亮研究员长期从事软件测试技术研究工作,具有丰富的测试工程实践和管理经验,是软件测试领域资深专家,出版了多部软件测试方面的教材。这本教材融合了作者和其团队在软件测试领域长期的实践经验,理论与实践相结合,基于对测试分析方法和测试设计方法的深度解析,举证了丰富的测试案例,具有如下鲜明特点。
基本概念清晰:教材以软件测试需求分析与设计活动为牵引,简明清晰地对相关测试概念给出了明确的定义,由浅入深,透彻清晰。
分析方法全面:教材不仅全面介绍了测试需求分析的方法,而且深度解析了测试需求分析的内容之间的相互关系,技术内容能够充分满足软件企业和软件测评机构对高水平测试人才的培养要求。
实践案例丰富:教材以软件测试实践的视角,通过项目案例驱动将测试的相关基本概念、测试需求分析方法有机融合,有助于进一步提升读者软件测试需求分析的能力。
中国的软件测试产业正在蓬勃发展,迫切需要既懂技术又懂管理、满足企业需要的高水平软件测试人才。这本教材内容详实、实践性强,它的出版将有助于软件测试人员、评测人员和软件工程专业学生的测试理论知识和实践能力的培养,为读者系统化学习软件测试基本概念、测试分析方法、测试设计技术等,以及开展软件测评实践提供具有可借鉴性和可操作性的指导。
——吴国伟教授/博导
前 言
随着计算机软件在各行各业的广泛应用,软件测试也随之成为方兴未艾的职业。当下,国内涌现出越来越多的有资质的第三方软件测评机构。但是,普通高校的软件工程专业缺少相关的软件测试课程,即便有,也只是局限在编程语言或测试工具使用方面,绝大多数学生在毕业后很难快速胜任软件测评工作;因为软件测评工作需要的技能覆盖测试需求分析、测试用例设计、代码审查等,而不只是会使用测试工具或会读代码。根据笔者多年的用人经验,计算机专业的本科生至少需要2~3年的培养,才能具备基本的软件测试需求分析能力,能够独立对不同类型、不同用途的软件开展合格的测试需求分析;即便是计算机专业的硕士,通常也需要1~2年的训练才可以胜任软件测试需求分析工作。因此,《软件测试需求分析与设计实践》旨在培养软件测评人才,致力于完善软件工程的课程体系。
笔者从事软件测试工作十余年来,发现在这个行业外,甚至在这个行业中,都普遍存在着对这个行业的错误认知。第一类错误认知是软件测试是IT行业的“蓝领”工种,是技术能力低于编码人员的人才干的,非计算机专业毕业的人在某些培训机构培训个把月就能胜任工作;第二类错误认知是软件测试人员只要具备读代码能力就能胜任工作;第三类错误认知是软件测试就是证明软件功能有无。
软件测试人员对于被测试的对象,就好比医生对于就诊的病患。门诊医生需要具备基本的医学专业知识,才可能根据病人对病症的描述,开具各类医学检查内容;检查室的医生需要具备基本的诊疗设备操作能力,才能实施检查并给出检查结果;最后,门诊医生根据检查结果做出病因诊断,根据诊断结论给出治疗方案。
软件测试过程与医生诊疗过程类似,测试需求分析人员需要具备基本的软件需求分析技能,首先对软件需求进行评判,确定软件需求描述的完备性和正确性;其次,依据完备和正确的软件需求,测试需求分析人员需要进一步分析测试内容,也就是确定到底需要在多大范围和深度进行测试,以及使用什么样的测试技术或方法,才能证明软件正确实现了需求。
之后,白盒测试人员和黑盒测试人员类似检查室的医生。白盒测试人员需要具备基本的测试工具操作能力和白盒测试结果评判能力;黑盒测试人员需要具备基本的黑盒测试用例设计技能,才能使用充分有效的测试用例开展测试工作,并给出可信的测试结果。
最后,测试人员根据测试结果确定软件缺陷。
因此,如果测试人员不具备软件测试需要的基本技能,就如同医生不具备基本医学知识,导致的后果是医生在病患面前失去了专业权威性,测试人员在软件开发人员面前同样会失去专业的权威性,产生完全无效的测试。
在软件测试行业,尤其是第三方软件测试行业,普遍存在的问题是软件测试人员缺少软件需求分析技能。由于测试人员没有能力评判软件需求的正确性和完备性,测试需求分析经常基于一个错误百出的软件需求而开展,导致的错误包括以下几类。
1. 测试遗漏重要软件能力需求
造成这类错误的原因是软件需求中遗漏了软件能力需求,因此测试也随之遗漏。
如果就此质疑测试人员,他们的理由通常是“软件需求规格说明中没有写”或“我们怎么知道还有这个需求”。他们不知道软件需求分析能力是软件测试人员需要具备的基本能力,如果缺乏此能力,就不可能胜任测试需求分析的工作,最多承担软件测试执行的工作。
据业界著名的统计公司的统计表明,属于需求分析和软件设计的错误约占64%,属于程序编写的错误仅占36%。因此,测试人员必须具备理解软件需求,并用适当的需求分析方法评判需求描述的完备性和正确性的能力。
2. 需要验证的测试点不充分
产生这类错误的原因是某些测试人员能力偏低,对“如何证明软件正确性”存在错误的理解,认为测了就行,至于应该从哪些点上考虑测试以及设计多少个测试用例合适则不在他们的思考范围内。因此,这样的测试最终只能证明功能的有无,而不是证明功能的正确性。
3. 抛开软件需求对设计进行无意义测试
如果软件需求分析人员犯了混淆需求与设计的错误,提交给测试的需求文档将充斥着大量设计细节问题。测试需求分析人员没有能力识别这些细节问题时,就会完全依赖需求文档开展测试;导致的错误就是丢失真正的需求,对照设计细节进行测试,甚至只测试代码的某些中间变量,而非软件需求要求的最终输出。如果因此质疑测试人员,他们的理由往往是“我们就是按照软件需求测试的”“软件需求规格说明中就是这样写的”。测试人员如此“照猫画虎”,工作辛苦却完全没有成果。
4. 测试方法无效
如果测试人员没有能力开展测试需求分析,还会造成测试方法无效这种严重错误。因为测试人员不掌握针对软件用例规格的基本分析能力,所以选择测试方法时,不是按照“可定量控制测试输入数据,可定量测量测试输出数据”的基本原则设计测试方法,结果是测试内容的对应测试输出预期数据是无法定量的。例如雷达系统的软件测试中,测试人员不知道需要使用定量的射频信号作为目标模拟源,也不知道每个测试结果预期应该是发现目标还是没有发现目标,因此最终是“先出软件实际测试结果,再参考实际结果来填写预期结果”这种本末倒置的测试。
软件测试工作有一个明显的特点,即测试执行工作很容易上手(因此外行往往认为非计算机专业的人经过培训就可以从事软件测试),但测试质量会因为测试需求分析的水平产生巨大差异。而这种测试质量差异又由于软件缺陷的隐蔽性(使用次数、使用时机、使用习惯等)很难在短时间内淋漓尽致地表现出来,因此造成软件测试行业存在一个恶性循环现象:入行门槛低,薪酬水平偏低,测试成果低水平交付;由于屡屡成功低水平交付,产生了“软件测试就是低技能人员所从事的职业”假象,导致很多测评机构没有理由招聘或下功夫培养高水平测试人员。
《软件测试需求分析与设计实践》共8章,组织结构如下。
第1章“概念”重点阐述软件测试需求分析与设计活动中涉及的相关概念。这些概念非常重要,是后续章节描述的方法的基础。
第2章“软件测试活动”介绍面向4种测试对象的测试活动。
第3章“软件测试需求分析”和第4章“测评大纲主要内容”重点阐述软件测试需求分析活动的工作内容和方法,以及这些活动产生的成果的记录形式。
第5章“软件测试设计”和第6章“测试说明主要内容”重点阐述软件测试设计活动的工作内容和方法,以及这些活动产生的成果的记录形式。
第7章“软件测试工作产品质量评价”给出一种软件测试需求分析与设计活动的工作产品的定量评价方法。
第8章“测试需求分析案例”分别以嵌入式软件和非嵌入式软件为例,给出了多个测试需求分析结果的正例和反例。