软件缺陷:
1)软件未实现产品说明书要求的功能
2)软件出现了产品说明书指明不应该出现的错误
3)软件实现了产品说明书未提到的功能
4)软件未实现产品说明书虽未明确提及但应该实现的目标
5)软件难以理解、不易使用、运行缓慢或者从测试员的角度看最终用户会认为不好
软件测试:为了发现软件产品中的各种缺陷,而对软件产品进行验证和确认的活动过程,此过程贯穿整个软件开发生命周期。 简单的说,软件测试是以发现错误为目的而执行的一个程序或系统的过程。
软件测试的目的:
- 验证软件需求和功能是否得到完整实现
- 验证软件是否可以发布
- 尽可能多的发现软件中的bug
- 尽可能早的发现软件中的bug
- 对软件质量做出合理评估
- 预防下个版本可能出现的问题
- 预防用户使用可能出现的问题
- 发现开发过程中的问题和风险
软件测试的原则:
- 所有测试的标准都是建立在用户需求之上 。
- 合理控制测试深度与广度,完全测试不可能,测试的投入与产出要均衡。
- 80-20原则,软件中80%的bug可以在分析、设计与评审阶段就能被发现与修正,16%的缺陷在系统的软件测试中发现,最后剩下的4%是用户长期使用的过程中才能暴露出来。
- 尽可能早的开展测试,越早发现错误,修改的代价越小。
- 发现错误较多的程序段,应进行更深入的测试。
- 软件项目一启动,软件测试也就是开始,而不是等程序写完,才开始进行测试 。
- 软件开发人员即程序员应当避免测试自己的程序
- 严格执行测试计划,排除测试的随意性,以避免发生疏漏或者重复无效的工作
优秀测试人员应具备的素质:1)沟通能力与表达能力 2)好奇心与怀疑精神 3)责任感与抗压能力 4)自信心,坚持自己的观点
5)耐心与细心 6)逆向思维的能力 7)善于学习与总结 8)团队协作精神 9)文档编写能力
优秀测试人员应具备的技能:1)精通业务知识 2)具备软件编程能力,比如C,C++,JAVA等。 3)可以用脚本语言编写小测试工具
4)主流操作系统应用与网络知识,可以搭建测试环境 5)熟练掌握各种数据库知识 6)精通软件测试理论与方法 7)掌握常用测试与开发工具的使用 8)优秀的文档编写能力
软件测试的组织架构:
1)项目型的测试组织:测试人员作为项目组的固定成员,从头到尾的跟着项目走
2)智能型的测试组织:测试人员参与到项目中,是以独立的测试部门委派的方式进入
3)综合型的测试组织:项目型与职能型的结构组合并加以改造而产生的。测试部门把测试人员,分为常规项目测试人员与专项测试人员。 测试部门会把常规测试人员长期委派到项目组中,成为项目中的一员。专项测试人员,一般由性能测试工程师、自动化测试工程师、安全性测试工程师等组成。只有当项目发生专门需求测试时,测试部门才灵活把专项测试人员委派到各个项目组进行专项测试。
软件测试的分类:
1)按照是否执行被测试软件来分:
静态测试:是指不运行软件,测试包括代码检查、静态结构分析、代码质量度量等,主要对软件需求说明书、设计说明书、软件源代码进行检查与分析。
动态测试:指通过运行被测程序,检查运行结果与预期结果的差异,分析差异原因,并分析软件运行效率、健壮性等性能。 动态测试是目前公司主要的测试方式
2)按照测试技术分为黑盒测试和白盒测试:
黑盒测试:黑盒测试又叫功能测试或数据驱动测试,在完全不考虑程序内部结构和内部特性的情况下,通过软件的外部表现来发现其缺陷和错误。
白盒测试:白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构进行测试程序,通过测试来检测产品内部逻辑是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
3)按照测试手段来分,可以分为手工测试和自动化测试
4)按照过程阶段来分,可以分为单元测试、集成测试、系统测试和验收测试
单元测试:通过模块(类/方法/函数)测试,使代码达到设计要求 主要目的是针对编码过程中可能存在的各种错误,例如用户输入验证过程中的边界值的错误。
集成测试:将经过单元测试的模块逐步组装成完整的程序。 主要目的是检查各单元与其它程序部分之间的接口是否存在问题,各模块功能之间是否有影响。
系统测试:是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起进行测试。 系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方 ,进行改正。
验收测试:验收测试是在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的最后一次软件测试活动,也称为交付测试。 通常由业务专家或用户进行,以确认产品能真正符合用户业务上的需要。
软件开发流程(软件生命周期):
计划-》需求分析-》设计-》程序编写-》测试-》运行/维护
软件测试流程:
测试计划-》需求分析-》测试用例-》测试用例执行-》提交bug-》回归测试
软件开发模型:
- 瀑布模型:适用于需求很明确的项目,分阶段向下进行,无法回溯
- 迭代模型:需求不明确,迭代版本系统
- 敏捷开发模型:
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。 在敏捷开发中,软件项目被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
- 测试驱动开发模型:先编写测试代码,再写开发代码
软件测试模型:
V模型:反映了测试与开发阶段之间一一对应的特点,测试在开发之后,出错后回归测试量大
W模型:测试伴随整个开发周期,测试与开发同步进行,有利于尽早发现问题
H模型:软件测试活动完全独立,与其他流程并行