欢迎来到天天文库
浏览记录
ID:13251211
大小:155.00 KB
页数:14页
时间:2018-07-21
《体系结构扩展支持软件可靠性综述》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、体系结构扩展支持软件可靠性综述摘要:随着软件工程的兴起,软件可靠性研究也慢慢形成了一个系统的发展方向,而其中软件bug是引起软件不稳定的最主要原因。而由于软件系统的复杂性越来越高,软件bug非常难检测且难于去除。软件bug包括内存相关的错误,并发错误等,而内存相关的错误是出现最多,且与系统安全紧密相关的,主要是由于对内存对象和数据处理不当而引起的软件异常等。传统的软件调试技术正凸现出许多的不足,例如利用交互式调试器(gdb等)非常的耗时,且需要非常大的人力和程序员的经验,更为重要的一点是,它很难重现一个软件错误。传统的软件调试技术有三个局限性:效率低,精确度低,错误覆盖率小。
2、因此传统的调试技术遇到了瓶颈,无法有效的应付日益复杂的软件系统,必须进一步对软件可靠性进行研究,提出新的解决方法。这两年,研究人员开始改进各种各样的体系结构来支持软件可靠性,并取得了很好的成果。关键字:软件bug,软件可靠性,软件调试1.引言随着摩根定律的应用,微处理器的速度连续的显著增加,给计算机和互联网带来了新一轮的革命,这时候计算机性能不再是唯一的关注焦点,软件可靠性,硬件可靠性和低功耗的嵌入式芯片技术等变得越来越重要。随着软件工程的兴起,软件健壮性研究也慢慢形成了一个系统的发展方向,而其中软件bug是引起软件不稳定的最主要原因。而由于软件系统的复杂性越来越高,软件bu
3、g非常难检测且难于去除。虽然软件开发技术不断在发展,但每年造成计算机系统崩溃的原因中,软件bug的比例在不断增加,已经接近40%,而且给各个国家带来了巨大的经济损失,据美国商务部国家标准和科技机构(NIST)的研究,软件错误和瑕疵每年造成美国约595亿美元的经济损失[1]。软件bug包括内存相关的错误,并发错误等,而内存相关的错误是出现最多,且与系统安全紧密相关的,主要是由于对内存对象和数据处理不当而引起的软件异常等。黑客经常利用内存错误来攻击别人的电脑,执行恶意代码窃取机密信息等。从我国2005年国家安全报告来看,超过50%的系统攻击都是由于内存错误造成的。所以,检查内存相
4、关的错误对查出系统攻击就非常的重要,尤其是用不安全语言如C/C++完成的软件程序,检查内存错误必须作为一项重要工作来完成。然而,传统的软件调试技术正凸现出许多的不足。例如利用交互式调试器(gdb等)非常的耗时,且需要非常大的人力和程序员的经验,更为重要的一点是,它很难重现一个软件错误,因为错误常常会在执行数小时或者数天后发生,或者需要某一个特殊的用户输入组合才会发生,或者与时间相关的事件导致错误发生,在这些情况下,交互式调试器会显得无能为力。而利用动态监控技术来调试程序的那些工具,如Purify,Valgrind,IntelThreadChecker,DIDUCE,Erase
5、r,CCured等,他们都主要基于程序实际执行路径,变量精确值和别名信息来监控程序,对常见的内存错误能起到很好的监控。但是,他们却有三个局限性:效率低,精确度低,错误覆盖率小。此时,传统的调试技术遇到了瓶颈,无法有效的应付日益复杂的软件系统,因此,必须进一步对软件可靠性进行研究,提出新的解决方法。这两年,研究人员开始改进各种各样的体系结构来支持软件可靠性,并取得了很好的成果,IBM通过BEAM(BugsErrorsAndMistakes)项目,采用数据流分析方法检测软件bug;同时,美国UCBerkeley、Stanford、UIUC、Arizona、英国Cambridge等
6、大学也分别从不同角度开展了软件错误检测与排错、软件调试技术等方面的深入研究。但这仅仅是一个开始,远远没有提供一个完整的解决方案。1.1软件错误(bug)的分类软件错误主要可分为内存相关的错误与语义相关错误。从前面的介绍可以知道,对于C/C++完成的软件程序,内存错误是最常见的错误,因此,要检查内存错误,并对症下药,首先需要非常熟悉各种错误,而内存相关的错误可以分为主要的六种[2]:l缓冲区溢出:访问超出了缓冲区的边界。l堆栈溢出:对函数返回地址的不合法修改。l内存泄漏:动态分配的内存对象失去引用,变成了悬挂对象,所以无法释放。l未初始化的读操作:在内存对象初始化之前就读取数据
7、,无法预料的结果。l双重释放:一个内存对象被释放两次。l与程序语义相关的错误:这类错误主要是与设计者本意不一致的内存错误,比如错误的指针赋值,这一类错误不能通过编译器查出,通常由于设计者设计上的缺陷或者编码的失误造成的。语义相关错误主要有以下四种:l资源竞争:多个进程同时访问未加保护的资源,引起的资源内部状态不一致的问题。l分支判断错误:程序存在未预期到的执行分支。l边界设置偏差:程序对于边界条件的处理错误。l原子性破坏:某个进程的原子性操作被另外一个进程所打断,并造成冲突。1.传统的软件调试技术现在流
此文档下载收益归作者所有