软件开发流程 软件测试 软件测试就是利用测试工具按照测试
和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设 计和维护测试系统,对测试方案可能出现的问
进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。 HYPERLINK "http://baike.baidu.com/image/35e940dff621c53049540390" \t "_blank" 概念 使用人工或者自动手段来运行或测试某个系统的过程,其目 的在于检验它是否满足
的需求或弄清预期结果与实际结果之间的差别. 它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度 (correctness) 、完全度(completeness)和质量(quality)的软件过程;是SQA(software quality assurance)的重要子域。 Grenford J.Myers曾对软件测试的目的提出过以下观点: (1)测试是为了发现程序中的错误而执行程序的过程; (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; (3)成功的测试是发现了至今为止尚未发现的错误的测试。 然而,这种观点指出测试是以查找错误为中心,而不是为了演示软件的正确功能. (1)测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生趋势,可以帮助项目管 理者 发现当前软件开发过程中的缺陷,以便及时改进; (2)这种分析也能帮助测试人员设计出有针对性的测试
,改善测试的效率和有效性; (3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法 软件测试完整分类,参见:软件测试的完整分类 原则 软件测试的几大原则: 1.软件开发人员即程序员应当避免测试自己的程序 2. 应尽早地和不断地进行软件测试 应当把软件测试贯穿到整个软件开发的过程中,而不应该把软件测试看作是其过程中的一个独立阶 段。因为在软件开发的每一环节都有可能产生意想不到的问题,其影响因素有很多,比如软件本身的抽象性和复杂性、软件所涉及问题的复杂性、软件开发各个阶段 工作的多样性,以及各层次工作人员的配合关系等。所以要坚持软件开发各阶段的技术评审,把错误克服在早期,从而减少成本,提高软件质量。 3.对测试用例要有正确的态度:第一,测试用例应当由测试输入数据和预期输出结果这两部分组 成;第二,在设计测试用例时,不仅要考虑合理的输入条件,更要注意不合理的输入条件。因为软件投入实际运行中,往往不遵守正常的使用方法,却进行了一些甚 至大量的意外输入导致软件一时半时不能做出适当的反应,就很容易产生一系列的问题,轻则输出错误的结果,重则瘫痪失效!因此常用一些不合理的输入条件来发 现更多的鲜为人知的软件缺陷。 4.人以群分,物 以类聚,软件测试也不例外,一定要充分注意软件测试中的群集现象,也可以认为是“80-20原则”。不要以为发现几个错误并且解决这些问题之后,就不需要 测试了。反而这里是错误群集的地方,对这段程序要重点测试,以提高测试投资的效益。 5.严格执行测试
,排除测试的随意性,以避免发生疏漏或者重复无效的工作。 6.应当对每一个测试结果进行全面检查。一定要全面地、仔细地检查测试结果,但常常被人们忽 略,导致许多错误被遗漏。 7.妥善保存测试用例、测试计划、测试报告和最终分析报告,以备回归测试及维护之用。 在遵守以上原则的基础上进行软件测试,可以以最少的时间和人力找出软件中的各种缺陷,从而达到 保证软件质量的目的。 内容 软件测试主要工作内容是验证 (verification)和确认(validation ),下面分别给出其概念: 验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软 件做了你所期望的事情。(Do the right thing) 1.确定软件生存周期中的一个给定阶段的产品是否达到前 阶段确立的需求的过程; 2.程序正确性的形式证明,即采用形式理论证明程序符合设计规约规定的过程; 3.评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求 相一致进行判断和提出报告。 确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件 的逻辑正确性。即保证软件以正确的方式来做了这个事件(Do it right) 1.静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性; 2.动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。 软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期间各个阶段所产生的文档,如 需求规格说明、概 要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。 分类 从是否关心软件内部结构和具体实现的角度划分 A.白盒测试 B.黑盒测试 C.灰盒测试 从 是否执行程序的角度 A.静态测试 B.动态测试。 从 软件开发的过程按阶段划分有 A.单元测试 B.集成测试 C.确认测试 D.系统测试 E.验收测试