学 生 实 验 报 告
实 验 课 名 称: 软件工程导论
实验项目名称: Search 函数的实现
专 业 名 称: 软件工程
班
学
级:
号:
学 生 姓 名:
教 师 姓 名:
第 4 次上机题目:
请用 VC++设计并实现函数 Search(somearray,size,value),该函数功能为:在一个整数数组
somearray 中搜索一个值为 value 的整数,如果数组中有这个数,则函数值等于这个数的下
标,否则函数值等于-1。数组的长度由参数 size 制定。假设数组的第一个元素的下标为 1。
考察目标:
1、 源代码请按照编程规范来书写;
2、 请选择一种测试技术,对其测试方案进行设计,并执行、完成测试报告。
一、实验名称:Search 函数的实现
二、实验目的与要求:
1.源代码请按照编程规范来书写;
2. 请选择一种测试技术,对其测试方案进行设计,并执行、完成测试报告。
三、实验内容:
1. 实现函数 Search(somearray,size,value);
2. 对函数完成测试;
四、算法描述:
见附录的程序代码。
五、测试描述:
由于 1 问中已经设计出了实现函数的 Search 算法,所以可以采用白盒测试技术;由
于题中描述了该函数的功能,在这里采用黑盒测试技术设计测试它的测试方案
为了用等价划分的方法设计测试方案,首先需要划分输入数据的等价类。根据该函
数的功能,可以把它的输入数据划分成一下等价类:
1. 有效输入的等价类
数组有多个元素,其中一个正整数是所要找的数;
数组有多个元素,其中一个负整数是所要找的数;
数组有多个元素,其中一个 0 是所要找的数;
数组有偶数个元素,其中第一个元素是所要找的数;
数组有偶数个元素,其中中间某一个元素是所要找的数;
数组有偶数个元素,其中最后一个元素是所要找的数;
数组有奇数个元素,其中第一个元素是所要找的数;
数组有奇数个元素,其中中间某一个元素是所要找的数;
数组有奇数个元素,其中最后一个元素是所要找的数;
2. 无效输入的等价类
由于数组的实际长度不一定等于参数 size 的值,为了使用边界分析法设计测试方案,应
该再考虑下述几种边界的情况:
数组长度为 1,其元素是所要找的数;
数组长度为 1,其元素不是所要找的数;
数组的长度为 0,即数组为空,无法进行查找;
3. 根据以上划分的等价类及边界情况,可以设计出下述测试方案:
a) 数组长度为 1,其中正整数元素是所要找的数
输入:somearray={3},size=1,value=3;
预期的输出:1
b) 数组长度为 1,其中负整数元素是所要找的数
输入:somearray={-1}, size=1,value=-1;
预期的输出:1
c) 数组长度为 1,其中 0 是所要找的数
输入:somearray={0}, size=1,value=0;
预期的输出:1
d) 数组长度为 1,其中元素不是所要找的数
输入:somearray={-1}, size=1,value=3;
预期的输出:-1
e) 数组为空,即数组长度为 0
输入:somearray={ }, size=1,value=3
预期的输出:-1
f) 数组有偶数个元素,第一个元素是正整数且是所要找的数
输入:somearray={1,2}, size=2,value=1;
预期的输出:1
g) 数组有偶数个元素,最后一个元素是负整数且是所要找的数
输入:somearray={1,-1}, size=2,value=-1;
预期的输出:2
h) 数组有偶数个元素,其中一个元素 0 是所要找的数
输入:somearray={1,3,0,7}, size=4,value=0;
预期的输出:3
i) 数组有偶数个元素,其中没有所要找的元素
输入:somearray={1,0,3,7}, size=4,value=2;
预期的输出:-1
j) 数组有奇数个元素,第一个元素是正整数且是所要找的数
输入:somearray={1,2,3}, size=2,value=1;
预期的输出:1
k) 数组有奇数个元素,最后一个元素是负整数且是所要找的数
输入:somearray={1,2,-3}, size=3,value=-3;
预期的输出:3
l) 数组有奇数个元素,其中一个元素 0 且是所要找的数
输入:somearray={1,3,0 }, size=3,value=0;
预期的输出:3
m) 数组有奇数个元素,没有所要找的数
输入:somearray={1,3,0 }, size=3,value=2;
预期的输出:-1
n) 数组的实际长度不等于参数 size 的值
输入:somearray={1,2,3,4},size=3,value=2
预期的输出:“无效的 size 值”
六、源程序:
// fourth_title.cpp
#include
#include
#include
using namespace std;
const int MAX_SIZE = 100;
int Search(int somearray[], int size, int value);
bool Integer(string str);
int main()
{
int somearray[MAX_SIZE];
int size(0), value;
string data;
cout << "Please enter the length of the array: ";
cin >> data;
while (!Integer(data) || data[0] == '-')
{
cout << "Input format error, please enter an integer!!\n";
cin >> data;
}
istringstream in(data);
in >> size;
if (size != 0)
{
}
int i;
for (i = 0; i <= size; i++)
{
if (i == size)
{
}
cin >> data;
istringstream in(data);
if (!Integer(data))
{
}
if (i == size)
{
in >> value;
}
else
{
}
in >> somearray[i];
cout << "Please enter the array element: \n";
cout << "Please enter the interger of the find: ";
i--;
cout << "Input format error, please enter an integer!!\n";
continue;
}
cout << "Array: ";
if (size == 0)
{
cout << "Empty";
}
for (i = 0; i < size; i++)
{
cout << somearray[i] << " ";
}
cout << "\nValue: " << value;
cout << "\nFind result: " << Search(somearray, size, value);
return 0;
bool Integer(string str)
{
size_t i;
for (i = 0; i < str.size(); i++)
{
if ( str[0] == '-')
{
i++;
}
if ( str[i] > '9' || str[i] < '0')
{
return 0;
}
}
return 1;
}
}
}
int Search(int somearray[], int size, int value)
{
int j;
for (j = 0; j < size; j++)
{
if (somearray[j] == value)
{
return j+1;
}
}
return -1;
六.运行结果与分析:
通过测试完全达到预期结果;
七.实验中遇到的问题、解决方法及体会:
遇到的问题:处理等效类和无效类时不容易划分,觉得情况多多,就本实验而言,并
没有把浮点型等有容错处理,就此,我们经过讨论,决定递交两份测试方案。
体会,要学好测试,必须把握好有效等价类的划分和无效等价类的划分,以及边界类
的测试等。我觉从实践中真正从另一层次上体会到了实验的重要性,通过实验加深了我对几
种算法和实验原理的了解 ,这比单纯在书本中挣扎中要强好多,实践才是最好的学习方法,给
人以最深的印象,学习变得异常轻松.希望以后能多点上机实验,理论结合实际,我想这是本科
教学的方向,也是大家所希望看到的。