摘 要: 本文通过分析探索式软件测试的优缺点和指挥信息系统软件测试现状, 设计了适用于指挥信息系统软件测试的探索式测试过程的具体方法, 并设计了相应的测试流程。通过使用基于简单脚本的探索式测试方法, 在发挥了探索式测试的优点的同时避免了相应的缺点, 适应了指挥信息系统软件测试的需要, 同时满足了军工软件的管理要求。
关键词: 探索式软件测试; 指挥信息系统; 手工测试; 测试流程;
0 、引言
随着指挥信息系统软件功能越来越复杂和规模越来越庞大, 用户的需求变更也越发频繁, 软件开发模式也在由传统的瀑布模型向更高效的敏捷模式转变, 相应的软件测试模式也需要随之转变。而探索式测试 (Exploratory Testing) 方法具有敏捷测试的特点, 能够在时间短和文档不完善的情况下, 充分发挥测试人员的经验和能力, 快速、高质量完成软件测试[1]。比较适用于测试需求变化快, 事先无法详细设计测试过程, 并且需要大量手工测试的软件项目。利用探索式测试, 能够显着提高软件测试的效率。因此研究探索式测试方法在指挥信息系统软件测试中的应用具有重要的现实意义。
1 、探索式测试
探索式测试方法最早是由美国测试专家Cem Kaner博士在1983年提出的, 它产生之初便赢得了大量的认同, 并且广受推崇[2]。2010年测试专家James A.Whittaker根据其在微软、谷歌等知名企业的工作经历和个人的经验积累, 撰写了《Exploratory Software Testing》 (《探索式软件测试》) 一书。在书中, 他对探索式测试的概念以及测试方法作了更进一步的扩展, 他根据自己的研究, 创新性地提出了全局、局部和混合式等具体的探索式测试方法, 将探索式测试方法的实践应用拓展到更多的领域[3]。经过二十多年的发展, 探索式测试方法已经逐步成型, 并且在越来越多的软件测试项目中发挥了应有的作用。
探索性测试的主要优点在于:充分利用人员经验;适用于需要学习的系统、有时间约束、补充测试等情况;适应性强, 尤其是需求变化、规约不明确情况;对测试人员和开发人员的反馈较快;能够为测试带来新内容, 降低“杀虫剂”效应影响[4]。探索式测试是强调个人自由与责任的测试方法, 让测试人员可以通过不断学习来改善测试规划和测试执行, 而测试执行过程中收集到的信息也可以让测试人员改善测试方法效果。
1.1、 探索式测试与手工测试
手工测试 (Manual Testing) , 通常会使用预先编写好的测试用例。在测试用例中, 会预先设定好测试执行环境, 并指定好各种各样的测试输入值, 同时测试用例还会定义各类输入值情况下的预期测试输出结果。测试将会通过比对实际结测试果与预期结果是否存在差异, 来判断功能是否实现或者是否存在缺陷。不同的测试执行人员, 使用相同测试用例, 很有可能将会得到一样的测试结果, 也因此很可能会导致有问题被遗漏。
Whittaker认为探索式测试是手工测试领域里目前最好的测试技术[3]。它具备了很多手工测试的特点, 但是探索式测试可以完全抛开事先设定好的测试用例, 测试人员可以自由地进行测试, 不受任何约束地去探索软件程序的各种功能[5]。探索式测试并不是说不写文档, 测试结果、测试用例和测试设计等文档, 都会在测试执行的同时创建。
1.2、 探索式测试与自动化测试
自动化测试通过编写代码来测试软件, 自动化测试的根本目的是自动地对软件产品在各种环境和状态下的执行进行测试, 排除影响测试的人为因素, 从而降低花费在测试的开销。自动化测试可以解决手工测试中重复、机械的劳动, 发现手工测试难以发现的极端情况下的问题。
但是自动化测试不能解决所有问题, 自动化测试有其适用的场景, 适用于软件界面和需求变化较小, 需要重复执行的测试活动, 此外对于性能等需要在极端情况下进行测试, 自动化测试更具有优势。而对于目前敏捷开发模式, 需求和软件变化频繁的开发模式则会使测试成本和时间陡增, 并且对于与业务逻辑相关的缺陷, 手工测试也更具优势。
1.3、 探索式测试与脚本测试
脚本测试 (Scripted Testing) 是一种常用的测试组织方法。应用脚本测试的测试设计人员需要事先编写测试脚本, 记录所有的测试用例, 而后测试执行人员手工或者使用自动化测试工具执行脚本, 完成测试任务[6]。脚本测试按照测试需求分析、测试策划、测试设计、测试执行和测试总结的流程进行。
相比脚本测试, 探索式测试显得更自由一些, 它允许测试人员临场发挥, 鼓励测试人员尽可能地发现程序缺陷。探索式测试与脚本测试并非对立, 探索式测试可以和脚本测试很好地结合起来。使用正式的脚本可以为探索式测试提供一个明确的框架范围, 探索式测试可以提高脚本测试的有效性。
1.4、 探索式测试方法的优势与不足
探索式测试方法的优势显而易见。它比传统手工测试更加的高效, 也减少了随机测试的盲目性。探索式测试可以充分发挥测试人员的能动性, 将测试工作变被动为主动, 探索式测试有利于发现与业务逻辑相关的缺陷。同时, 探索式测试方法更适应敏捷开发模式下的需求和软件本身的频繁变更, 同时这也让探索式测试看起来更有技术含量从而深受测试人员的欢迎, 并且比较容易推广。
探索式测试方法的主要缺点有:探索式测试运用不当容易陷入漫无目的的陷阱变成盲目测试和随机测试;测试文档和测试记录的缺乏容易导致对测试用例的重用性降低和测试过程的遗漏或重复;难以确定回归测试的方式。
2 、指挥信息系统软件测试现状分析
2.1、 现状测试流程
目前指挥信息系统软测试一般采用W模型 (如图1所示) , 在W模型中, 对软件项目从开始到结束的各个阶段都有验证与测试环节, 测试的对象不再仅仅是程序本身, 而是扩展到需求、功能和设计。只要完成对应的开发活动, 就可以执行相应的测试, 可以尽早地发现问题。W模型也存在一定的局限性。因为软件开发和测试是一种线性的前后关系, 需要遵从上个阶段明确完成, 下一个阶段才能启动的原则。这样就无法支持迭代、自发性和变更调整, 而这些恰好是目前指挥信息系统开发模型转向敏捷模式需要解决的问题。
图1 W模型
2.2、 存在的主要问题
目前大部分的指挥信息系统软件测试过程, 都使用了W模型。该模型在规范软件测试过程方面发挥了重要的作用, 但是该模型也存在一定的问题。对目前指挥信息系统软件测试流程中的主要问题分析如下:
(1) 由于指挥信息系统庞大而且复杂, 采用传统的测试模型不容易分清楚测试重点;
(2) 测试周期长, 文档要求高, 难以适应敏捷模式下的需求和软件的频繁变更;
(3) 测试前需要事先花费大量时间编写测试用例和相关文档, 测试时间和人力成本高。而且一旦测试需求和测试内容变化, 测试工作中测试用例的实际执行覆盖率偏低, 测试用例的作用不大;
(4) 缺陷提交和修复的时间周期长, 缺陷问题会大量堆积, 不利于缺陷问题的修复和测试流程的运转, 导致最终缺陷修复率偏低。
3、 探索式测试在指挥信息系统测试中应用
由于手工测试依然在指挥信息系统软件测试中占有重要的地位, 因此, 如何避免在应用探索式测试方法过程中的盲目性和随机性, 提高探索式测试的覆盖率和重用率;如何提升软件缺陷问题的修复率;如何在实现快速测试的同时保证测试的高效率。这些都是在指挥信息系统软件测试过程应用探索式测试方法需要研究和解决的问题。
3.1、 基于简单脚本的探索式测试的应用
正如Whittaker在其书中提出:没有必要把探索式测试与使用脚本的测试对立起来, 也没有必要认为两者不能共存[3]。同时使用两种方法时可以正式脚本开始, 然后再使用探索式测试法在脚本中加入各种各样的变化。这样, 单一地测试脚本会演化出很多探索式测试用例。基于这样的理论和指挥信息系统软件测试的实践, 设计了将探索式测试和简单脚本相结合的实践方法。从而达到结合两种方法优势并且避免缺点的目的。
对于简单脚本可以使用表格或思维导图工具来描述测试的指导思想。思维导图是英国心理学家东尼博赞在20世纪60年代发明的思维工具, 是为了改进线性笔记的不足而发明的一种非线性思维工具[7]。思维导图工具适合用来表达发散性思维, 将发散性思维形象化, XMind是目前比较流行的思维导图工具。具体实践中可以使用XMind工具在局部探索式测试时, 思考需要测试的内容并且适当记录测试结果, 可以避免测试重复和遗漏, 如图2。
使用基于场景的混合测试时, 可以使用XMind工具设计场景, 并适当记录测试结果。图3列举了一个在指挥信息系统测试中应用。
图2 局部探索式测试
图3 基于场景的探索式测试
3.2、实施探索式测试的流程
针对指挥信息系统软件测试的特点和探索式软件测试的特点, 设计了探索式测试实施的流程如图4所示。
图4 探索式测试实施流程
在测试开始阶段先明确测试目标, 决定何时测试和需求测试什么, 然后进行简单脚本设计决定如何测试, 根据测试目标和简单脚本进行测试执行, 完成测试执行后进行测试分析, 同时待开发人员完成缺陷修改后进行回归测试, 完成回归测试后完成本轮测试。然后进入下一轮迭代。该测试流程有利于达成既定的测试目标, 同时能够尽可能发现问题, 并适应敏捷开发的流程。同时由于有简单的脚本设计和测试记录, 也便于测试完成后相应测试文档的编写, 以满足军工软件相关标准对文档的要求。
4、 结论
通过在指挥信息系统测试中使用探索式测试方法的实践, 在测试中引入了简单脚本并使用思维导图工具作为辅助, 避免了探索式测试中的无目的性和盲目性, 同时能够满足相关军工软件的相关管理的要求, 有利于提高测试效率进而使测试人员发现更多测试问题, 同时也适应了当前指挥信息系统软件从传统开发模式转向敏捷模式的趋势。
参考文献
[1]柳溪.探索式测试在雷达软件中的应用研究[J].现代雷达, 2016, 38 (9) :86-91.
[2]林炜.两种软件测试方法的比较和改进[J].信息网络安全, 2012 (7) :58-60.
[3]James A.Whittaker着, 方敏等译, 探索式软件测试[M]清华大学出版社, 2010.
[4]柳溪, 马康, 刘智.融合探索性与脚本方法的第三方软件测试模型及其应用[J].信息化研究, 2013, 39 (6) :43-48.
[5]王志森.探索式测试方法在网络游戏软件测试中的应用[D].上海:上海交通大学, 2011.
[6] 杨晓光.探索式测试在敏捷软件项目安全性测试中的应用研究[D].天津:天津工业大学, 2015.
[7]尚洁, 李春雷.快速迭代开发模式下系统测试方法[J].指挥信息系统与技术, 2017, 8 (3) :93-98.