今天推荐的论文是ISSTA 2021的“Model-Based Testing of Networked Applications“。在本篇论文中,作者为网络应用程序设计了自动化的测试框架。
首先,作者总结了网络应用程序测试的两个挑战:
-
第一类是内部的不确定的性,如下图所示,Etag是客户端进行缓存协商的标签,服务器根据Etag的内容返回页面内容,测试人员需要根据RFC考虑到Etag的所有可能值,编写全面的测试用例,然后对应用程序进行测试。
-
第二类是网络的不确定性,由于网络的时延,发送包和接受包的顺序由于网络的原因,可能会发生改变。
在本篇论文中,作者设计了规范化语言来对描述这些规范,规范以交互树的形式编写:
-
服务器模型(接收消息,发送消息)
-
不确定性网络模型(接受消息1和消息2,但是先发送消息2,后发送消息1)
-
不确定性数据的符号表示(根据Etag的结果,选择是否更新)
接下来,我们看下如何依据网络规范来对网络应用程序做测试。如下图所示,每个方框是一个交互树程序,而箭头是从一个交互树加入另一个交互树的解释器。
图中的每个部分:
-
箭头,用于将交互树加入到另一个交互树中。如下图所示,acc用于发送和接收信息,解释器tee将acc“融入”另一个程序,且在另外的程序中也可以发送和接收消息。
-
将服务器模型转换为观察者模型(Dualizing),为了便于测试,作者将将服务器端事件转为测试事件,如下图所示,当服务器应该发送特定的消息时,则表示测试人员期望接收指定的消息;当接收到意外消息时,拒绝服务器;当服务器应该接收到一些消息时,测试人员生成一条消息并将其发送给服务器。
-
符号分析。如下图所示,通过引入fresh、unify和guard事件,具体处理不确定事件。测试人员通过维护符号变量的约束来检查观测到的(observed)或推测到的(conjectured)值是否与规范匹配。
-
处理传入的连接。在这一部分,作者考虑到了HTTP代理的情况,除了对传入的请求进行处理外,还加入了对传出连接的处理,如上图18-28行所示,对不同链接进行了标识。
-
回溯(Backtracking),符号分析是对观察到的现象与测试者预期的情况进行的匹配,只有当所有预期都不匹配时,才会拒绝服务。因此,在匹配错误时,回溯将切换到另一个可能的分支。
-
测试用例生成。上述框架设计保证了可以在任意节点的程序树上编写测试用例进行测试,如下图所示。
-
网络不确定性模拟。作者通过引入tcp网络模型来模拟网络的延迟,如下图所示,当服务器想在第21行发送一个数据包时,该数据包会被附加到发送缓冲区bo中,只有在第12行数据包被网络吸收,最终才在第7行发送给客户端。
最后,作者利用该框架对指定的一段HTTP/1.1协议的实现进行了测试,该测试器能够捕获到错误的实现,包括在最新版的Apache和Nginx上。
论文PDF:
https://dl.acm.org/doi/pdf/10.1145/3460319.3464798
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 学术论文推荐 2021-07-15
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论