时间:2022-08-21 07:10:24
摘要:C/C++程序设计是软件工程专业本科生重要课程,为了更好地让学生学好这门课程,并且能够很好地为后续课程及工作打下良好的基础,把软件测试技术恰当地应用在C++程序设计课程中,能使教学效果提高,能进一步规范学生编程习惯,为促进自己的专业知识打下一定的基础。
关键词:软件测试技术 C++程序设计 教学效果
一、前言
C++程序设计对于软件工程专业的本科生来说,是一门重要的课程,它为后续课程的学习奠定坚实的基础。在多年的教学过程中,笔者发现,如果能有机地把软件测试技术课程的相关内容与该课程结合起来,特别是把软件测试技术中的基本思想贯穿到C++程序设计课程中,则能收到比预期更好的效果。
二、正确认识C++程序设计课程和软件测试技术课程
1.正确认识C++程序设计语言课程
C++程序设计语言是一门软件工程专业的必修课程,是大多数专业课程的先决条件,能否学好这门课程,将会直接影响到学生后续专业课程的学习,也直接影响到今后的程序设计能力。首先,必须要让学生理解程序设计思想;其次,就是要求学生多练习,多写程序;最重要的一点,是要写出好程序,规范的程序,这就要适当考虑把软件测试技术的基本思想渗透进去。
2.正确认识软件测试课程
软件测试的定义:软件测试,就是根据软件开发各阶段的规格说明或程序内部结构精心设计一批测试用例,并利用这些测试用例来运行程序,观察程序的执行的结果,验证该结果是否与预期的一致。简言之,软件测试就是为了发现错误而运行程序的过程。
软件测试的主要方法有黑盒测试和白盒测试,现分别加以说明如下:
(1)黑盒测试。又称功能测试、数据驱动测试、基于规范的测试或基于规格说明的测试。这种方法把被测程序当成一个黑盒,不考虑程序内部结构和内部特性,只关心程序输入和输出之间的关系或程序功能,依靠程序的需求说明或功能规约来确定测试用例和推断程序测试结果的正确性。黑盒测试被用来验证软件功能的正确性和可操作性。
(2)白盒测试。又称结构测试、逻辑驱动测试、基于程序的测试或基于实现的测试。这种方法关注程序的实现细节,考察的重点是其内部的逻辑或代码错误,它常以达到对程序内部结构的某种覆盖为目标。自盒测试的主要依据是程序的控制流图或数据流图,它常被用来分析程序的内部结构以及检测测试的充分性。这两种测试方法从完全不同的起点出发,各有侧重、各有优缺点,构成互补关系。
三、软件测试技术与C++程序设计的结合方法
从C++许多教材可以看出,大多数都是在描述基本语法和简单的程序设计思想,很少重视编程规范与编写安全以及高效的程序代码,对于后者,往往在工作中是非常重要的部分。所以,从学生学习启蒙语言C/C++开始,培养他们的良好的编程规范与编写安全以及高效的代码是非常重要的,不要等到工作以后,已经形成了不好习惯的基础上去重新学习这些。需要培养学生的良好编程规范与编写安全以及高效的代码,可以把软件测试技术渗透到C/C++程序设计教学中,让学生在学习启蒙语言的过程中培养了良好的编程习惯,为以后学习以及工作中打下良好的基础。
1.良好的编程规范
编写程序要多练习,但更重要的是养成好的编程规范,这样自己以后在工作中自然就形成了好的开端。
有哪些编程规范值得注意呢?以下列出常见的几点:
(1)标识符的命名要清晰、明了,有明确的定义,同时,使用完整的单词或大家基本可以理解的缩写,避免使人产生误解.对于变量命名,禁止取单个字符(如i、j、k…),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k做局部循环变量是允许的;
(2)if,else,while,do语句后面必须跟一个语句块,哪怕是空的;
(3)一条语句只定义一个变量,即不要在一条语句定义多个变量,并初始化所有变量;
(4)防止编译器生成默认的构造函数,至少自己要声明一个构造函数;
(5)在混合表达式中,所有的运算符应该应用于相同的数据类型之间。
2.分支结构部分的结合
一般在大部分教材或者教师的常规教学中,只要讲解基本功能的实现就可以了,编程规范以及安全高效的代码基本上是忽略的,在测试用例的基础上进一步让学生更容易理解所讲的知识以及程序结构,所以这并没有浪费时间,所讲的知识不在于多,而在于讲透,让学生听懂,这点是不可否认的。我们分析下例:
#include
using namespace std;
/*根据weekday参数值(0-6)去输出相应(星期日-星期六)*/
voidisWeekday(int weekday)
{
switch(weekday)
{
case 0:cout
case 1:cout
case 2:cout
case 3:cout
case 4:cout
case 5:cout
case 6:cout
default:cout
}
}
int main()
{
isWeekday(0);
isWeekday(1);
isWeekday(2);
isWeekday(3);
isWeekday(4);
isWeekday(5);
isWeekday(6);
isWeekday(16);
isWeekday('a');
isWeekday(-1);
isWeekday(7);
return 0;
}
分析:一般只用0、1、2、3、4、5、6验证就认为可以;上面是结合了黑盒测试技术的等价类划分和边界值分析方法验证过程;有效等价类:0、1、2、3、4、5、6;无效等价类:0~6以外的整数和其他类型的数据(采用了16和’a’);增加边界值分析:-1、7进行验证;通过这样去验证自己的代码更能确定代码的健壮性,同时也帮助了学生更进一步理解算法的实现过程。
3.循环结构程序设计部分的结合
这部分对于初学者来说,是比较难理解的知识点,特别是循环变量的变化过程。可以结合白盒测试技术中的程序插桩方法,在循环体内增加输出循环变量的值以及关键变量办法,从而非常清晰地看到相关变量的值以及变化过程,这种方法很好地帮助学生理解循环结构的语句执行过程,把抽象难理解的知识点通过结合程序插桩技术变得较容易理解,并且加深学生对循环程序结构内部的理解。
4.数组部分的结合
数组操作时离不开循环结构,所以在这部分中,学生也是较难理解的部分。在循环体中怎样处理每个数组元素,为了更好地理解这部分,也可以采用白盒测试技术的程序插桩去清晰地打印出相关的变量值。这部分也是比较容易出现数组下标越界的情况,所以,我们在这部分可以加入针对数组下标的黑盒测试技术边界值分析方法进行检查,进一步训练学生编写较安全的程序代码。
四、小结
本文介绍了软件测试技术和C++程序设计语言课程的特点,为了获得更好的教学效果,适当地把软件测试技术结合到C/C++程序设计语言课程教学中,这里只是简单地列举了几个方法。其实,C/C++的大部分知识点都可以渗透软件测试技术的相关思想及方法。这样,不仅培养了学生的规范编程习惯,而且提高了学生对教学内容上的理解,同时还能培养学生良好的编程规范及编写一定质量的代码,为学生学习后续课程及以后工作打下一定的基础。
参考文献:
[1]Paul C.Jorgensen. Software Testing [M].北京:机械工业出版社,2007.70-168.
[2]朱少民.软件测试方法和技术[M].北京:清华大学出版社,2005.27-58.
[3]徐中伟.软件测试质量的度量[J].计算机工程与应用,2002.