软件测试课程设计.docx
《软件测试课程设计.docx》由会员分享,可在线阅读,更多相关《软件测试课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
![软件测试课程设计.docx](https://file1.bdocx.com/fileroot1/2023-6/2/9bd44f8c-8f45-4ebb-beb6-d3efade8bbf3/9bd44f8c-8f45-4ebb-beb6-d3efade8bbf31.gif)
软件测试课程设计
@@@@大学
课程设计说明书
课程名称软件测试技术课程设计
题目CppCheck测试
院系信息工程学院
班级计科131
学生姓名
指导教师
日期2016.7.5
课程设计任务书
课程设计题目
CppCheck测试
姓名
学号
1
专业班级
计算机
组别
组长
同组成员
指导
教师
课程设计目的
通过本课程设计,深刻理解和掌握软件测试的基本方法、基本技术和常用测试工具,熟练掌握测试用例的设计,同时进一步提高学生对于复杂程序的编写能力,为学生将来从事实际软件测试工作和进一步深入研究打下坚实的理论基础和实践基础。
课程设计环境
硬件:
装有windows操作系统的计算机
软件:
CppCheck
课程设计任务和要求
任务要求:
1.理解CPPCheck软件的基本功能和特征;
2.掌握软件测试方法在CPPCheck测试中的运用;
3.完成CPPCheck相关任务模块测试用例的设计;
4.实现CPPCheck的核心功能的测试;
5.撰写测试CPPCheck软件的相关文档;
6.撰写出符合要求的课程设计报告。
参考
文献
1.郑人杰,软件测试技术,清华大学出版社
2.徐仁佐,软件可靠性技术,清华大学出版社
3.林宁、孟庆余,软件测试使用指南,清华大学出版社
4.古乐、史九林,软件测试技术概论,清华大学出版社
时间进度安排
序号
起止日期
工作内容
1
5.4
学生熟悉题目背景,选题
2
5.5-6.3
CppCheck测试需求分析
3
6.4-6.9
CppCheck测试设计
4
6.10-6.15
CppCheck测试
5
6.16-6.22
撰写上交课程设计报告
任课教师:
时间:
2016.7.5
一.任务的描述1
1.1目标1
1.2测试对象介绍:
1
1.2.1概述:
1
1.2.2介绍:
2
1.2.3基本使用:
2
1.2.4高级使用:
2
1.4.运行环境:
5
1.5.条件与限制:
5
二.测试设计5
2.1测试阶段的选择:
5
2.1.1单元测试5
2.1.2集成测试7
2.1.3系统测试(SystemTesting):
7
2.2测试方法的选择:
7
2.3选择工具:
8
2.4设计测试用例:
9
2.4.1静态测试9
三.测试执行和结果10
3.1白盒测试10
3.2黑盒测试16
四.测试的结果19
五.感想认识20
六.参考文献21
课程设计报告文档
一.任务的描述
1.1目标
测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。
应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。
信息系统测试应包括软件测试、硬件测试和网络测试。
硬件测试、网络测试可以根据具体的性能指标来进行,此处所说的测试更多的是指软件测试。
一是对质量或可接受性做出判断:
通过测试给出所测系统总体质量现状,譬如满足工件的出入口标准,达到发布要求,遗留缺陷或者风险
二是发现问题,而且尽可能早一些,并确保其得以修复:
目的是要发现问题,就需要使用不同的方法类型进行测试,尽可能早的发现问题,就是尽快的参与测试,并提高测试的效率和有效性,使严重的问题尽早被发现;确保缺陷得以修复,需要说明的是不是所有的缺陷都可以被修复的,那么我们要在提交缺陷单的时候自己首先已经有一个尺度,哪些是必须解决的,哪些是有时间可以解决的,那些是可以推迟到下个版本,哪些是无法解决但是要提出来的,跟自己的团队磨合久了,测试人员心理这个尺度应该是很清楚的,再则就是注意与开发之间的沟通技巧和专业度,特别在国内团队,随意性比较大,某个缺陷的解决很可能是因为开发心情好或者跟开发者交情好,或者开发觉得你够专业。
三是改进测试过程或者软件开发过程:
通过测试,对一些测试数据的度量和报告,对团队合作上一些问题的发现和总结,可以反过来为测试过程和开发过程的改进提供依据,从而促进团队朝着更积极有效的方向发展。
总之要做到以最少的人力、物力、时间找出软件潜在的错误和缺陷。
1.2测试对象介绍:
1.2.1概述:
Cppcheck是一种C/C++代码缺陷静态检查工具。
不同于C/C++编译器及其它分析工具,Cppcheck只检查编译器检查不出来的bug,不检查语法错误。
1.2.2介绍:
cppcheck是一个静态代码检查工具,支持c,c++代码;作为编译器的一种补充检查,cppcheck对产品的源代码执行严格的逻辑检查。
执行的检查包括:
1.自动变量检查
2.数组的边界检查
3.class类检查
4.过期的函数,废弃函数调用检查
5.异常内存使用,释放检查
6.内存泄漏检查,主要是通过内存引用指针
7.操作系统资源释放检查,中断,文件描述符等
8.异常STL函数使用检查
9.代码格式错误,以及性能因素检查
1.2.3基本使用:
首先下载安装,例如我的是安装在 C:
\Cpptest\Cppcheck目录下,要使用它必须先转到该路径下:
1.检查一个文件:
cppcheck[filepath]
例如,我检查一个file1.c的文件代码,在命令工具中可以输入:
D:
\Cpptest\Cppcheck>cppcheckfile1.c来审查。
2.检查一个文件夹中的所有文件:
cppcheck[filspath]
例如,我检查files文件下的所有文件:
C:
\Cpptest\Cppcheck>cppcheckfiles
3.格式化输出内容格式:
C:
\Cpptest\Cppcheck>cppcheck--enable=all--template=vsC:
\files.c2>C:
\Cpptest\err.txt
--template=vs就是指定以vs这种格式输出,还可以自定义输出格式,
1.2.4高级使用:
1.xml输出
a.使用方式:
cppcheck--xml-version=2foo.cpp
b.error的组成元素:
id:
error的id
severity:
error的性质(error、warning......)
msg:
error的具体信息(短格式)
verbose:
error的信息(长格式)
c.location的组成元素:
file:
含有相对或者绝对路径的文件名
line:
行数
msg:
消息描述
2.改良输出结果
cppcheck--template=vspath(VisualStudio兼容模式)
cppcheck--template=gccpath(Gcc兼容模式)
cppcheck--template={"{file},{line},{severity},{id},{message}"}
3.输出过滤器(选特定的错误信息输出)
命令行模式:
cppcheck--suppress=memleak:
src/file1.cppsrc/
使用文件模式(将过滤规则存到文件中)
cppcheck--suppressionssuppressions.txtsrc/
1.3.任务描述:
1.理解CPPCheck软件的基本功能和特征;
2.掌握软件测试方法在CPPCheck测试中的运用;
3.完成CPPCheck相关任务模块测试用例的设计;
4.实现CPPCheck的核心功能的测试;
5.撰写测试CPPCheck软件的相关文档;
6.撰写出符合要求的课程设计报告。
cppcheck系统结构图:
1.4.运行环境:
硬件:
装有windows操作系统的计算机
测试工具:
CppCheckQuickTestProfessionalVC++6.0
1.5.条件与限制:
条件:
被测试代码的路径必须是全英文,内存要动态分配
限制:
只能执行C/C++源代码,该软件只能进行静态检测
二.测试设计
2.1测试阶段的选择:
2.1.1单元测试
(1)定义:
单元测试(又称为模块测试)是针对程序模块软件设计的最小单位)来进行正确性检验的测试工作。
程序单元是应用的最小可测试部件。
在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
(2)单元测试任务包括:
1.模块接口测试;
2.模块局部数据结构测试;
3.模块边界条件测试;
4.模块中所有独立执行通路测试;
5.模块的各条错误处理通路测试。
1、单元的基本属性:
1.明确的功能
2.可定义的规格
3.与其他单元接口的清晰划分
2、单元测试的目的:
在于发现各模块内部可能存在的各种错误,主要是基于白盒测试。
1.验证代码是与设计相符合的;
2.发现设计和需求中存在的错误;
3.发现在编码过程中引入的错误。
(和设计不相符或和设计相符,但是由于
编码疏漏引起)
3、单元测试关注的重点:
1.出错处理、
2.单元接口、
3.局部数据结构、
4.独立路径、
5.边界条件
4、单元测试的主要关注点:
1.参数的属性、顺序、个数是否与LLD一致
2.不能修改只做输入用的形参,否则可能导致数据的错误修改
3.约束条件是否通过形参来传送
5、驱动和桩的功能:
1.驱动单元:
被测函数的主函数,能接受输入数据,输出实际测试结果
2.桩单元:
用来代替所测单元调用的子单元
6、单元测试策略:
孤立的测试策略、自顶向下、自底向上的单元测试策略
1)孤立的测试策略:
·方法:
不考虑每个模块与其他模块之间的关系,为每个模块设计桩模块和驱动模块。
每个模块进行独立的单元测试。
·优点:
该方法是最简单,最容易操作的。
可以达到高的结构覆盖率。
该方法是纯粹的单元测试。
·缺点:
桩函数和驱动函数工作量很大,效率低。
2)自顶向下的单元测试策略:
·方法:
先对最顶层的单元进行测试,把顶层所调用的单元做成桩模块。
其次对第二层进行测试,使用上面已测试的单元做驱动模块。
如此类推直到测试完所有模块。
·优点:
可以节省驱动函数的开发工作量,测试效率较高。
·缺点:
随着被测单元一个一个被加入,测试过程将变得越来越复杂,并且开发和维护的成本将增加。
3)自底向上的单元测试策略:
·方法:
先对模块调用层次图上最低层的模块进行单元测试,模拟调用该模
块的模块做驱动模块。
然后再对上面一层做单元测试,用下面已被
测试过的模块做桩模块。
以此类推,直到测试完所有模块。
·优点:
可以节省桩函数的开发工作量,测试效率较高。
·缺点:
不是纯粹的单元测试,底层函数的测试质量对上层函数的测试将产
生很大的影响。
4、单元测试的四个阶段:
·测试计划:
完成单元测试计划;
·测试设计:
完成单元测试方案;
·测试实现:
完成单元测试用例、单元测试规程、单元测试脚本及数据文件;
·测试执行:
执行单元测试用例,修改发现的问题并进行回归测试,提交单元测试报告。
2.1.2集成测试
1.集成测试的目的:
确保各组件组合在一起后能够按照既定意图写作运行,并确保增量的行为正确(属于灰盒测试)
1)验证接口是否与设计相符
2)发现设计和需求中存在的错误
2.集成测试关注的重点:
单元间的接口、集成后的功能
3.集成测试的层次:
模块内集成、子系统内集成、子系统间集成
4.集成测试策略:
1)大爆炸集成
2)自顶向下集成
3)自底向上集成
4)三明治(混合式)集成
5)基干集成
6)分层集成
7)基于功能的集成
8)基于消息的集成
9)基于进度的集成
10)基于风险的集成
2.1.3系统测试(SystemTesting):
系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。
系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。
1.系统测试目的:
1)通过与需求做比较,发现与系统定义不符合或与之矛盾的地方
2)系统测试的用例应根据需求分析说明书来设计,并在实际使用环境下运行
2.系统测试对象
1)软硬件集合在一起的系统
2)验证时应尽可能模拟实际的运行环境与条件
3.系统测试常用类型:
功能、性能、压力、容量、安全性、GUI、可用性、安装、配置、异常(恢复性)、备份、健壮性、文档、在线帮助、网络、稳定性测试
2.2测试方法的选择:
同行评审的概念:
同行评分是一种依据程序整体质量,可维护性、可扩展性、易用性和清晰性对匿名的程序进行技术评价的技术。
改技术的目的是为程序员提供自我评价的手段。
2、实施过程:
选出一名程序员来担任这个评分过程的管理员,管理员又会挑选出大约2~20名参与者,保持匿名,这些参与者否应具有相似的背景要求每名参与者都挑选出两个由自己编写的程序以供评审。
其中的一个程序应是参与者自认为能代表其自身能力的最好的作品,而了另一个则是参与者自认为质量较差的作品。
当所有程序都收集完毕后,就将这些程序随即分发给参与者。
没名参与者拿到4个程序进行评审,其中的两个是“最好”的程序,另外两个则是相对“较差”的程序,单评审人自己并不知道。
每名参与者没评审一个程序得花费30分钟,评审完后填写一张评价表。
所有4个程序都评审完后,参与者对4个程序的相对质量进行分级。
评价表要求评审人用从1~7的分值对诸如下面的问题进行回答:
1)程序是够易于理解?
2)高层次的设计是够可见且合理?
3)低层次的设计是否可见且合理?
4)修改此程序对评审者而言是否容易?
5)评审者是否会以编写出该程序而骄傲?
还要要求评审人给出总的评价和建议的改进意见。
评审结束后,参与者会收到自己的那两个程序的匿名评价爱表,此外还会收到一个带统计的总结,说明在所有的程序中其程序的整体和具体得分情况,以及他对其他程序的评价爱与其他评审人同意程序打分的比较分析情况。
评审目的:
让程序员对自身的编程技术进行自我评价。
2.3选择工具:
请描述用QTP(QuickTestProfessional)进行功能测试的步骤:
1.创建测试或建组首先通过在应用程序或网站上录制会话,活着建立对象库并使用关键字驱动功能向关键字视图中手动添加步骤来创建测试或组件。
在QTP里面我们可以通过两种方式添加步骤来创建测试或组件:
在应用程序或网站上录制会话。
建立对象库并使用这些对象在关键字视图或专家视图中手动添加步骤然后在测试或组件中插入检查点,检查页面、对象或文本字符串中的特定值或特征,通过它可以表示网站或应用程序是否正常运行。
2.运行测试和组建控制运行会话,帮助标识和消除测试或组件中的缺陷。
使用“单步执行”、“单步跳过”和“单步退出”命令逐步运行测试或组件,或设置断点使测试或组件在预订点暂停。
3.分析结果在运行测试或组件之后,通过两种方式可以查看其结果:
在“结果”窗口中查看;自动报告在运行对话过程中检测到的缺陷,可能的话并上报到其他缺陷管理产品中。
2.4设计测试用例:
2.4.1静态测试
测试计划、测试人员、测试方式和测试结果
1、进度/工作量度量
任务
计划开始
计划结束
实际开始
实际结束
工作量(人时)
测试计划与设计
2016-6-10
2016-6-22
2016-6-8
2016-6-20
4
测试执行
2016-6-12
2016-6-22
2016-6-13
2016-6-20
4
测试总结
2016-6-20
2016-6-22
2016-6-20
2016-6-22
4
(1)代码审查:
代码审查是通过代码走读的方式来实现的。
(2)代码走读是开发人员在对某个模块的代码(必须编译通过)依据设计说明书完成编码后,进行的代码评审活动。
代码走读前要在内部统一标准,明确质量目标。
评审中,除了看编码是否紧扣设计外,走读还应兼顾三个层面:
第一个层可称之为单元走读,关注的是“单元”,一般是一个方法或一个类,需要查找代码层面的错误,比如数据库网络资源的回收、一些异常的捕捉、空指针的检查及关键字的使用是否正确等;第二个层面可称之为集成走读,关注的是接口和流程,包括传人的参数检查、返回值检查及流程能否顺利地进行和正确串联等;第三个层面可称之为系统走读,关注的是功能层面和业务逻辑,这时发现更多的应该是逻辑错误和功能缺陷。
当然,在走读过程中这三个层面不是截然分开的,很多时候是并行的、互相交织和渗透的。
代码走读的另一个重要内容是看代码是否遵守编程规范引,是否具有可读性和可维护性,注释是否充足等。
按编程规范编码对提高代码的可读性以及降低编码的出错率至关重要,在大型项目中,具备可读性、规范性的代码更是日后进行有效维护的保障。
因此,代码走读不仅可以保证代码的质量,更能有效地促进整个项目的编码水平。
(3)代码走读:
代码检查是通过桌面检查、走查方式和代码审查进行的检查:
包括:
★检查代码和设计是否一致;
★代码是否对遵循标准、是否可读;
★代码逻辑表达是否正确;
★代码结构是否合理;
★程序编写与编写标准是否符合;
★程序中是否有不安全、不明确和模糊的部分;
★编程风格是否符合要求。
★检查变量的交叉引用表:
是否有未说明的变量和违反了类型规定的变量。
★检查标号的交叉引用表:
验证所有标号是否有正确。
★检查子程序、宏、函数:
验证每次调用与所调用位置是否正确,调用的子程序、宏、函数是否存在,参数是否一致。
★检查全部等价变量的类型的一致性。
★确认常量的取值和数制、数据类型。
★选择、激活路径:
在设计控制流图中选择某条路径,到实际的程序中激活这条路径,如果不能激活,则程序可能有错。
★对照程序的规格说明,详细阅读源代码,比较实际的代码,从差异中发现程序的问题和错误。
2.代码检查方式桌面检查对源程序代码进行分析、检验,根据相关的文档,检验程序中是否有错误的过程。
3.静态结构分析
★可以检查函数的调用关系是否正确;
★是否存在孤立的函数而没有被调用;
★编码的规范性;
★资源是否释放;
★数据结构是否完整和正确;
★是否有死代码和死循环;
★代码本身是否存在明显的效率和性能问题;
★代码本身方法,类和函数的划分是否清晰,易理解;
★代码本身是否健壮,是否有完善的异常处理和错误处理。
三.测试执行和结果
3.1白盒测试
(1)选择测试平台:
VC(原因、优缺点)
原因:
VC是我熟悉的C/C++环境,学习C和C++语言都是用的VC,因此这个环境我并不陌生,测试起来相对压力较小,并且它本身对C/C++有很好的兼容性。
VC6优点:
a,内容少,学习成本低。
b,常用功能操作简单。
c,占用资源少。
有个笑话是:
启动VC6后写了20行代码,对方的VS201X还在启动中。
d,Win2000和以后的操作系统自带mfc.dll。
VC6缺点:
a,对stl支持不友好,VC6是98年,stl成为标准是99年。
b,Watch窗口,看到字符串太短。
VC7也有这个问题,但能看到的长得多。
c,VC6不可以附加。
比如先启动AutoCAD,再启动VC7调试。
d,调试时,无法改变常量的值。
e,调试时,无法看到静态变量的值。
缺点:
由于C++是由C语言发展起来的,也支持C语言的编译。
6.0版本是使用最多的版本,很经典。
最大的缺点是对于模版的支持比较差。
现在最新补丁为SP6,推荐安装,否则易出现编译时假死状态。
仅支持Windows操作系统。
目前发现与windows7兼容性不好,安装成功后可能会出现无法打开cpp文件的现象。
实验目的:
能熟练应用白盒测试技术设计测试用例
白盒测试原理:
已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。
它是把测试对象看作装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。
这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。
其又称为结构测试。
对于该实验的例子给出其流程图如下图所示,我们来了解白盒测试的基本技术和方法。
1)语句覆盖
测试用例输入
输出magic
判定M的取值
判定N的取值
覆盖路径
x=1,y=1
12
T
F
abef
x=1,y=-1
0
F
T
acdf
2)判定覆盖
测试用例输入
输出magic
判定M的取值
判定N的取值
覆盖路径
x=1,y=1
12
T
F
abef
x=1,y=-1
0
F
T
acdf
3)语句覆盖
x=1,y=1
x=1,y=-1
4)判定覆盖
x=1,y=1
x=1,y=-1
条件覆盖
x=1,y=1
x=-1,y=-1
。
3.程序代码
#include
/*static*/intsign=0;
staticcharm='T',n='T';
//intlogicExample(int,int);
intlogicExample(intx,inty)
{
intmagic=0;
if(x>0&&y>0)
{
magic=x+y+10;sign++;
}
else
{
magic=x+y-10;m='F';
}
if(magic<0)
{
magic=0;sign+=2;
}
elsen='F';
returnmagic;
}
main(){
intx,y;
//staticintsign=0;
//staticcharm='T',n='T',
charp[4][5]={"acef","abef","acdf","abdf"};
cout<<"---------------"<<'\n';
cout<<"请输入x:
";
cin>>x;
cout<<"请输入y:
";
cin>>y;
cout<<"magic已知:
0"<cout<<"---------------"<<'\n';
cout<<"测试结果分别是:
"<<'\n';
cout<<"---------------"<<'\n';
cout<<"x的值y的值logic的值判定M判定N覆盖路径"<cout<<"---------------------------------------------------------"<<'\n';
cout<cout<<""<}
4.画出程序的控制流图
流程图:
3.2黑盒测试
1)选择测试方法
选择greatCircleDistance()函数
gr