Softwareengeering = Technology + Management
现代软件测试思想:全生命周期的测试思想.
软件系统的规模的急剧增大--->国际协作模式,联合开发,
软件测试管理:softwaretest团队组织管理,软件测试计划管理,软件缺陷跟踪管理,软件测试资源管理。
软件缺陷是软件与生具来的特征,是影响软件质量的重要和关键的因素之一,发现和排除缺陷是软件生命周期重要的工作之一。缺陷的密度是靠经验来估计的。
缺陷管理工具:
开源Bug追踪管理的工具:Bugzilla(Mozilla出品),BugOnline,Bugzero,Bugtracker,BugFree(借鉴微软的研发流程和Bug管理理念,PHP+MySQL)
软件测试管理工具:TestManager,TestDirector,TestRunner(与Bugzilla集成的一款管理工具),TestLink—优秀的开源测试管理软件,可以和更多缺陷管理软件进行集成(Bugzilla,Mattis)。Sourceforge的开源项目之一
TestLink应用环境:LAMP(Linux+Apache+MySQL+PHP)
程序的静态分析是在不执行程序的情况下地其进行分析的技术,简称静态分析。静态分析的输入:程序源代码,目标代码。
静态分析工具扫描测试程序的正文,对程序的数据流和控制流进行分析,然后给出分析报告。通常采用以下方法进行源程序的静态分析。
1.生成各种引用表
直接从表中查出说明/使用错误等,如循环层次表,变量交叉引用表,标号交叉引用表等。
为用户提供辅助信息,如子程序(宏,函数)引用表,等价(变量)表,常熟表等。
2.编程规范检查
检查分析程序中违反编程标准的错误,如模块大小,模块结构,注释的约定,某些语句形式的使用,以及文档编制的约定等。
3.静态错误分析
静态错误分析主要用于确定源程序中是否存在某类错误或”危险”结构。
类型和单位分析
引用分析:使用最广泛的静态错误分析方法就是发现引用异常---异常探测工具
表达式分析:对表达式进行分析,以发现并纠正表达式中出现的错误
接口分析:接口的静态错误分析—检查过程及函数过程之间接口的一致性。检查形参和实参在类,数量,维度,顺序,使用上的一致性,全局变量和公共数据区在使用上的一致性
4.静态特性的统计功能
程序的统计信息,各种类型的语句出现的次数等等
错误预测和程序复杂度计算
静态分析工具可以保证代码的质量,发现并警告潜在的Bug。
独立的静态分析工具C的lint,Smalltalk的lint
程序理解是人们将程序及其环境---面向人的概念知识过程中,是软件开发过程中的重要的活动,软件的测试&维护,逆向工程--源代码理解。
软件规模的增大--->通过计算机来完成软件系统分析和理解的程序辅助工具的需求变地越來越迫切。
大型软件系统---分析和理解的困难性---系统维护和演化任务艰巨---人力成本高---程序理解自动化
程序理解就是从计算机程序中获取知识信息的过程,程序排错,程序增强,程序重用以及文档整理。程序理解的目标是从不同抽象层次,多视角,多方面综合表达并展示程序理解的结果。
程序理解是软件工程领域的一个重要的部分。软件工程---如何提高软件开发效率和软件产品质量。程序理解在维护,逆向工程中起到举足轻重的地位。
程序理解的目标:理解软件系统以使性能提高,纠错,再设计和使用另一种语言冲新编写。
系统的概念建模,数据抽取,系统抽象---依赖于通过分析程序源代码来抽取程序和控制流信息。
任务:在不同抽象级别上建立基本程序的思维模型,从问题领域到程序设计领域的映射集。代码本身的模型,基本应用领域的模型。四个抽象层次:
实现层:程序设计语言进行理解,检查程序结构,程序的AST,符号表或普通源文件。技术涉及程序扫描,语法提取,语义检查,静态分析,动态模拟运行等过程。
结构层:在程序设计语言基础上,检查程序构造过程中的结构,对程序中出现的实体以及他们之间的关系的分析,数据调用,控制流程图,程序调用图。结构层包括:逆向工程信息提取,信息抽象,结构模型匹配...
功能层:从不同的模块的功能来推断他们之间逻辑关系。功能层包括:设计恢复,语义和行为模式匹配
领域层:检查特定于应用领域的概念,进一步从功能上推断此软件在其领域的作用,智能软件理解,格局设别,概念赋值和推理
从抽象层从低(源代码)到高(领域问题).
主要介绍结构层次的技术.
程序理解的几个方面:结构信息,数据流,控制流,程序操作,面向对象的理解
结构层的理解技术有语句分析,表示程序单元之间的调用关系和被调用关系,与程序内部结构相关的程序控制流图和数据流图.
1.语句分析技术:程序的词法模式和语法模型
2.程序流分析:数据流和控制流---首要任务发现控制结构,分析方法(必经点分析和区间分析)。数据流分析是为了计算被分析程序在生成数据方面的行为,通常用于程序优化。
3.软件结构图:程序调用关系图(函数调用关系图)和系统结构图。程序调用关系图:对源程序中函数关系的一种静态描述;系统结构图反映的是系统中模块的调用关系和层次关系,谁调用谁,时序关系。
阅读源代码是程序理解的一项重要的活动。常见的程序开发工具:程序切分器,静态分析工具(有效工具,splint,Olink),动态分析工具。
Olink是一个开源的C/C++工具,基础或核心部分。
Olink的源码包:smbase(c++的包和字符串库,替代C++标准库中相应的库),ast(生成AST的工具包),elkhound(用于管理GLR语法分析器,和bison功能相似,可以用来反分析任何上下文无关语法),elsa(在elkhound语法分析的基础上,将C\C++程序生成为相应的AST,可以对程序进行部分类检查,主要是与),libregion(基于区域的c语言内存管理库),libqual(可序列化的多太的类型修饰符推理接口),platformmodel(C/C++标准库的静态模型)。
书本上提供的网址Olink的网址是: http://www.cubewano.org/oink/downloads/2006-08-31/。然后打开后发现不知道导向了什么网站。
看了一堆理论,听作者吹了老久,感觉这个Oink工具好牛逼的说,原本想实践一下了,结果却是那些东西不存在。这就好比有个人告诉你一个很很神奇很神奇的景观,说的是天花乱坠,你跑过去看看,啥都没有,空欢喜一场,还浪费了很多时间。
下一篇是关于splint的,因为内容比较多,就不放在一起了
[1]软件测试实验指导教程/蔡建平, 清华大学出版社, 2009.11