软件测试技术(六)——白盒测试之控制流覆盖准则+Visual Studio 2013单元测试
一、目标程序
单片机发送的A/D转换结果的整体格式为:[DLE][STX]Message[CHKSUM][DLE][ETX],其中[]括号中的字符为16进制的助记符,并非ASCII码。其中:[DLE]=0x10, [STX]=0x02, [ETX]=0x03。Message: 为AD转换结果+1个字节的ChkSum,Message长度最大为100字节。其中AD转换结果为16进制的传感器数据。例如:x=(1023)D=0x3FF,y=0x201,z=0x301,a=0x3D5,b=0x1A5,则单片机应发送的Message字节内容(big endian模式)应该是{0x03,0xFF ,0x02, 0x01, 0x03, 0x01, 0x03, 0xD5, 0x01, 0xA5,0x70},其中ChkSum为message的其他数据的XOR(异或)并bit取反的结果,即发送的16进制数据为[DLE][STX] 03FF0201030103D501A570[DLE][ETX]。因Message中没有[DLE](即0x10)出现,因此发送的数据是和AD结果一致。但是由于16进制的Message中有可能出现与[DLE][STX]或[DLE][ETX]相同的内容,如果不进行一定的处理,上位机将无法辨认数据包的开始与结束,此时需要使用Byte Stuffing的处理方式将Message的内容进行调整,以便区别于数据包的开始与结束。这里Byte Stuffing的处理方法是,如果 Message中出现[DLE]即0x10的数值则在传送此0x10之前插入一个[DLE]即0x10。ChkSum计算时不包括多插入[DLE]。例如,数据x=0x3FF, y=0x210, z=0x301, a=0x3D5, b=0x1A5, 则单片机应发送的Message的内容应该是{0x03 0xFF 0x02 [DLE] 0x10 0x03 0x01 0x03 0xD5 0x01 0xA5 0x70 },即在Message中要插入相应的[DLE]字符。如果ChkSum也正好是[DLE]时,则也需要进行Byte Stuffing的处理。
Byte Stuffing的发送数据处理流程如图6-13 所示。可以根据此流程图编写单片机在MH模式下发送数据的处理函数。而在上位机接收数据时,需要将Message中的信息进行Byte De-Stuffing,即去掉单片机发送过程中插入的[DLE]。
单片机发送数据时的程序流程图
二、方法介绍:控制流覆盖准则
常见的覆盖方法有
- 语句覆盖,设计若干测试用例,使每条语句至少被执行一次
- 分支覆盖,每个判定每个分支至少有一次为真一次为假
- 谓词覆盖,判定中每个条件的可能取值至少满足一次
- 路径覆盖,包含所有完整路径(如果P=e1e2…eq是一条路径,且满足H(e1)=Start,T(eq)=End,则P称为完整路径)
针对目标程序每个判定条件没有前后关系,并不会互相影响,我采用了分支覆盖准则。
三、有向图
四、测试用例
|
编号 |
输入 |
谓词 |
NODE(LT) |
期望输出 |
实际输出 |
|---|---|---|---|---|---|
|
S,1,2,3,4,8,9,10,11,12,E |
不可达到 |
||||
|
1 |
Null |
Message结束;;ChkSum==0 |
S,1,2,3,4,8,10,11,12,E |
1002001003 |
1002001003 |
|
2 |
0528 |
Message未结束;数据非DLE;Message未结束;数据为DLE;Meaasge结束;ChkSum非DLE |
S,1,2,3,4,5,6,7,4,5,7,4,8,9,10,11,E |
1002021010121003 |
1002021010121003 |
五、使用VS进行函数功能的实现并进行单元测试
进行单元测试时,出现了问题。我一开始是直接写了一个win8 app中MainPage下的函数,发现在Test中找不到,将private改为public之后可以找到了,但是会发生 “应用程序调用一个已为另一线程整理的接口”错误,之后我看了一下Microsoft提供的参考,将Byte stuffing封装到了一个类中,之后就可以了。
Byte stuffing关键代码
{
int GETNUM = 4;
int BUFFER_LEN_LOD = 100;
string RS232_DLE = "10";
string RS232_STX = "02";
string RS232_ETX = "03";
public Byte_stuffing()
{
}
public string out_Byte_Stuffing(string input)
{
try
{
string output = null;
output += RS232_DLE;
output += RS232_STX;
int chksum = 0;
for (int start = 0; start < input.Length; start += 4)
{
string handle = null;
if (start + 4 < input.Length)
{
handle = input.Substring(start, 4);
}
else
{
handle = input.Substring(start, input.Length - start);
}
string incoming = int.Parse(handle).ToString("x");
//return incoming;
if (incoming.Length < 4)
{
string insert = null;
for (int i = 0; i < 4 - incoming.Length; i++)
{
insert += "0";
}
incoming = insert + incoming;
}
if (incoming.Substring(0, 2).Equals(RS232_DLE))
{
output += RS232_DLE;
}
//return incoming;
output += incoming.Substring(0, 2);
chksum ^= int.Parse(incoming.Substring(0, 2));
//return incoming;
if (incoming.Substring(2, 2).Equals(RS232_DLE))
{
output += RS232_DLE;
}
output += incoming.Substring(2, 2);
//return incoming;
chksum ^= Convert.ToInt32(incoming.Substring(2, 2), 16);
}
string chk = chksum.ToString("x");
if (chksum.ToString("x").Length < 2)
{
string insert = null;
for (int i = 0; i < 2 - chksum.ToString("x").Length; i++)
{
insert += "0";
}
chk = insert + chksum.ToString("x");
}
if (chk.Equals(RS232_DLE))
{
output += RS232_DLE;
}
output += chk;
output += RS232_DLE;
output += RS232_ETX;
return output;
}
catch (Exception ex)
{
return ex.StackTrace;
}
}
}
//
软件测试技术(六)——白盒测试之控制流覆盖准则+Visual Studio 2013单元测试的更多相关文章
- 软件测试技术lab2——Selenium上机实验
Selenium上机实验说明 1.安装SeleniumIDE插件 2.学会使用SeleniumIDE录制脚本和导出脚本 3.访问http://121.193.130.195:8080/使用学号登录系统 ...
- [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git
[.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...
- 从Visual Studio看微软20年技术变迁
前言 这个世界从来都不缺变革,从工业革命到晶体管和集成电路,从生活电器到物联网,从简陋人机到精致体验,我们在享受技术带来的便捷的同时,也在为复杂设计而带来的挑战和生产力下降而痛并快乐着.而迫切期盼的, ...
- paper 27 :图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)
1. 早期C. Koch与S. Ullman的研究工作. 他们提出了非常有影响力的生物启发模型. C. Koch and S. Ullman . Shifts in selective visual ...
- 使用Visual Studio Team Services敏捷规划和项目组合管理(六)——VSTS仪表盘的使用
使用Visual Studio Team Services敏捷规划和项目组合管理(六)--VSTS仪表盘的使用 仪表盘使团队能够看到项目的状态和监控项目的进展.简单来说,不必深入到团队项目站点的其他部 ...
- 带你玩转Visual Studio——带你理解微软的预编译头技术
原文地址:http://blog.csdn.net/luoweifu/article/details/49010627 不陌生的stdafx.h 还记得带你玩转Visual Studio——带你新建一 ...
- visual studio 2017 installer 安装包制作过程出现的问题---无法注册模块 HRESULT -2147024769 请与您的技术支持人员联系
使用visual studio 2017 installer制作打包程序时如果用到了外部控件需要按以下方式操作: 1.将应用程序及应用程序所用到的所有DLL拷贝到打包目录,加入打包程序之中. 2.将应 ...
- 本周ASP.NET英文技术文章推荐[02/03 - 02/16]:MVC、Visual Studio 2008、安全性、性能、LINQ to JavaScript、jQuery...
摘要 继续坚持,继续推荐.本期共有9篇文章: 最新的ASP.NET MVC框架开发计划 Visual Studio 2008 Web开发相关的Hotfix发布 ASP.NET安全性教程系列 ASP.N ...
- 全流程指导Visual Studio Code+Markdown Nice+gitee+PicGo管理自己的技术博客文章
全流程指导Visual Studio Code+Markdown Nice+gitee+PicGo管理自己的技术博客 1.背景 我挺喜欢写博客,但每一次将博客转移到公众号或者知乎,总是需要调整格式,不 ...
随机推荐
- intellij idea 12、13 win8 下 中文输入覆盖的问题(搜狗输入法或者其他输入法)
最近升级到idea12,发现中文输入存在问题,输入中文的时候会出现空格,并且覆盖后面的字符,这个问题让我很郁闷. 假设idea的安装位置为:D:\Program Files\JetBrains\Int ...
- Thread的第五天学习
1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如:卖票系统就可以这么做! package com.thread.demo; publi ...
- [2-sat]HDOJ3062 Party
中文题 题意略 学2-sat啦啦啦 2-sat就是 矛盾的 ($x.x’$不能同时取) m对人 相互也有限制条件 取出其中n个人 也有可能是把一件东西分成 取/不取 相矛盾的两种情况 (那就要拆 ...
- P1026 犁田机器人
P1026 犁田机器人 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT 09 2ND 描述 Farmer John為了让自己从无穷无尽的犁 ...
- Java IDE 编辑器 --- IntelliJ IDEA 进阶篇 生成 hibernate 实体与映射文件
原文:转:Java IDE 编辑器 --- IntelliJ IDEA 进阶篇 生成 hibernate 实体与映射文件 2011-04-30 12:50 很多人不知道怎么用 IntelliJ IDE ...
- linux 显示当前用户信息
1.w命令 2.who命令 3.who am i 4. users
- 门面(Facade)模式(转)
转载:http://www.cnblogs.com/skywang/articles/1375447.html 外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式. ...
- Linux使用者管理(1)---用户账号
linux很重要的应用就是作为服务器的操作系统.服务器的作用是给多用户提供各种“服务”(可能是读服务器上的文件,或者是利用服务器进行数值计算)那么如果多用户共同拥有一台服务器,就需要对服务器上的用户进 ...
- C#基础(四)
语句 到目前为止,我们的程序还只能按照编写的顺序执行,中途不能发生任何变化 ...
- nand flash 扇区的管理以及初始化
(1)首先需要了解NAND FLASH的结构.如图: 以镁光MT29F4G08BxB Nand Flash为例,这款Flash(如上图)以4个扇区(sector)组成1个页(page),64个页(pa ...