采访与书摘:“使用C#进行基于模型的软件测试和分析”

2008 年 3 月 13 日

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#”

2008 年 3 月 13 日 00:41 513
用户头像

发布了 109 篇内容, 共 34.9 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

区块链的现象级应用应该什么样子

CECBC区块链专委会

产业落地 政策扶持 区块链革命 价值传递

判断链表相交

GalaxyCreater

算法

硬核干货:葡萄城 SpreadJS 前端表格技术分享

Geek_Willie

Excel SpreadJS 表格控件 表格开发

CDN百科第八期 | 我的网站到底需不需要CDN加速?

巨侠说

网站 CDN 云直播

原创 | 使用JPA全面实现DDD持久化【关于本书】

编程道与术

Java hibernate DDD JDBC jpa

河南省区块链产业联盟成立暨可信区块链技术创新大会启幕

CECBC区块链专委会

可信区块链 提升核心技术 产业联盟 产学研用

什么是数字孪生,它的应用价值在哪里?

华为云开发者社区

AI IoT 数字化 汽车电子 工业互联网

《深度工作》学习笔记(2)

石云升

学习笔记 专注 深度工作

4. JSON字符串是如何被解析的?JsonParser了解一下

YourBatman

Jackson JSON库

将Arch Linux安装到U盘

Kurtis Moxley

Linux 安装操作系统

大厂经验(4):iOS端埋点自动采集技术原理剖析

DeeperMan

ios 前端 数据采集 埋点

判断两个链表是否重合

LEAF

计算机网络基础(十)---网络层-迪杰斯特拉算法

书旅

算法 计算机网络 网络 最短路径

应用开发基础之-数据结构与算法

superman

第四范式自动化推荐系统:搜索协同过滤中的交互函数

天枢数智运营

人工智能 推荐系统 搜索

nginx安装配置(windows)

陈靓-哲露

案例解读:深入理解浏览器的缓存机制

华为云开发者社区

缓存 浏览器 服务器 缓存穿透 华为云

JVM系列之:String.intern的性能

程序那些事

性能 JVM string GC

敏捷开发:一文了解影响地图和用户故事地图之间的那些事儿

华为云开发者社区

产品设计 敏捷开发 后端 地图 开发流程

百万并发「零拷贝」技术系列之Java实现

码农神说

Java 架构 高性能 零拷贝

What's New in Dubbo-go v1.5

apache/dubbo-go

golang dubbo

服务器是什么?其作用及有哪些分类?

德胜网络-阳

服务器

程序员的晚餐 | 7 月 27 日 美味鲫鱼豆腐汤

清远

美食

拒绝贴标签的懒惰

zhoo299

随笔杂谈

【好书推荐】《Python黑魔法指南》-附高清PDF版

华为云开发者社区

Python 开发者 书摘 python3.7 书籍推荐

BIGO技术 | Paxos的工程实践与极致优化

InfoQ_3597a20b53cc

BIGO

BIGO技术 | Paxos的工程实践与极致优化

InfoQ_3597a20b53cc

技术

到底一台服务器能够支持多少TCP并发连接?

南方有乔木兮

极客大学架构师训练营 - 本周总结

Geek_zhangjian

HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第2章HTML基础知识

Geek_8dbdc1

CSS html

区块链在公益慈善行业的应用研究

CECBC区块链专委会

区块链技术 公益组织 治理 数据透明

采访与书摘:“使用C#进行基于模型的软件测试和分析”-InfoQ