1. 软件缺陷有哪些表现
常见的软件缺陷有以下四种:
第一,栈溢出。就是在栈中申请一段内存,一般是数组或字符串,在对这段内存做操作的时候,错误的写操作可能导致栈中也特殊意义的地址被用户的输入内容所控制。最早发现是一些字符串操作的函数中,比如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有一些新加的代码就是做初始化工作的。
第四,二次释放或者叫double free问题。内存泄露是现代软件大敌,特别是服务器软件。有很多程序员害怕发生这样的问题,申请内存时总是想释放它,结果释放多了几次,这样也会有安全问题。曾经在linux上的方法很巧妙、经典,但是在目前Windows上比较难以利用。很多软件采用自己管理内存方法,那么就很可能被利用到。
2. 什么是软件缺陷为何软件缺陷难以避免
广联达其缺点你开发人员都不知道那里怎么扣除或则数据连接,毛病很大,一直更新不断,虽说是推广做的好,但是真正用的时候麻烦很多,鲁班钢筋稍微好点,其他方面不太人性化,没有广联达做的好,我作为中间人说的,都可以,广联达、鲁班复制狗专营。
3. 软件缺陷的状态有哪些
bug提交到缺陷库中会自动的被设置成New状态 Assigned(已指派): 当一个bug被认为New之后,将其分配开发人员,开发人员将确认这是否是一个bug,如果是,开发组的负责人就将这个bug指定给某位开发人员处理,并将bug的状态设定为“Assigned” Open(已打开): 开发人员开始处理bug时,他将这个bug的状态设置为“Open”,表示开发人员正在处理这个“bug” Fixed(已修复): 当开发人员进行处理(并认为已经解决)之后,他(她)就可以将这个bug的状态设置为“Fixed”并将其提交给开发组的负责人,然后开发组的负责人将这个bug返还给测试组 Rejected(被拒绝): 测试组的负责人接到上述bug的时候,如果他(她)发现这是产品说明书中定义的正常行为或者经过与开发人员的讨论之后认为这并不能算作bug的时候,开发组负责人就将这个bug的状态设置为“Rejected” Postponed(延期): 有些时候,对于一些特殊的bug的测试需要搁置一段时间,事实上有很多原因可能导致这种情况的发生,比如无效的测试数据,一些特殊的无效的功能等等,在这种情况下,bug的状态就被设置为“Postponed” Closed(已关闭): 测试人员经过再次测试后确认bug已经被解决,将bug的状态设置为“Closed” 如经过再次测试发现bug仍然存在,测试人员将bug再次开发组,将bug的状态设置为“Reopen”
4. 软件缺陷的五种特征
简单说下软件缺陷的最明显的特征吧
集结(二八定理)
缺陷往往喜欢扎堆,一个模块已经发现的缺陷比别的模块多,
通常不是代表这个模块已经把缺陷暴露完了,而是意味着这
个模块还存在有同样多的缺陷尚未被发现。这就是着名的二
八定理:80%的缺陷出现在 20%的模块。
缺陷抗药性
测试进行得越多,新缺陷就越难被发现
1. 因为之前一直使用同样的测试思路,同样的一套测试用
例,没有新的突破。
2. 某些缺陷天然地只有在很特殊或者很极端的情况下才会
被触发
并非所有缺陷都要修改
p有一些原因,使得有些缺陷我们不修复
1. 修复的风险太大
2. 没有足够的时间
3. 下一版本修复
p 所有未修复的bug都处于“挂起”状态
5. 软件缺陷的定义是什么
软件错误:软件生存期内的人为错误,导致软件缺陷产生。
是人为过程,相对于软件本身是外部行为。
软件缺陷:存在于软件(文档、数据、程序)中的偏差,导致软件在某个特定条件下出现故障,这时称软件缺陷被激活。
软件故障:软件运行过程中出现的不希望或不可接收的内部状态。是动态行为。
软件失效:软件运行时产生的不希望或不可接受的外部行为结果。
综上:软件错误是一种人为错误。一个软件错误必定产生一个或多个软件缺陷。当一个软件缺陷被激活时,便产生一个软件故障;同一个软件缺陷在不同条件下被激活,可能产生不同的软件故障。软件故障如果没有集市的容错措施加以处理,便不可避免地导致软件失效;同一个软件故障在不同条件下可能产生不同的软件失效。
6. 判断一个软件缺陷的依据是什么
当然是漏洞了(BUG),还有就是用户体验,如果软件大方向错的话,用户不喜欢就彻底完了,如果是方向对,就要强调软件的使用体验,不断优化,如果使用不便或者出错等不良体验就被称作为缺陷
7. 软件缺陷是什么
一般我们都认为测出一个问题就是一个bug,其实这是不对的,假设测试10个问题就10个bug,而修改一出就全解决了,程序员肯定认为冤枉自己。
所有软件是文档,代码等组成的,最初的错误是来自于这些软件错误(software error),如代码中加法写成减法。软件错误导致软件缺陷(software defect),如设计缺陷,代码缺陷等,可用静态测试,如走查,静态检查,测试床(军事软件用的技术)等,软件的缺陷导致一个或多个软件故障 (software fault),故障有内部故障,外部故障,也就是我们所说的bug,软件故障导致了软件在功能操作等方面的失效(software failure)。
我们平时测的bug实际上是软件故障于失效的体现。一旦软件错误得到修改,相应的故障与失效也就解除了。这样分有助于我们定位问题,找到问题。
详见《软件可靠性工程》
8. 生活中什么是软件缺陷
所谓生活中的“软件”是一种形象比喻,即将人的四肢健全、体力等客观外在比喻成“硬件”,那么,人的各种生活技能和应变能力可以被比喻为“软件”。则“生活软件缺陷”就是指生活技能和应变能力方面不足。
9. 1.软件缺陷和故障是什么,举例说明。 2.软件测试的概念,其处理的基本问题有哪些
软件缺陷和故障,常常又被叫做Bug。所谓软件缺陷,即为计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。比如一个登陆界面,没有密码验证直接回车进入了,这就是大大的bug。
软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码实现的最终审查,它是软件质量保证的关键步骤。通常对软件测试的定义有两种描述:
定义1:软件测试是为了发现错误而执行程序的过程。
定义2:软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计的一-批测试用例,并利用这些测试用例运行程序以及发现错误的过程,即执行测试步骤。
处理的基本问题:
(1)测试是为了发现程序中的错误而执行程序的过程。
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
(3)成功的测试是发现了至今为止尚未发现的错误的测试。
软件测试原则:
对计算机软件进行测试前,首先需遵循软件测试原则,即不完全原则的遵守。不完全原则即为若测试不完全、测试过程中涉及免疫性原则的部分较多,可对软件测试起到一定帮助。
因软件测试因此类因素具有一定程度的免疫性,测试人员能够完成的测试内容与其免疫性成正比,若想使软件测试更为流畅、测试效果更为有效,首先需遵循此类原则,将此类原则贯穿整个开发流程,不断进行测试,而并非一次性全程测试。