BUAA_QATools_Parasoft_CTest_NoPass

0

No comments posted yet

Comments

Slide 57

规则仍可以增加示例 – RuleWizard

Slide 1

北京航空航天大学软件学院 研究生课程 2009 1 Parasoft C++ Test http://blog.csdn.net/hhmoll/ hhmall@hotmail.com 2004-05-21 Created 2004-06-30 Version 2004 2009-05-21 Last Updated

Slide 2

Copyright by Huang Hui @2004-2009 2 内容 单元测试 静态分析 规则 动态分析 白盒测试 黑盒测试 回归测试 测试单元

Slide 3

Copyright by Huang Hui @2004-2009 3 单元测试 测试应用中最小的单元,如C/C++中的一个类 目的 执行每个类中的每一个方法 检测所有存在的功能性问题,错误和构造弱点

Slide 4

Copyright by Huang Hui @2004-2009 4 测试方法 测试方法 黑盒测试 通过确定类的公共界面是否依照定义执行,检查类的功能性 不需要有关实现细节的知识 白盒测试 通过确定类在遇到非预期输入时执行是否正确,检查所有的类的方法和函数(包括保护和私有成员)的健壮性 需要对类的实现细节的完整知识 回归测试 检查是否类的修改会在原来正确的代码中引入新的错误

Slide 5

Copyright by Huang Hui @2004-2009 5 单元测试的优点 简化错误检测,在减少开发时间和成本的同时提高软件质量 单元测试促进错误检测 使你更接近错误 将你从在问题中艰难跋涉去修正一个简单错误的困境中解救出来

Slide 6

Copyright by Huang Hui @2004-2009 6 单元测试的困难 C/C++的单元测试是一件困难、烦琐和耗时的事情 没有很好的工具来自动化这一过程

Slide 7

Copyright by Huang Hui @2004-2009 7 步骤1 – 使目标类可测 设计一个运行目标类的测试驱动程序 建立一个新的类,除了测试原始类以外它不能用于任何其它目的 若干次修改和重写这样一个测试驱动是免不了的 设计桩函数(Stub),它们为被测类所引用的任何外部资源返回值 如果你的类引用任何还没有准备好或不可访问的外部资源(如外部文件、数据库和CORBA对象等),你必须建立相应的桩函数

Slide 8

Copyright by Huang Hui @2004-2009 8 步骤 2 -设计测试用例 为了彻底地测试类的结构和功能性,你应该设计两中类型的测试用例 黑盒 黑盒测试用例基于说明和规格文档 白盒 白盒测试用例通过各种不同的输入充分地执行类的所有方法以发现缺陷 任何时候一个类被修改后,你应该执行回归测试,保证没有引入新的错误和/或原来的错误已经被更正了

Slide 9

Copyright by Huang Hui @2004-2009 9 Parasoft C++ Test 自动化的C/C++单元测试工具 支持嵌入式开发 支持平台 Windows Microsoft® Visual C++® 6.0, .NET®, or .NET 2003® GNU GCC 2.95x or 3.x. Solaris GNU CGG 2.95x or 3.x Sun® C++ 5.3® (Sun Forte C++ 6 Update 2 for SPARC Solaris) Sun® C++ 5.4® (Sun ONE Studio 7) Sun® C++ 5.5® (Sun ONE Studio 8) Linux GNU GCC 2.95x or 3.x

Slide 10

Copyright by Huang Hui @2004-2009 10 特点 自动测试任何C/C++类、函数或部件而不需要编写测试用例、测试驱动程序或桩调用代码 支持 白盒测试 黑盒测试 回归测试

Slide 11

Copyright by Huang Hui @2004-2009 11 主要功能 静态分析 动态分析 建立每个被测类的测试驱动程序 建立任何必要的桩函数 白盒测试 黑盒测试 回归测试

Slide 12

Copyright by Huang Hui @2004-2009 12 启动

Slide 13

Copyright by Huang Hui @2004-2009 13 New Project 可以引入VC的工程文件

Slide 14

Copyright by Huang Hui @2004-2009 14 测试驱动 C++ Test自动建立一个测试驱动程序 其设计目标是极大化类的测试覆盖性和错误检测 为类建立测试驱动,你只要简单地打开这个类,然后按Build Test键

Slide 15

Copyright by Huang Hui @2004-2009 15 桩函数(Stub) 如果被测的方法需要调用当时还不存在或无法访问的函数,C++ Test能够自动生成桩函数 C++ Test不是实际调用这些函数,而是调用桩函数并返回桩函数提供的值 如果你需要控制使用的返回值,你可以建立一个桩调用表,生命输入/输出的关系。

Slide 16

Copyright by Huang Hui @2004-2009 16 进行分析 运行分析

Slide 17

Copyright by Huang Hui @2004-2009 17 静态分析结果 静态分析将指出代码违反了哪些C++编程规则

Slide 18

Copyright by Huang Hui @2004-2009 18 规则描述 可以直接查看规则内容

Slide 19

Copyright by Huang Hui @2004-2009 19 规则违例 违例处源代码

Slide 20

Copyright by Huang Hui @2004-2009 20 规则?

Slide 21

Copyright by Huang Hui @2004-2009 21 规则6 析构函数里对指针成员调用delete 增加一个指针成员意味着几乎都要进行下面的工作: 在每个构造函数里对指针进行初始化 对于一些构造函数,如果没有内存要分配给指针的话,指针要被初始化为0(即空指针) 删除现有的内存,通过赋值操作符分配给指针新的内存 在析构函数里删除指针

Slide 22

Copyright by Huang Hui @2004-2009 22 违规示例 /* Item 6 - Call delete on pointer members in destructors (SV,V). */ class A { public: A() { cptr1=new char; cptr2=new char; } ~A() { // 违规: delete cptr2 delete cptr1; delete vptr1; } private: char *cptr1; void *vptr1; char *cptr2; };

Slide 23

Copyright by Huang Hui @2004-2009 23 本例 – ecpp-6 class Data { public: // … … … … ~Data() { } // … … … … private: char* _data; } 此处违反了ecpp-6,应增加 delete _data;

Slide 24

Copyright by Huang Hui @2004-2009 24 更改代码 ecpp-6违例消失

Slide 25

Copyright by Huang Hui @2004-2009 25 Rule Manger 通过Rule Manager可以定制检查的规则

Slide 26

Copyright by Huang Hui @2004-2009 26 规则 Effective C++ (ecpp-id) Scott Meyers More Effective C++ (mecpp-id) Scott Meyers Examining C++ Program Analyzers (MK-id) Martin Klaus, 1997.2, Dr Dobbs’ Journal Universal Coding Standards (ucs-id) User Item (user-id) Parasoft Build-in (misra-id) Motor Industry Software Reliability Association (MISRA)

Slide 27

Copyright by Huang Hui @2004-2009 27 选择使用的规则 选择使用的规则

Slide 28

Copyright by Huang Hui @2004-2009 28 白盒测试 回答 How strong is it built? 检查所有类的方法 private protected public 在各种输入情况下,检测代码是否健壮 需要了解函数实现

Slide 29

Copyright by Huang Hui @2004-2009 29 自动化白盒测试 自动执行所有的白盒测试过程 自动生成和执行精心设计的测试用例 自动标记任何运行失败,并以一种简单的图示化结构显示 自动保存这些测试用例,能够方便地用于以后的回归测试

Slide 30

Copyright by Huang Hui @2004-2009 30 动态分析

Slide 31

Copyright by Huang Hui @2004-2009 31 动态测试信息 OK – Testcase PASS FLD – Testcase Fail ERR – 运行错误 – 例如异常 TST – 执行了的Test TOT – Testcase总数

Slide 32

Copyright by Huang Hui @2004-2009 32 查看详细结果 bufLen()包含了9个Testcase,其中8个运行通过,1个运行错误

Slide 33

Copyright by Huang Hui @2004-2009 33 查看Testcase 通过右键菜单查看Testcase 通过Edit按钮查看Testcase

Slide 34

Copyright by Huang Hui @2004-2009 34 源代码 bufLen()源代码

Slide 35

Copyright by Huang Hui @2004-2009 35 信息 返回值 前置条件 在调用一个方法之前必须满足的条件 后置条件 在调用一个方法之后必须满足的条件

Slide 36

Copyright by Huang Hui @2004-2009 36 Testcase - PASS AUTO_1_F_0 - PASS 返回: 0 前置条件 fill=0 后置条件 _data=“” 定义Testcase可能的值

Slide 37

Copyright by Huang Hui @2004-2009 37 Testcase - ERROR 运行时的错误信息

Slide 38

Copyright by Huang Hui @2004-2009 38 Testcase - ERROR AUTO_1_F_1 - ERROR 返回: 未定义 前置条件 _data=NULL

Slide 39

Copyright by Huang Hui @2004-2009 39 黑盒测试 检测类的public方法的功能 C++ Test通过自动化黑盒测试的大部分操作,减轻了这类测试的负担 帮助你设置每个测试用例的结果 输入测试用例输入 运行测试用例并自动确定实际的输出结果 如果正确,不需要其它动作 如果结果不正确,你可以输入预期的输出结果 自动生成测试用例的核心集合 对于public函数,白盒测试已经提供了核心测试用例 只需要增加额外的测试用例用于黑盒测试

Slide 40

Copyright by Huang Hui @2004-2009 40 增加Testcase

Slide 41

Copyright by Huang Hui @2004-2009 41 建立输入 输入数据: xxxxx

Slide 42

Copyright by Huang Hui @2004-2009 42 运行新建Testcase

Slide 43

Copyright by Huang Hui @2004-2009 43 输出结果

Slide 44

Copyright by Huang Hui @2004-2009 44 确认输出

Slide 45

Copyright by Huang Hui @2004-2009 45 例2 – 桩函数 odd()未实现的情况下也可执行测试

Slide 46

Copyright by Huang Hui @2004-2009 46 动态分析 stubs.cpp的动态测试结果

Slide 47

Copyright by Huang Hui @2004-2009 47 桩函数表 C++ Test为odd()产生桩函数

Slide 48

Copyright by Huang Hui @2004-2009 48 转换 可以使用自己的函数替代C++ Test产生的桩函数

Slide 49

Copyright by Huang Hui @2004-2009 49 User-Define Stub Function 用户自定义桩函数

Slide 50

Copyright by Huang Hui @2004-2009 50 测试多个文件 同时测试多个文件组合可以提供更好的测试场景 可以使用测试单元对多个文件人一起进行测试

Slide 51

Copyright by Huang Hui @2004-2009 51 打开多个文件

Slide 52

Copyright by Huang Hui @2004-2009 52 C++ Test 工程 empty()在文件cpop.cpp中未定义

Slide 53

Copyright by Huang Hui @2004-2009 53 收集代码覆盖信息

Slide 54

Copyright by Huang Hui @2004-2009 54 运行动态分析 empty()使用是C++ Test创建的桩函数 由于empty()总是非空,所以该行未被执行

Slide 55

Copyright by Huang Hui @2004-2009 55 测试单元 Project->Create Test Unit创建测试单元 选取cpop.cpp和cpush.cpp

Slide 56

Copyright by Huang Hui @2004-2009 56 运行动态分析 没有C++ Test生成的桩函数 所有代码均运行

Slide 57

Copyright by Huang Hui @2004-2009 57 小结 单元测试 静态分析 规则 动态分析 白盒测试 黑盒测试 回归测试 测试单元

Summary: BUAA Course - Parasoft C++ Test

Tags: buaa qatools parasoft c++ test

URL:
More by this User
Most Viewed