软件缺陷怎么写

1.软件缺陷是什么一般我们都认为测出一个问题就是一个bug,其实这是不对的,假设测试10个问题就10个bug,而修改一出就全解决了,程序员肯定认为冤枉自己 。
所有软件是文档,代码等组成的,最初的错误是来自于这些软件错误(software error),如代码中加法写成减法 。软件错误导致软件缺陷(software defect),如设计缺陷,代码缺陷等,可用静态测试,如走查,静态检查,测试床(军事软件用的技术)等,软件的缺陷导致一个或多个软件故障 (software fault),故障有内部故障,外部故障,也就是我们所说的bug,软件故障导致了软件在功能操作等方面的失效(software failure) 。
我们平时测的bug实际上是软件故障于失效的体现 。一旦软件错误得到修改,相应的故障与失效也就解除了 。这样分有助于我们定位问题,找到问题 。
详见《软件可靠性工程》
2.软件缺陷有哪些表现常见的软件缺陷有以下四种:
第一,栈溢出 。就是在栈中申请一段内存,一般是数组或字符串,在对这段内存做操作的时候,错误的写操作可能导致栈中也特殊意义的地址被用户的输入内容所控制 。最早发现是一些字符串操作的函数中,比如strcat,后来又发现在Strncpy如果不正常操作的话也会出现这个问题 。最后有一个Windows UNicode处理的函数如果不正常使用也会出现这样的问题 。下面介绍的是整数溢出的问题 。
整数溢出是多发于的情况,特别是一些加、乘的操作出现在内存前面就要特别注意了 。加或者乘出来的数不一定比原先两个数大 。还有一个正负数比较的问题,或者是符号扩展的问题 。即使现在这个问题仍存在于很多软件中 。但是在很多流行软件中已经很少出现了,比如微软的软件、国外大公司的软件 。但是在国内软件这个问题依然是很多的 。这个问题在JAVA软件中也经常存在 。例如银行系统,系统错误处理,把别人帐号上扣掉的金额,一个正的金额加到你的帐号上 。
第二,heap overflow 。这是现代程序C语言主要申请分配方法,所以他比栈溢出比例大的多 。微软做了很多防护措施,所以它利用起来是非常复杂的 。尤其是 WindowsXP2之后的版本,比如vista 。堆管理主要利用两张表,freelist、lookaside,freelist[0]代表着一些不规则的可以利用的chunk,尤其是比较大的chunk 。freelist[1] - freelist[n]代表2的整数次方可以利用的堆中的chunk 。利用这样堆溢出的问题,你需要对Windows堆管理非常熟悉 。比如有人通过 freelist[0]这个链表成功利用 。目前有一个immdbg的程序对这种研究利用是很有帮助的 。因为他把堆分配的内容都可以显示出来 。对vista 软件的攻击,理论上应该是不存在的 。因为vista对堆管理有严格控制,但是有很多软件使用自己的内存管理方法,比如OFFICE,他们自己堆管理方法和内存方法是和vista不一样的,这些方法往往采用教科书的方法或者以前系统的方法,所以他们这些方法是有可能被利用起来 。
第三,未初始化的问题 。栈上的问题由德国人在06年详细讨论过 。头一次压栈的时候,在栈上写需要内容,然后函数退出,导致栈顶上移,有问题的函数压栈时正好利用这段栈空间,如果函数中发现了未初始化问题,比如数组,那么其内容刚好是我们刚写入的内容的栈空间,就可能被利用 。先把堆里的大部分内容写成自己需要的内容,未初始问题发生时,比如堆里指针的内容就可能指向我们需要的内容 。目前这个问题是大量存在的,OFFICE存在了很多 。比如这个月微软补丁,excel那一个补丁里就包括很多这样的问题 。你可以对比新旧的OFFICE软件,你发现 OFFICE2007有一些新加的代码就是做初始化工作的 。