缺陷的定义
1、软件未达到产品说明书的功能;
2、软件出现了产品说明书指明不会出现的错误;
3、软件功能超出产品说明书指明的范围;
4、软件未达到产品说明书未指出但应达到的目标;
5、软件测试人员认为难以理解、不易使用、运行速度缓慢、或用户认为不好;
缺陷的特征
1、看不到:软件的特殊性决定了缺陷不易看到;
2、看到抓不到:发现了缺陷,但不易找到问题发生的原因;
缺陷来源
1、产品规格说明书:说明书不够全面、经常变动,或开发小组沟通问题导致的理解不一致;
2、软件设计:无设计或设计不好,经常变动;
3、代码编写或其他问题,占缺陷的20%左右;
缺陷产生的原因
1、需求解释错误;
2、用户需求定义错误;
3、需求记录错误;
4、设计说明有误;
5、编码说明有误;
6、程序代码有误;
7、数据输入有误;
8、测试错误;
9、问题修改不正确;
10、不正确的结果由其他缺陷产生;
测试的定义
狭义:程序测试是为了发现错误而执行程序的过程;
广义:为了更早的发现问题,将测试延伸到需求评审、设计审查活动中,也就是将“软件质量保证”的部分活动归为测试活动。
软件测试的定义:软件测试是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。
软件测试的目的:证明程序中有故障存在,并尽最大可能尽早找出最多的错误。测试不是为了证明程序是正确的,而是应从软件包含有缺陷和故障这个假定去进行测试活动,并从中尽可能多的发现问题。实现这个目的关键是如何合理地设计测试用例,在设计测试用例的时候,要着重考虑那些易于发现程序错误的方法策略与具体数据。
原则:软件测试,从不同的角度出发会派生出两种不同的测试原则。
从用户的角度出发,就是希望通过软件测试能充分暴露软件中存在的问题和缺陷;
从开发者的角度出发,就是希望测试能表明软件产品不存在错误,已经正确地实现了用户的需求。
中国软件评测中心的测试原则,就是从用户和开发者的角度出发进行软件产品测试的。
为了达到上述的原则,需要注意以下几点:
1.应当把“尽早和不断地测试”作为开发者的座右铭。
2.设计测试用例时,应该考虑到合法的输入和不合法的输入,以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。
3.一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。
4.对测试错误结果一定要有一个确认的过程。一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。
5.制定严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。
6.回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见。
7.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。
测试在各个阶段的作用
项目规划阶段:负责从单元测试到系统测试的整个测试阶段的监控。
需求分析阶段:确定测试需求分析、系统测试计划的制定、评审后成为管理项目。
详细设计和概要设计阶段:确保集成测试计划和单元测试计划完成。
编码阶段:由开发人员进行自己负责部分的测试代码。在项目较大时,由专人进行编码阶段的测试任务。
测试阶段:依据测试代码进行测试,并提交相应的测试状态报告和测试结束报告。
缺陷发现的越早,则修复这个缺陷的代价就越小,在需求、设计、编码、测试、发布等不同的阶段,发现缺陷后修复的代价都会比在前一个阶段修复的代价提高10倍;
软件测试策略
软件测试策略就是测试将按照什么样的思路和方式进行。通常,软件测试要经过单元测试、集成测试、确认测试、系统测试和验收测试。
单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。
集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。
确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。
软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。
验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。经验收后,将软件提交用户。
软件测试技术
按照软件测试用例的设计方法而论,软件测试可分为白盒测试法和黑盒测试法;
按照软件测试是否执行程序而论,软件测试又可以分为静态测试和动态测试;
按照软件设计方法是否采用面向对象设计技术而论,软件测试又可以分为传统测试方法和面向对象测试方法;
按照网络环境下C/S应用结构的特定环境而论,软件测试又有其相应的方法。这些都是软件测试具体的测试方法。
软件开发项目组成员
项目管理员:由他们全程负责整个软件开发项目,通常负责编写产品说明书、管理进度、进行重大决策。
设计师或系统工程师:他们的角色是担任软件小组的技术专家,需要具有丰富的经验,可以胜任设计整个系统构架或软件构思。
程序员:由他们负责设计、编写并修复软件中的缺陷。他们与项目管理员和设计师密切合作生产软件,然后与项目管理和测试员密切合作修复软件缺陷。
软件测试员:我们负责找出并报告软件产品的问题,与小组全部成员在开发过程中密切合作,进行测试并报告发现的问题。
技术作者、用户助手、用户培训专员、手册编写人员或者文案专员:由他们来负责编制
软件产品附带的文件和联机文档。
软件开发的基本过程可以分为需求分析、设计、编码、测试和维护阶段,即通常所说的“传统生命周期”,也就是“瀑布模型”。
需求分析: 根据客户的要求,清楚了解客户需求中的产品功能、特性、性能、界面和具体规格等,然后进行分析,确定软件产品所能达到的目标。
设计: 根据需求分析的结果,考虑如何在逻辑、程序上去实现所定义的产品功能、特性等,可以分为概要设计和详细设计,也可分为数据结构设计、软件体系结构设计、应用接口设计、模块设计、界面设计等。
编程: 将设计转换成计算机可读的形式。
测试: 对设计、编程进行验证和用户需求确认的过程
维护:维持软件运行,修改软件缺陷、增强已有功能、增加新功能、升级等。
小 结
(1)对于软件缺陷的精确定义,通常有下列5条描述:
软件未达到产品说明书的功能
软件出现了产品说明书指明不会出现的错误
软件功能超出产品说明书指明范围
软件未达到产品说明书虽未指出但应达到的目标
软件测试员认为难以理解、不易使用、运行速度缓慢、或者最终用户认为不好
(2)软件缺陷第一大原因就是软件产品规格说明书,第二大原因是软件设计,第三个原因才是编写代码和其它原因;前两个原因至少占了80%以上。
(3)软件测试的定义:软件测试是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。
(4)软件测试要经过单元测试、集成测试、确认测试、系统测试和验收测试。