深V专栏 | 朱少民:软件测试的新思考——适应时代的变化
作者:朱少民 2016-11-02 {{allComments.length}} 11127 深V专栏欢迎大家来到我们的深V专栏
深V?哪个V?VIP的V啦~
每期我们都会邀请一位资深专业人士
作为深度VIP专栏作者
与大家分享他们关于测试的经验与思考
本期专栏:朱少民
同济大学软件学院教授
近30年软件测试经验
先后出版了十多部著作
《全程软件测试》、《软件测试方法和技术》等
曾任思科-网讯(中国)QA高级总监
最近一段时间一直在思考“什么是软件测试呢”这个问题。作为一个致力于软件测试工作将近30年的老人,为什么还有疑惑呢?因为现在软件应用环境发生很大变化,软件开发模式也发生天翻地覆的变化,越来越多的软件企业或软件研发团队都在推行敏捷(Agile)、持续交付、DevOps等模式或实践。在今天移动互联、大数据的应用背景下,自己有了新的思考,向测试同仁分享自己对“软件测试”的思考,给出软件测试一个新的公式:
测试=检测+试验
这个公式意味着,软件测试包括两部分工作:检测和试验,但这样说,不容易理解,这个公式需要再丰富一些:
即软件测试包括两部分工作:已知的检测和未知的试验。
已知的部分,是指测试目标、测试需求和测试的验证准则(test oracle,也称测试预言)等都是明确的,也可以理解待测试的功能特性是清楚的,具有良好的可测试性。例如,某些功能在规范的需求规格说明书或其它需求文档中得到清晰的描述,那么这些功能是可以检测(check)的,可以根据文档直接进行验证,判断软件系统中所实现的功能是不是符合之前所定义的需求。在性能测试需求中,如果针对众多的性能指标给出了量化的要求,那么这性能是可以检验的,可以直接验证的。
未知的部分,即测试目标、测试需求和测试预言等是不明确的,也可以理解为产品的功能需求定义不清楚、不稳定的,很难直接进行验证,而是需要通过不断地试验,才能知道所实现的功能特性是否正确。例如,用户故事对需求描述过于简洁,验证就很困难,需要足够的探索和沟通才能搞清楚,才能判断系统的实现满足用户的需求。如果我们开发一个崭新的系统,之前也没有性能指标数据,这是也需要先试验,获得性能指标数据作为性能基准线。
要理解已知的部分和未知的部分,不仅要了解测试的输入具有两重性——确定性和不确定性,特别是在今天这个时代,移动app的用户数量特别大,操作方式、应用环境、喜好也存在较大的差异,增加了测试输入的不确定性;而且测试的输出也具有很大的不确定性,这需要进一步了解各种TestOracle。
需求规格说明书和其它需求、设计规范文档
竞争对手的产品
启发式测试预言(Heuristicoracle)
统计测试预言(Statisticaloracle)
一致性测试预言(Consistencyoracle)
基于模型的测试预言(Model-basedoracle)
人类预言(Humanoracle)
测试过程中,判断测试结果是否通过,TestOracle举足轻重。对于已知的检测,我们会用到测试预言1) 2) 5) 6) (如清晰的Spec、竞品参照、一致性要求、确定性模型等),如下图所示,其中基于模型的语言,也只能是确定性的模型。如果是随机模型、模糊模型,就属于不确定模型。
当我们开始一个软件项目,测试工作也随之开始——进行测试需求分析。这时,我们就可以将测试的范围(测试项)分为两部分:相对稳定的、明确的测试项和不确定的、容易变更的测试内容。针对已知的测试项,比较容易设计测试用例,理论上也基本能百分之百实现自动化。而针对未知的部分,就需要试验、需要探索。只是这种试验或探索,可以由手工来做,也可以由工具来做。测试的风险也往往来自这部分——不确定的测试内容,值得我们特别关注,测试需求分析时分为这两部分就更加有意义。
当Test Oracle属于启发式的,需要综合判断的,这时候就需要手工测试——测试人员的试验,不断质疑系统,获得系统的反馈来做出判断,这就是探索式测试。探索式测试也有测试场景、测试思路的设计,但没有详细的设计——测试用例的设计,但探索式测试能发挥人的创造性、分析能力和思维能力,不断设计、执行、分析、学习、再设计、再执行、再分析、再学习……这样持续改进的测试过程,使测试不断优化,测试的效力不断得到提升,能更快、更多地发现问题。
对于工具的实验,例如一些系统出现崩溃的原因不明,只知道很有可能是异常数据造成的,这时就可以有工具来进行测试,包括产生随机数据来实现测试,或建立一个初步的数据模型,由模糊控制器产生数据、或对正常输入数据直接进行变异数来完成测试,这就是自动的随机测试、模糊测试、变异测试等。这时,可以基于统计准则、或系统异常的表现,来做出判断:是否发现了缺陷,这些方法常常用于系统的安全性测试、稳定性测试等。
未来,随着大数据的积累和技术的成熟、人工智能的发展,这种对未知的测试,可以由人工智能完成,可以兼具上面两种不同方式的优势,不断学习、不断进行数据(输入、输出、log等)挖掘,不断构造、完善验证的推理规则和测试预言,完成自动的测试,从未知逐步走到已知,达到更好的测试效果。下面就以这三层公式的递进作为总结,如下图所示。
原文作者朱教授说,知道(软件测试)得越多,越有一种(对软件测试)敬畏感。之后我们MTC还会联合朱少民教授为大家带来更多测试行业内的更多有启发性的经验分享哦,敬请期待!
朱教授也有自己的公众微信账号,作为软件质量领域的资深人士,愿意分享软件质量管理的经验,包括软件测试的方法、技术与最佳实践,同时及时报道软件质量成功案例、软件中所存在的质量问题,随时回答大家有关软件质量管理与改进等各方面的任何问题。
测试行业中,有这么一群人,他们或是被称为大咖,或是男神女神。他们受人膜拜,令人望尘莫及,他们虽不在江湖,江湖中却总有他们的传说:我有一个朋友.....
你是不是我的那个朋友呢?你是不是也有许多话想和测试圈儿的好友们交流分享?
百度MTC将长期开设深V专栏,有奖征稿
关注我们,查看“福利社”,获得投稿方式~