软件测试基础与实践
实验报告
实验名称: 白盒测试实验(1)
实验地点:
实验日期:
学生姓名:
学生学号:
东南大学 软件学院 制
一、实验目的
(1)巩固白盒测试知识,能熟练应用控制流覆盖方法设计测试用例;
(2)学习测试用例的书写。
二、实验内容
实验背景:
已知公元1年1月1日是星期一,可实现一个程序,使得只要输入年月日,程序就能自动回答当天是星期几。
现有同学实现上述功能的程序(WeekA),请大家对此程序进行动态白盒测试。
实验1:控制流测试技术实验
运用动态白盒测试方法,分别以语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖方法设计测试用例,对WeekA程序中的方法getWeekday()进行测试。设计测试用例时,每种覆盖方法的覆盖率应尽可能达到100%。
测试用例
publicstaticint getWeekday(int year, int month, int day) {
// 验证输入合法性
1 int[] MonthDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
2 if (((year % 4 == 0) && (year % 100 != 0)) || year % 400 == 0) { <a1,a2,a3>
3 MonthDays[1] = 29;
}
4 if (year < 0 || month < 0 || day < 0) { <c1,c2,c3>
5 return 0;
}
6 if (year > 10000) {
7 return -1;
8 } elseif (month > 12) {
9 return -2;
10 } elseif (day > MonthDays[month - 1]) {
11 return -3;
}
// 开始计算
12 int totalDays = 0;
13 for (int i = 1;
14 i < year;
15 i++) {
16 if (((i % 4 == 0) && (i % 100 != 0)) || i % 400 == 0) { <j1,j2,j3>
17 totalDays += 366;
18 } else {
totalDays += 365;
}
}
19 for (int i = 1;
20 i < month;
21 i++) {
22 if (i == 2) {
23 if (((year % 4 == 0) && (year % 100 != 0)) || year % 400 == 0) { <q1,q2,q3>
24 MonthDays[1] = 29;
}
}
25 totalDays += MonthDays[i - 1];
}
26 totalDays += day;
27 int tempDay = totalDays % 7;
28 if (tempDay == 0) {
29 tempDay = 7;
}
30 return tempDay;
}
流程图:
(一)语句覆盖:
(二)判定覆盖:
(三)条件覆盖、判定条件覆盖、条件组合覆盖
三、实验体会
1、将书面知识应用于测试实践是困难的,因为再实际测试中有很多不同于测试题目的因素
2、白盒测试能基本实现所有语句覆盖和判断条件覆盖,但是有些代码缺陷却无法检查,比如:本实验中的A和Q的判定是完全重复的。
第二篇:软件测试白盒测试实验报告
7.使用白盒测试用例设计方法为下面的程序设计测试用例:
·程序要求:10个铅球中有一个假球(比其他铅球的重量要轻),用天平三次称出假球。
·程序设计思路:第一次使用天平分别称5个球,判断轻的一边有假球;拿出轻的5个球,拿出其中4个称,两边分别放2个球;如果两边同重,则剩下的球为假球;若两边不同重,拿出轻的两个球称第三次,轻的为假球。
【源程序】
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
namespace Test3_7
{
[TestFixture]
public class TestGetMinValue
{
[Test]
public void AddTwoNumbers()
{
Random r = new Random();
int n;
int[] a=new int[10];
n = r.Next(0, 9);
for (int i = 0; i < a.Length; i++)
{
if (i == n)
a[i] = 5;
else
a[i] = 10;
}
GetMin gm = new GetMin();
Assert.AreEqual(n,gm.getMinvalue(a));
}
}
public class GetMin
{
public int getMinvalue(int[] m)
{
double m1 = 0, m2 = 0, m3 = 0, m4 = 0;
for (int i = 0; i < 5; i++)
{
m1 = m1 + m[i];
}
for (int i = 5; i < 10; i++)
{
m2 = m2 + m[i];
}
if (m1 < m2)
{
m3 = m[1] + m[0];
m4 = m[3] + m[4];
if (m3 > m4)
{
if (m[3] > m[4])
return 4;
else
return 3;
}
else if (m3 < m4)
{
if (m[0] > m[1])
return 1;
else
return 0;
}
else
return 2;
}
else
{
m3 = m[5] + m[6];
m4 = m[8] + m[9];
if (m3 < m4)
{
if (m[5] > m[6])
return 6;
else
return 5;
}
else if (m3 > m4)
{
if (m[8] > m[9])
return 9;
else
return 8;
}
else
return 7;
}
}
}
class Program
{ static void Main(string[] args)
{
}
}
}
【运行截图】