一、软件为什么会有缺陷
1. 人的因素:
1.开发人员的经验,技术与态度
2.沟通问题
3.需求变更频繁
4.进度压力大
5.管理上的缺失
.……
2. 其他因素
1.周围环境的影响
2.使用环境的影响:硬件的老化
3.软件系统越来越复杂
……
二、软件测试的定义
1. 经典定义:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
2. IEEE定义(1983):使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
三、软件测试的目的、目标
1. 发现一些可以通过测试避免的开发风险
2. 好的测试方案极可能发现迄今为止尚未发现的错误
3. 成功的测试是发现了至今为止尚未发现的错误
4. 测试并不仅仅是为了找出错误。通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进
5. 通过分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性
6. 没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法
7. 根据测试目的的不同,还有回归测试、压力测试、性能测试等,分别为了检验修改或优化过程是否引发新的问题、软件所能达到处理能力和是否达到预期的处理能力等。
四、软件测试的原则
原则一:测试可以发现缺陷的存在
原则二:穷尽测试时不可能的
原则三:测试应该尽早的介入
原则四:缺陷的集群效应,即测试对象中发现的80%的缺陷来自20%的模块
原则五:杀虫剂悖论,即同样的测试用例被重复执行多次,将不能发现新的缺陷
原则六:测试活动依赖于测试对象的背景
原则七:不存在缺陷并不代表是有用的系统
五、软件测试的对象
程序、数据、文档、脚本……
六、测试心理学
1. 程序测试的过程具有破坏性
*如果把测试目标定位于要证明程序中没有缺陷,那么就会在潜意识中选择那些使程序失效可能性较小的数据
*如果把测试目标定位于要证明程序中存在缺陷,那么就会选择一些容易发现程序缺陷的测试数据
*而后一种态度会比前者给程序增加更多的价值。
2. 程序员应该避免测试自己的程序
建设和否定相互矛盾
3. 程序设计组织不应测试自己的程序
软件生产的三个最重要的因素 独立测试的优点
质量 客观性
进度(时间) 专业性
费用(成本) 权威性