InfoQ 有幸对《Model Based Software Testing and Analysis with C#》“使用 C#进行基于模型的软件测试和分析”一书的四位作者 Jonathan Jacky, Margus Veanes, Colin Campbell 和 Wolfram Schulte 进行了一次采访,回答了我们收集的相关问题。他们的著作最近由剑桥大学出版社出版,同时,出版社为 InfoQ 提供了第1 章“描述、分析、测试”的试读。
InfoQ:你们创作本书的目的是什么?
作者:我们希望通过详尽而实用的方式为基于模型的测试提供最新的信息,基于模型的测试方法在微软内部已经成功地得到了应用。我们同时也希望为教育界人士提供这方面的资源,使得他们可以在课堂上讲授基于模型的测试方法,因为我们相信本书所能起到的推广作用还远远不够。
使用模型编程与状态间隔探测的思想对于以软件黑盒测试技术为基础的有限状态机是一种自然的扩充。
本书使得这一思想能够被广泛的读者群所接受。
InfoQ:基于模型的测试与单元测试的区别是什么?
作者:顾名思义,单元测试就在一个时间内对一个单元进行测试。基于模型的测试则通常用于测试组件之间的交互。例如,在你测试协议的互操作性时,基于模型的测试就非常有效。在对协议进行测试时,你不必描述协议实现的结构,但是如果采取黑盒方式,则需要描述发送者与接收者之间的通信方式。
基于模型的测试是单元测试的有力补充。它有助于暴露那些只有在多个单元放在一起才会呈现的错误。
InfoQ:什么是基于模型的分析?
作者:基于模型的分析使用了一个模型程序——一种可执行的规格说明书——去检测规格说明或者设计,例如包含了对通信协议的检测。既然模型是可执行的,它就可以在实现可用之前被检测,这就可以节省时间,避免令人沮丧地付出高昂代价而返工重来。
基于模型的分析包括安全分析(检测那些永远不会发生的安全隐患)和活性分析(检测那些最终会发生的有效内容)。这与我们所知道的模型检测相似。
InfoQ:根据你们的经验,最难以测试的场景是什么?
作者:非确定(分布式)系统。即使按照可控制的相同顺序输入,也会导致多种可能的有效可观测输出结果。在这种情况下,只运行一个测试很难重现,相同的测试用例可能会偶然地暴露出一个 bug。而且,它也很难衡量测试覆盖率,也无法获知停止测试的时间。
通过一个模型在运行中进行测试,可以提供处理这一问题的方法。
InfoQ:在测试代码时,开发人员最容易犯下的错误是什么?
作者:忽略对边界 / 不可预知情形的测试,以及忽略对方法调用内部的测试是最常见的错误。另外一种常见错误是忽略了对与其他代码进行交互的测试,这种与其他代码交互所导致的问题,在对代码进行单独测试时是无法呈现出来的。这是缺乏明确的职责条例所造成的,开发人员和测试人员应该是一个整体,而不是各司其职。
另外一种常见错误则源于测试套件的整体偏差,忽略了对测试人员没有考虑到的场景的测试,或者认为这些场景是不重要的。根据一个模型自动生成测试可以纠正某些偏差。
查看英文原文: Interview and Book Excerpt: “Model Based Software Testing and Analysis with C#”
评论