程序理解工具
程序理解是人们将程序及其环境---面向人的概念知识过程中,是软件开发过程中的重要的活动,软件的测试&维护,逆向工程--源代码理解。
软件规模的增大--->通过计算机来完成软件系统分析和理解的程序辅助工具的需求变地越來越迫切。
1.程序理解概述
大型软件系统---分析和理解的困难性---系统维护和演化任务艰巨---成本高,
1.1程序理解的概念
程序理解就是从计算机程序中获取知识信息的过程,程序排错,程序增强,程序重用以及文档整理。程序理解的目标是从不同抽象层次,多视角,多方面综合表达并展示程序理解的结果。
程序理解是软件工程领域的一个重要的部分。软件工程---如何提高软件开发效率和软件产品质量。程序理解在维护,逆向工程中起到举足轻重的地位。
程序理解的目标:理解软件系统以使性能提高,纠错,再设计和使用另一种语言冲新编写。
系统的概念建模,数据抽取,系统抽象---依赖于通过分析程序源代码来抽取程序和控制流信息。
1.2程序理解的任务和内容
任务:在不同抽象级别上建立基本程序的思维模型,从问题领域到程序设计领域的映射集。代码本身的模型,基本应用领域的模型。四个抽象层次:
实现层:程序设计语言进行理解,检查程序结构,程序的AST,符号表或普通源文件。技术涉及程序扫描,语法提取,语义检查,静态分析,动态模拟运行等过程。
结构层:在程序设计语言基础上,检查程序构造过程中的结构,对程序中出现的实体以及他们之间的关系的分析,数据调用,控制流程图,程序调用图。结构层包括:逆向工程信息提取,信息抽象,结构模型匹配...
功能层:从不同的模块的功能来推断他们之间逻辑关系。功能层包括:设计恢复,语义和行为模式匹配
领域层:检查特定于应用领域的概念,进一步从功能上推断此软件在其领域的作用,智能软件理解,格局设别,概念赋值和推理
从抽象层从低(源代码)到高(领域问题).
主要介绍结构层次的技术.
程序理解的几个方面:结构信息,数据流,控制流,程序操作,面向对象的理解
1.3程序理解的技术
结构层的理解技术有语句分析,表示程序单元之间的调用关系和被调用关系,与程序内部结构相关的程序控制流图和数据流图.
1.语句分析技术:程序的词法模式和语法模型
2.程序流分析:数据流和控制流---首要任务发现控制结构,分析方法(必经点分析和区间分析)。数据流分析是为了计算被分析程序在生成数据方面的行为,通常用于程序优化。
3.软件结构图:程序调用关系图(函数调用关系图)和系统结构图。程序调用关系图:对源程序中函数关系的一种静态描述;系统结构图反映的是系统中模块的调用关系和层次关系,谁调用谁,时序关系。
1.4程序理解工具
阅读源代码是程序理解的一项重要的活动。常见的程序开发工具:程序切分器,静态分析工具(有效工具,splint,Olink),动态分析工具。
2Olink程序理解工具
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
相关文章: