使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
(1)程序测试是为了发现错误而执行程序的过程
(2)好的测试用例是发现迄今为止尚未发现的错误的测试用例
(3)成功的测试执行是发现了迄今为止尚未发现的错误的测试用例
(1)软件测试是一个过程,包含若干活动,运行软件测试只是活动之一
(2)进行软件测试可以是人工方式也可以借助工具
(3)软件测试可以运行软件也可以不运行软件,即为动态测试方法和静态测试方法
(4)软件测试的目的不仅仅是为了发现错误
(1)获取系统在可接受风险范围可用的信心
(2)尝试在非正常情况和条件下的功能和特性
(3)保证一个工作产品是是完整的并且可用或者可被集成
(1)发现缺陷、错误和系统不足
(2)定义系统的能力和局限性
(3)提供组件、工作产品和系统的质量信息
(1)澄清系统的规格和性能
(2)提供预防或减少可能制造错误的信息
(3)在过程中尽早检测错误
(4)确认问题和风险,并且提前确认解决这些问题和风险的途径
软件开发生命周期包括六个阶段,分别为:计划(Planning),需求分析(Requirement Analysis),设计(Design),程序编码(Coding),测试(Testing),运行和维护(Run and Maintenance),各个阶段的工作内容如下:
(1)确定软件开发总目标
(2)给出软件的功能、性能、可靠性以及接口等方面的设想
(3)研究完成该项目的可行性,探讨问题解决方案
(4)对可供开发使用的资源、成本、可取得的效益和开发进度做出估计
(5)制定完成开发任务的实施阶段
对开发的软件进行详细的定义,由需求分析人员和用户共同讨论决定,那些需求是可以满足的,并且给予确切的描述,写出软件需求说明书SRS(Sofeware Requirement Specification)
设计是软件工程的技术核心,这个阶段需要完成设计说明书。
(1)概要设计(High Level Design):在设计阶段把各项需求转换成相应的体系结构,每一部分是功能明确的模块、接口
(2)详细设计(Low Level Design):对每个模块要完成的工作进行具体的描述,即算法和数据结构
(1)单元测试(Unit Testing),参照LLD文档,对每一个函数进行测试。
(2)集成测试(Integration Testing),参照HLD文档,对函数与函数的集成,模块与模块的集成进行测试。
(3)系统测试(System Testing),参照SRS文档,对每一个功能需求、性能需求进行测试。
这个阶段将软件交付用户投入正式使用,以后便进入维护阶段,可能有很多原因需要对它进行修改,如软件错误、系统软件升级、增强软件功能、提高性能等。
人员、过程、工具:只有合适的人员借助合适的工具经过合适的过程才能研发出高质量的软件,项目组参与人员有:
(1)软件开发组:开发经理、分析人员、设计人员、开发人员
(2)软件测试组:测试经理、测试人员。
(3)配置管理组:配置经理、CMO(配置管理员)。
软件开发模型有3种:瀑布模型、螺旋模型、RUP模型。
适用范围:项目小,需求明确。
(1)测试介入比较晚
(2)下一个阶段依赖于上个阶段的结束(阶段依赖性强)
(3)不支持需求变更的项目
(1)综合了基本的瀑布模型和原型法
(2)风险分析
(3)迭代过程
(4)客户尽早参与,更能保证项目成功
(5)测试介入较晚
(1)活动:工作流、支持流,
(2)阶段:初始化、细化、构造、发布,工作流在各个阶段都会体现
(3)增量、迭代
(1)遗漏:规定的或预期的功能未体现在产品中(可能未将规格说明全面实现,也可能需求分析阶段就遗漏了需求)
(2)错误:未将规格说明正确实现(可能设计错误,也可能编码错误)
(3)额外的实现:规格说明并未规定的需求被纳入产品,得到实现
(1)缺乏有效的沟通,或者没有进行沟通
(2)软件复杂度越来越高
(3)编程产生错误
(4)不断变更的需求
(5)时间的压力即项目进度的压力
(6)缺乏文档的代码
(7)软件开发工具本身隐藏的问题
(8)人员问题(人员自大)
遗漏、错误、额外的实现(冗余)
缺陷、故障、失效