【毕业学位论文】(Word原稿)整合入开发过程的静态分析工具的设计和实现-软件工程_第1页
【毕业学位论文】(Word原稿)整合入开发过程的静态分析工具的设计和实现-软件工程_第2页
【毕业学位论文】(Word原稿)整合入开发过程的静态分析工具的设计和实现-软件工程_第3页
【毕业学位论文】(Word原稿)整合入开发过程的静态分析工具的设计和实现-软件工程_第4页
【毕业学位论文】(Word原稿)整合入开发过程的静态分析工具的设计和实现-软件工程_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

硕士学位论文 (专业学位)整合入开发过程的静态分析工具的设计和实现 A in 2014 of 学位论文版权使用授权书 本人完全了解同济大学关于收集、保存、使用学位论文的规定,同意如下各项内容:按照学校要求提交学位论文的印刷本和电子版本;学校有权保存 学位论文的印刷本和电子版,并采用影印、缩印、扫描、数字化或其它手段保存论文;学校有权提供目录检索以及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论文的复印件和电子版;在不以赢利为目的的前提下,学校可以适当复制论文的部分或全部内容用于学术活动。 学位论文作者签名: 年 月 日 同济大学学位论文原创性声明 本人郑重声明:所呈交的学位论文 ,是本人在导师指导下,进行研究工作所取得的成果。除文中已经注明引用的内容外,本学位论文的研究成果不包含任何他人创作的、已公开发表或者没有公开发表的作品的内容。对本论文所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确方式标明。本学位论文原创性声明的法律责任由本人承担。 学位论文作者签名: 年 月 日同济大学 硕 /博士学位论文 摘要 I 摘要 本文针对航天星载软件的技术现状,开发了 一套与开发环境整合的 言代码静态分析和度量软件。研究 码的特点,对编译器生成的 信息文件进行格式分析,提炼可用信息,再使用词法分析工具获得源代码的程序结构,并提炼源代码扇入扇出,圈复杂度信息。通过与 命令行接口和共享文件传递源代码的这些静态分析和度量数据, 发平台将这些数据与源代码同列显示,为开发者提供代码质量的静态分析结果,以便开发者及时纠正代码中的不恰当处,提高软件开发效率和可靠性。 在实现方法上,系统开发采 用 g+编 译工具,以 开源的词法分析工具进行辅助 ,完成了 对星 载嵌入式软件 代码的静态分析和度量和结果显示 。 关键字: 言,静态分析和度量, 信息,词法分析, 发平台I n an da da da to of DE a of in of 信息 ty so to On g+ da 硕 /博士学位论文 目录 录 第 1 章 引言 . 5 题的提出 . 5 文研究内容和组织结构 . 6 究内容 . 6 织结构 . 6 第 2 章 嵌静态分析和度量工具开发环境和相关技术 . 8 言介绍 . 8 述 . 8 言特点 . 9 统开发环境 . 10 g+ . 10 介 . 11 发系统的相关技术 . 12 信息文件介绍 . 12 法分析技术 . 14 态分析和度量技术现状 . 15 结 . 16 第 3 章 嵌静态分析和度量工具需求分析 . 17 嵌静态分析和度量工具需求分析 . 17 结 . 19 第 4 章 嵌静态分析和度量工具系统设计 . 20 统设计思路 . 20 统体系结构设计 . 21 统模块设计 . 25 信息文件读取 . 25 信息信息分析 . 28 法分析初始化 . 29 法分析 . 29 行语句模块划分 . 30 行路径分析 . 31 取子程序调用信息 . 32 立子程序调用关系图 . 33 错处理 . 33 口设计 . 34 结 . 35 第 5 章 嵌静态分析和度量工具的 编程实现 . 36 据流 设计 . 36 据结构设计 . 43 写系统所需的类 . 44 写与 讯代码 . 52 同济大学 硕 /博士学位论文 目录 结 . 53 第 6 章 嵌静态分析和度量工具的 测试 . 54 试环境 . 54 试内容和测试结果 . 55 第 7 章 总结和展望 . 58 论 . 58 一步工作的方向 . 58 参考文献 . 59 致谢 . 错误 !未定义书签。 个人简历、在读期间发表的学术论文与研究成果 . 错误 !未定义书签。 同济大学 硕 /博士学位论文 整合入开发过程的静态分析工具的设计和实现 5 第 1章 引言 题的提出 代码中的 往是由于开发者忽略一些代码缺陷而造成的,这些代码缺陷可能是极其微小的错误,以至于在程序的编译期并未给出很好的错误,从而导致这些代码缺陷在程序的运行期以某种非正常形式呈现出来。那么对于开发 这开说,这些微小的代码缺陷,往往是很难跟踪调试的,因此也为修复代码带来了很大困难。 星载软件是卫星工程的核心,星载软件承担了对整个卫星功能的最终实现,是整个卫星的灵魂,一旦软件出现错误,后果直接导致卫星功能的错误,甚至关系到卫星的在轨寿命。 随着航天产业的发展,航天器的功能越来越强大,其控制航天器工作的星载软 件也日益庞大,代码量不断增加,模块数也从几十个模块增长为几百,甚至几千个模块。最明显的特征是早期的气象卫星 上用于存储软件的 小只有几十 面还包含了数管和姿轨控软件,而现在最新的气象卫星型号 的数管计算机的用 于存储软件的存储器大小就达到了兆级别。 软件规模的增加,势必造成软件 错综复杂,不易发现。 在已研和在研星载软件研制中,暴露了星载软件的若干 代码 问题,有些问题在半物理联试、甚至是整星联试中才得以发现。 有的问题在轨运行状态时才暴露出来,为卫星正常工作带来巨大的影响。 所以必须要在代码开发阶段就要发现部分代码存在的潜在缺陷,并在开发阶段就进行修补,防止这些潜在的缺陷由于不易暴露而持续到后续的各种研制阶段中,甚至遗留到上天在轨运行。 但是设计编码阶段的工具不具备对代码的语法和语义的详细信息,无 法鉴别出程序的圈复杂度等质量数据,因此不能及时将错误信息反馈给星载软件开发人员。 目前静态分析和度量就可以对代码进行分析,以各种度量数值来反应软件代码的质量情况。这些质量情况以模块为单位,软件开发人员可以根据这些度量数据对代码进行优化设计和修改,提升代码质量,消除潜在缺陷 1。 我国多颗在轨运行的卫星的星载软件都已成功采用 言, 言的模块化程度高、可读性好和调试方法方便对软件开发人员来说也是提高软件健壮性和质量的坚实基础。随着卫星平台处理任务的复杂度越来越高、型号研制周期的第 1 章 引言 6 缩短、 32 位 型号应用, 言将会成为卫星平台主要使用的语言。 由于 言应用面较少,其相关的工具较少,静态分析和度量工具也较少,目前可用的 工具必须将代码单独导入分析,结果也单独输出,不能与代码开发结合,其使用的方便性和简便性,与开发的互动性都交叉,无法及时有效的提醒开发者目前代码的质量问题,也就无法让开发者及时在开发过程中进行修改。不仅仅是 他工具 都是串行的方式进行工作的,某一个工具发现了代码的错误,只能返回到开发工具里进行修正,工作效率较低。而且这些工具与开发工具都是分离的,每个 工具都有自己独立的界面,需要用大量的时间在这些工具之间切换,使用不方便。 因此分析 言的特点,研究创建 一种与星载软件开发环境整合的 一定实用价值。 文研究内容和组织结构 究内容 本文对目前星载软件开发的主要语言 言进行分析,并结合星载软件静态分析和度量的具体需求,利用 言的库信息文件的内容,结合 载软件提炼静态分析和度量结果,并通过与接口,将结果通过 代码整合显示。 实现方法上 采用了 g+ 编译平台,利用词法分析软件对 得代码的各种信息,并计算,统计出代码的各种质量指标,通过参数和共享文件的方式与 讯。达到度量结果与代码整合显示在 织结构 第 1 章 阐述 目前星载软件提高软件可靠性面临的问题,给出了整合入代码开发工具的静态分析和度量的方案,介绍了度量工具对代码质量提高的作用,提出了该方案的可行性和实用性。 第 2 章 介绍了 嵌静态分析和度量工具的相关技术,介绍了 g+编译系统的优势,词法分析工具的应用和 信息文件格式和信息的提炼,介绍了与 讯的方法。 第 3 章对 嵌静态分析和度量工具的需求分析,给出了静态分析和度量工具的详细需求。 第 4 章对 信息文件的信息提取,词法分析结果分析、与 据交同济大学 硕 /博士学位论文 整合入开发过程的静态分析工具的设计和实现 7 互等各模块的设计进行阐述。 第 5 章 对各模块功能的代码实现,软件确认测试结果,给出软件实际运行效果。 第 6 章 总结了全文的工作,概括了系统的特点和优势,以及下一步的工作。 第 2 章 嵌静态分析和度量工具开发环境和相关技术 8 第 2章 嵌静态分析和度量工具 开发环境和相关技术 首先 阐述开发该工具所需要的开发环境和相关技术,介绍 言的概况,开发工具 g+, 信息文件格式,词法分析技术和目前静态分析和度量的技术现状。 言介绍 述 美国国防部在 20 世纪 80 年代早期主持发展的编程语言。当时主要有两个目的,第一是把 计成用于满足大规模、高可靠性应用软件(特别是嵌入式实时系统)的需要;第二是把 为美国国防部的通用编程语言。 在 20 世纪 80 年代中期, 成了国际标准,然后在 20 世纪 90 年代中期进行了修正,使之全力支持面向对象编程。现在一般称前者为 者为 1987 年,美国国防部颁布了称为“ 强制使用 命令,即要求所有的国防软件必须用 现。 1997 年,美国国防部取消了“ 一年之后,五角大楼的官员就不仅解散了“美国国防部 作办公室”( 而且还中断了事实上所有用于 业发展的资金供给。 当时,软件行业中很多人把这个事件看作是 言的末日来临。但是现在一些专家认为,美国国防部放弃对 支持貌似灾祸实为好事,理由是将来的 户将单纯从技术和商业的角度来看待 不用考虑太多政治上的原因。 事实上, 没有消亡,仍然用于各种领域。 应用范围包括从硬实时的处理到商业化的桌面工具。其用户包括小至初学者,大至公司,和遍及全世界的政府机构,私有机构以及学术界等。 言已在安全性敏感的领域里显示了其不一般的力量,尤其是在交通运输业中。波音公司的 777 飞机大量使用了 言,而且准备在具有最高安全性适航证书级别( 和 B 级)的软件中继续使用该语言。 地铁中也有应用,如伦敦 黎地铁最近的延伸段;纽约地铁的 ;同济大学 硕 /博士学位论文 整合入开发过程的静态分析工具的设计和实现 9 法国的高速火车( 欧洲、亚洲以及拉美的地铁轨道系统。还有在商业船用控制中也有它的应用。 其它领域像电视、娱乐业、医学计算、通信网络开关、金融和信息系统都得到了应用。它也应用于含有高安全性核反应堆的工业控制中和桌面软件中。当然 往常一样使用于美国和联合国的军事项目中。像 欧洲空间办事处之类的非军事政府机构也使用 当今世界和外层空间中有数亿行的 代码在使用 2。 言特点 言的重要特征就是其键入式风格,模块化 设计,编译检查,平行处理, 异常处理及 泛型编程。 95 年加入了对 面向对象设计的支持,包括动态分配等。 编译检查主要是针对没有分配的内存读写的保护,堆栈溢出错误,单个错误空闲,队列读写错误以及其他可以避免的小问题。这些检查可以在为增加效率的情况下被取消,但是在编译的时候他们却能带来很高的效率。同样它也包括对程序的严正的设置。因为这些原因,它被广泛应用于一些非常重要的系统中,例如航空电子学,武器及航天飞行器的操作系统中。同样它支持很多的 编译时间检查,这些检查被用来避免一些错误的发生。这种错 误往往是在其他语言中在运行以前都不能被察觉到的,需要在 源码中加入特殊的检查设置才能被发现。 动态内存管理非常安全和高规格,它类似于 言却不同于 C 语言的。这种特殊功能并不需要特殊的运行设置。尽管这种语言的语意结构允许对于不能读写的目标进行自动的碎片搜集,但是大多数运行都不支持它。 A 支持有限形式基于区域的 存储管理。无效的读写常在运行时候被检查出来(除非这种检测被人为关闭)并且有时候在编译时候就被发现。 言的定义同国际标准化组织( 标准有很大不同,因为他是一个自由内 容形式的。这种做法的后果是被广大程序员只能从它的标准化文档(普遍认为是 参考使用手册( 寻找细节性的技术问题,但是普遍情况是一本标准教科书却可以在其他不同语言上使用。 言由严格的巴斯特范式定义 ,但是不适合一般人阅读 国军用标准认证的语言 . 其 编译器经过严格的审查 ,以确保同样的代码在任一编译器上产生同样的可执行效果 并行性在代码级可以在无操作系统下同样运行 . 言最初设计是为了构建长周期的、高度可靠的软件系统。它提供了一系列功能来定 义相关的 数据类型 (对象 (操作 (程序包( 程序包可以被参数化,数据类型可以被扩展以支持可重用库的构建。操作既可以使用方便的顺序控制结构,通过 子程序 (实现,也可以第 2 章 嵌静态分析和度量工具开发环境和相关技术 10 通过包含并发 线程同步控制的入口 (实现。 支持单独编译 (在物理层上支持模块性。 含了很复杂的功能以支持实时 ( 并发程序设计 (错误可以作为异常 (标示,并可以被明确地处理。 覆盖了系统编程 (这需要对 数据表示和系统特性访问的精确控制。最后,提供了预定义的标准程序包,包括输入输出、字符串处理、数值计算的基本函数和随机数生成来 3。 统开发环境 g+ g+( 译器套装 中的一部分 ),是一套由 发的编程语言编译器。它是一套以 可证所发行的自由软件,也是 划的关键部分,亦是自由的类 苹果电脑 S X 操作系统的标准编译器。 g+的外部接口 类似 一个标准的 译器。用户在命令行下键入 g+的 程序名,以及一些命令参数,以便决定每个输入文件使用的个别语言编译器,并为输出代码使用适合此硬件平台的汇编语言编译器,并且选择性地运行连接器以 生成 可运行的程序。 对于 译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如 图 译器的四个阶段 。 同济大学 硕 /博士学位论文 整合入开发过程的静态分析工具的设计和实现 11 图 译器的四个阶段 从功能上分,预处理、编译、汇编是三个不同的阶段,但 g+的实际操作上,它可以把这三个步骤合并为一个步骤来执行。 目前 统和类 统基本都是用 g+作为 C 语言编译器, g+ g+在 的 统的实现 ,其功能与 g+大致相同,其编译出的程序可以运行在 统中,也就是包含了各种类 。 介 让 有 境的软件。 g+就会包含在里面。对于开发者, 一个开发环境 , 对于用户来说 一个运行环境。 一和 大的区别在于,使用 以在 调用 系统函数。比如进程函数,等等。所以,虽然说, 运行在 的,但是她还是使用的是 统的函数和思想。 许多自由软件的集合,最初由 发,用于各种版本的 ,运行类 统。 主要目的是通过重新编译,将 统(例如 及其他 统)上的软件移植到 。 植工作在 T、 000、 003 上比较好,在 5 和 8 上,相对差劲一些。目前 负责维护。 括了一套库,该库在 统下实现了 统调用的 有一套 发工具集(比如 g+、 这样可以进行简单的软件开发;第 2 章 嵌静态分析和度量工具开发环境和相关技术 12 还有一些 统下的常见程序。 2001 年,新增了 X 于 1995 年,最初作为 程师 一个项目。 1996 年后,由于看到 以提供 统上的 入 式工具(以往的方案是使用 其他工程师也加入了进来。特别吸引人的是,以实现 如可以在 作站上 此就形成 样比单纯在 编译要快不少。 1998年起, 始将 作为产品来提供。 发系统的相关技术 信息文件 介绍 译只需要使用 跟主程序代码文件即可将整个工程编译,可以说 含了一 个源代码工程管理系统。在这个源代码工程管理中,每次源代码修改之后,所有被修改的文件必须被重新编译。 依赖规则是非常复杂的,特别是过载、 言、类属和 程序。 动的执行所有需要重新编译的源代码、重新 重新 信息文件起到了重要作用 4。 如果目标文件相关的 信息文件存在并且它的以前的时间戳和所有的源代码(在 信息 文件依赖节中列出的)的时间戳吻合,那么 该目标文件被认为“ up to 也就是说除非源代码本身或者任何依 赖文件被修改,否则没有必要重新编译这个文件。 先检查指定的主单元是否“ up to 如果成立,则不需要编译主单元。如果不成立, 译主程序从而建立一个新的对应于最新源代码的 信息文件。然后检查 信息 文件的主单元以找出所有主程序所依赖的源代码, 环的对所有的文件实施上面的步骤。 信息文件是 代码文件在经过 译后生成的一个文本文件,该文件与源代码包一一对应。该文件包含了对应 言包代码中的各种信息。 主要包含 信息如下。 (1) 创建工具版本信息 : 一般放在第一行 , 以字母 V 标识 , 后面跟版本号 , 如 : V ib 5 (2) 主程序信息 : 以字母 M 标识 , 后面跟优先级设置及字符集设置信息 ,主要格式如下。 M T=w=? 同济大学 硕 /博士学位论文 整合入开发过程的静态分析工具的设计和实现 13 其中 以为两种值: P, F。 P 为无参数过程, F 为有返回的函数。 有当本编译单元有有效的“ 设定主任务优先级的时候有效。 T=示 用设定的值。 w=?标示了是否用宽字符编码。 (3) 编译参数信息 : 以字母 A 标识 , 后面跟编译选项 , 如 : A 4) 单元属性信息 : 以字母 P 标识,后面跟编译指示配置 , 如 : P X。 (5) 特性限制信息 : 以字母 R 标识,后面跟特性列表 (如果特性被限制,则对应字符为 v,否则为 n), 在嵌入式程序中,限制的特性比较多 (6) 单元引用信息 , 以字母 W 标识,对应于单元中的 定的引用单元,如 : W s 信息 (7) 链接选项信息 , 以字母 L 标识,对应于编译指示 如 : L 8) 单元版本信息 , 以字母 U 标识,对应 性及 性 , 如 : U p%s E K 里的 单元 属性。 (9) 文件依赖信息 : 以字母 D 标识,后面跟依赖的文件名,时间戮,及文件的检验和 , 如 : 20120331025321 0210) 交叉引用信息 : 以字母 X 标识,后面跟文件出现序号及文件名 、 若干行是符号信息 , 信息中包含符号的行列信息及类型信息 , 行首的还包括符号名称 。 (11)此外还有一些其他方面的信息,比较少见,不再列出 。 下面举例说明。 445|91面这行引用信息是类型 共可见布尔类型,在第 44 行第 5 列声明的。共有四个地方引用。 1) 当前文件的第 5 行,第 23 列有一处引用 2) 当前文件的第 6 行,第 45 列有一处修改 3) 编译单元 3 的第 9 行,第 35 列有一处引用 4) 编译单元 3 的第 11 行,第 56 列有一处引用 6 可见,通过对经过补充的 信息文件进行分析,按照文件格式进行解析,即可获得详细的 代码的各个标签等相互引用关系,从而获得程序结构,所得的程序结构信息可以作为 代码静态分析的基础 7。 第 2 章 嵌静态分析和度量工具开发环境和相关技术 14 法分析 技术 在 设计出来的一个优秀的计算机词法分析工具。主要功能是生成一个词法分析器( C 源码。需要先编写描述词法分析器的文件,经过 译后 ,生成一 个 文件, 然后由 C 编译器将该 C 文件编译后,生成词法分析器 8。如果将该文件与自己开发的文件整合,就可以再自己的工具中实现词法分析,以词法分析获得结果来对代码进行静态分析和度量,获得代码的各种质量数据 。 L E X 编 译 器C 编 译 器自 定 义 工 具 其 他 代 码自 己 的 S c a n n e 流 T o k e n 序 列L e x . y y . cM y . c 。 . . 法分析过程 法分析器文件的格式: 辅助定义部分 % 识别规则部分 % 用户子程序部分 上面花括号内的内容不是必须出现的。识别规则部分是 核心, 9。它其实就是一张表,表内每一个项有两部分,一部分是正则表达式,该正则表达式就是用来查找源代码中符合的代码项,另外一部分就是符合这个正则表达式所需要执行的动作。下面的表达式就是一个例子。 6|32) is is no ); 上述例子就是在找到 输出“ is is no 这句话。 同济大学 硕 /博士学位论文 整合入开发过程的静态分析工具的设计和实现 15 态分析和度量 技术现状 从第一个计算机软件的出现到现在,已经融入到我们生活和工作的各个方面,影响着我们的生活,也将继续让我们的生活不同。星载嵌入式软件承担着卫星的各项控制任务,是卫星的大脑,大脑一但出问题,对整个卫星的寿命影响可能是致命的。对于越来越复杂的星载嵌入式软件,软件开发的风险也越来越得到重视,软件的质量更是航天型号中特别关注的地方。有软件就会有 伴随着软件一起来到这个世界的。能降低软件问题是 航天型号软件开发人员一直为之奋斗的目标。 软件的故障暴露可能存在于软件的整个生命周期,在编译中,调试中,单元测试中,组装测试中,确认测试中,系统联试中,甚至在轨发生都是经常的事。不可能要求软件开发者能在开发阶段解决所有可能出现的问题,但是可以再开发阶段尽可能的解决可能存在的问题。 如果在软件人员开发阶段获得目前代码的质量信息是让软件开发人员在开发阶段尽可能解决可能发生的问题的关键。 但是软件的质量是个不具体的概念,软件的质量体现在众多方面。单简化来说,静态度量的结果可以反映软件的质量。静态度量主要是对软件代 码的模块调用结构、扇入扇出数、圈复杂度、输入参数、返回路径等指标进行测量。测量结果如果都达标的话,基本可以说是良好的代码质量 6。 比如圈复杂度,圈复杂度过大的话,代码复杂度也大,代码路径多,分支多,需要考虑的内容也多,如果开发者忽略某个分支,很可能该分支就会出现问题。其次高圈复杂度的代码不容易维护,该一个地方,就有可能影响其他代码,可读性也差。 静态分析和度量越来越得到重视,其在软件开发中的作用获得了认可。越来越多的集成开发环境整合静态分析和度量工具 7。 1 提供全新的 代码静态分析能力,其中包括在 C+代码分析能力,代码查询能力增强等等。代码分析窗口,代码分析警告出现在代码分析工具窗口,窗口能够帮助开发者管理和解决代码分析警告。 过滤警告信息,能够靠关键字,项目名称等信息过滤代码分析警告。代码编辑器高亮,在代码分析器选择一条警告信息时,相关警告代码会在编辑器中高亮显示。 C+消息排查,在代码分析窗口下,你可以进行修改代码并且排除此条警告消息的操作。 C+规则设置,新增 C+规则集,像管理代码一样,你能够可以指定和定制代码分析的规则集。此外 具可以通过插件的 方式整合在 发平台中,以其在软件开发过程中对代码进行分析。 台的集成开发环境 整合了静态分析工具。 静态第 2 章 嵌静态分析和度量工具开发环

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论