目录
-
- 什么是软件
- 软件危机与软件工程
- 软件测试的产生、概念和意义
- 软件测试的目的和原则
- 测试的现状和发展
- 测试人员必备素质
- 软件缺陷
- 软件质量
什么是软件
1. 软件的定义
- 软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据和文档的完整集合。
2. 软件与程序的区别(软件=程序+数据+文档)
- 程序:是使程序能够完成预定功能和性能的可执行的指令序列
- 数据:是使程序能够适当地处理信息的数据结构,输入与输出,数据库等
- 文档:是开发、使用和维护程序所需要的文图资料,需求分析、概要设计、详细设计等各阶段文档,还包括用户文档
3. 软件的分类—按层次
- 系统软件—在硬件之上:
(1)操作系统
(2)系统使用工具
(3)系统扩充工具 - 支持软件—为了方便操作计算机
(1)对操作系统进行控制:界面工具、计算机管理类工具等
(2)用来开发应用软件:软件开发工具、软件测评工具、数据库管理系统等 - 应用软件—最常用的一类软件
(1)科学和工程计算软件
(2)文学和数据处理软件
(3)图形图像处理软件
(4)事务管理处理软件
(5)游戏娱乐软件
4. 软件的分类—按使用范围
- 单机版软件:不需要也不会和其他计算机进行交互的软件
- 分布式软件(需要在多台计算机进行协同工作的软件)
(1)C/S(客户端/服务器)结构
(2)B/S(浏览器/服务器)结构
5. 软件的特性
- 软件是一种逻辑实体,具有抽象性
- 软件产品的生产你主要是研制,生产成本主要在开发和研制,开发研制完成后,通过复制就产生了大量软件产品
- 软件在使用过程中,没有磨损、老化的问题
- 软件对硬件和环境有着不同成都的依赖性。这导致了软件移植的问题
- 软件的研发至今尚未完全摆脱手工作坊式的研发方式,生产效率低
- 软件是复杂的,而且以后会更加复杂
- 软件的成本相当昂贵
软件危机与软件工程
1. 软件危机
- 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重的问题
- 软件危机包括两方面问题:
(1)如何开发软件,以满足不断增长,日趋复杂的需求
(2)如何维护数量不断膨胀的软件产品 - 对软件开发成本和进度的估计常常很不准确
- 用户“已完成”的软件系统不满意的现象经常发生
- 软件产品的质量往往靠不住
- 软件常常是不可维护的
- 软件通常没有适当的文档资料
- 软件成本在计算机系统成本中所占比例逐年上升
- 软件开发生产率提高的速度,跟不上硬件的发展速度,也远远跟不上计算机应用速度普及及深入的趋势
- 忽视软件开发前期的调研和需求分析工作
- 缺乏软件开发的经验和有关软件开发数据的积累,使得开发计划很难定制
- 开发过程缺乏同统一的、规范化的方法论指导
- 忽视与用户、开发组成员间的及时有效的沟通
- 文档资料不规范或不正确,导致开发者失去工作的基础,管理者失去管理的依据
- 没有完善的质量保证体系
2. 软件工程
- 软件工程是一门研究怎么用系统化、规范化、数量化等工程原则和方法去进行软件的研发和维护的学科。
(1)软件研发技术包括:软件研发方法学、软件工具和软件工程环境
(2)软件项目管理包括:软件度量、项目估算、进度控制、人员组织、设置管理、项目计划等
软件测试的产生、概念和意义
1. 软件测试产生的背景
- 程序规模的爆炸式增长
(1)程序代码规模显著增大
(2)程序结构和算法更加复杂
(3)程序模块接口增多 - 在程序员与用户需求间寻找平衡点
(1)程序员关注:设计需求、技术内涵
(2)用户关注:满足自身特定的需求
2. 什么是软件测试
- 最浅显直观的理解
(1)在购买商品时,消费者会发现在商品上会贴有一个”QC”标签,这就是产品经过质量检验的标志。
(2)软件测试就好比制作工厂的质量检验工作,对软件产品和阶段性工作成果进行质量检验。
3. 软件测试的重要性
- 软件bug对我们的生活,工作都会带来毁灭的的破坏。据悉,每年的软件bug会让整个市场经济带来近600亿美元的损失!
4. 软件测试的定义
- 软件测试的概念
(1)是为了发现错误而执行程序的过程
(2)应关心程序的效率和鲁棒性等因素
(3)检验软件是否满足规定的需求
(4)弄清预算与现实结果之间的差别 - 定义:使用人工或自动手段,来运行或测试某个系统的过程。其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
- 软件测试活动一般包含:
(1)制定测试计划
(2)设计测试用例
(3)实施测试
(4)提交缺陷 告
(5)测试总结
软件测试的目的和原则
1. 软件测试的目的
- 测试是程序的执行过程,目的在于发现错误
- 一个成功的测试用例在于发现至今未发现的错误
- 一个成功的测试是发现了至今未发现的错误的测试
- 确保产品完成了它所承诺或公布的功能,并且可以访问到的功能都有明确的书面说明。
- 确保产品满足性能和效率的要求
- 确保产品是健壮的合适应用户环境的
2. 软件测试的原则
- 软件测试应尽早执行
- 软件测试应贯穿于整个软件生命周期
- 软件测试应追溯需求
- 软件测试应由第三方来 构造
(1)程序设计机构不应该测试自己的程序,程序员也应避免测试自己的程序。
(2)第三方可以是测试部门,现在流行的测试外包项目也是典型的由第三方来构造测试的情况。 - 穷举测试是不可能的,要遵循Good-enough原则
- 必须确定预期输出(或结果)
(1)设计测试用例(包括其他测试内容),必须先给出预期测试结果,作为检验测试结果的基准。 - 必须彻底检查每个测试结果
(1)重复的缺陷描述可能属于不同的模块,要分别处理。
(2)相似的缺陷 告很容易被作为重复的缺陷 告被剔除。
(3)一个缺陷被两个人提交后,可能都认为是对方跟踪,结果谁都没有跟踪。 - 充分注意测试中的群集现象:
测试后程序中残存的错误数目与该程序中已发现的错误数目很可能成正比 - 其他值得注意的规律和经验
(1)缺陷的二八定理
(2)严格执行测试计划,排除测试的随意性
(3)注意合法合理的输入,也要注意非法的非预期的输入
(4)检查程序是否做了不该做的
(5)测试应从“小规模”开始,逐步转向“大规模”
(6)反复使用同样的测试会使软件具有抵抗力 (杀虫剂悖论)
(7)关注缺陷的修复
(8)测试活动依赖于测试背景
测试的现状和发展
1. 软件测试的现状和前景
- 处于发展阶段,目前还是以手工测试为主
- 国内外软件企业越来越重视软件测试
- 软件测试行业发展的原因
(1)市场竞争的压力
(2)不断提升的用户需求
(3)整个行业逐渐的规范
(4)用户技术水平的提升 - 自动测试工具的出现提高了测试的效率
2. 软件测试思维模型——正向测试
- 测试是验证软件的正确性
(1)测试的目的是验证软件是否能够工作
(2)测试就是建立一种信心,确信程序能够按预期的设想进行
(3)测试是一颗“定心丸”,吃完了可以安心起飞
3. 软件测试思维模型——逆向测试
- 测试就是发现软件中的缺陷BUG
(1)测试是为了发现错误而执行一个程序或者系统的过程
(2)测试是为了证明程序有错,而不是证明程序无错误。
(3)一个好的测试用例在于它能发现以前未发现的错误。
(4)一个成功的测试是发现了以前未发现的错误的测试。
4. 软件测试的发展
(1)以调试为主:20世纪50年代,由编程人员完成
(2)以证明为主:1957年,《软件测试发展》一书中强调了调试和测试的区别,标志着软件测试自立门户
(3)以破坏为主:1979年,《软件测试之艺术》一书中提出,测试是为发现错误而执行程序的过程——是一大进步,使测试更加全面
(4)以评估为主:1983年,V&V(验证和确认)理论提出在软件生命周期中使用分析、评论、测试来评估产品,软件测试得到快速发展
(5)以预防为主:是当下软件测试的主流思想之一,测试应贯穿于整个软件生命周期
测试人员必备素质
1. 责任心
2. 沟通能力
3. 团队合作精神
4. 耐心、细心、信心
5. 时刻保持怀疑的态度,并且有缺陷预防意识
6. 具备一定的编程经验
软件缺陷
** 1. 人类历史上的第一个BUG**
- 万”虫”之母,史上留名
(1)1947年9月9日下午3点45分,Grace Murray Hopper 在她的记录本上记下了史上第一个计算机Bug—— 在Harvard Mark II计算机里找到的一只飞蛾,她把 飞蛾贴在日记本上,并写道”First actual case of bug being found”。
(2)这个发现奠定了Bug这个词在计算机世界的地位, 变成无数苦逼程序员的噩梦。 从那以后,Bug这 个词在计算机世界表示计算机程序中的错误或者 疏漏,它们会使程序计算出莫名其妙的结果,甚 至引起程序的崩溃。
2. 缺陷的识别
- 什么是缺陷
(1)不符合设计要求
(2)不满足用户确实需求
注意:有些问题看似错误但不是缺陷,有些问题看似正确但却是缺陷
3. 产生缺陷的原因
- 人员之间的沟通交流不够,交流上有误解或者根本不进行交流
- 文档不完善
- 需求不断变化
- 参与人员的过度自信
- 程序设计本身有错误
- 软件复杂性
- 工期短,任务重,时间压力大
- 软件开发工具或系统软硬件自身含有缺陷
4. 判断发现的问题是否是缺陷的方法
- 通过参考文档来确认缺陷
- 通过了解软件产品的行业背景(或参考同类典型软件)来发现缺陷
- 通过沟通来确认和识别缺陷
5. 再现与优化缺陷
- 再现(又叫重现)与优 化缺陷的必要性
- 为什么要再现与优化缺 陷(需要特别注意,优化缺陷并不是指优化缺陷本身,而是优化缺陷的再现步骤)
- 关于软件中“随机”出现的缺陷
6. 怎样有效记录缺陷
- 保证重现缺陷
- 分析故障–使用最少步骤复现故障
- 包含所有重现缺陷的必要步骤
- 方便阅读
- 尽量简单——一个缺陷一个 告
- 注意自己的语气
值得注意的经验: 告不能重现的缺陷;不能夸大缺陷;小缺陷(甚至建议)也要 告;引用别人的 告时,不能修改,可以添加批注之类的补充评论
7. 缺陷 告的用途
- 记录缺陷
- 缺陷分类
- 缺陷跟踪
8. 缺陷的分类
- 按问题引用不同
- 按功能(模块)
- 按缺陷的严重程度
(1)影响进度的问题
(2)死机
(3)功能问题
(4)界面问题
(5)建议 - 按修复缺陷的优先级
(1)应立即修复的问题
(2)在产品发布之前必须修复的问题
(3)如果时间允许应该修复的问题
(4)可以在发布版本中存在的问题
备注:缺陷的严重程度和优先级各个软件公司可根据实际情况自行确定
9. 缺陷 告的分类
- 按缺陷所处状态分类
(1)待确认的
(2)新提交的
(3)已分配的
(4)问题未解决的
(5)带返测的
(6)已关闭的 - 按处理意见分类
(1)已解决的
(2)不是问题
(3)无法修复
(4)延迟解决
(5)重复bug
(6)无法实现
10. 缺陷 告的处理流程
11. 关于处理缺陷
(1)注意缺陷 告的处理成本
(2)修改缺陷要量力而行
(3)关注被推迟修改的缺陷
(4)如果决定据理争取就一定要赢
软件质量
1. 什么是软件质量
- 经典的“软件质量”定义:软件质量特性的总和,软件满足规定或潜在用户需求的能力。 简单的说,软件质量就是客户的满意度。
- 软件质量的组成部分
(1)软件产品的质量,即满足使用要求的程度(软件质量特性)
(2)软件开发过程的质量,即能否满足开发所带来的成本、时间和风险等要求(CMM、ISO9000)
2. 软件测试与软件质量
- 软件质量与软件过程的关系
(1)软件质量:软件产品的特性可以满足用户的功能、性能需求的能力。
(2)软件过程:软件生命周期中的活动,一般包括软件需求分析、软件设计、软件编码、 软件测试、交付、安装和软件维护。
(3)过程决定质量,软件过程决定软件质量,软件质量是在软件开发过程中逐渐建立起来 的。
(4)软件过程的优劣决定了软件质量的高低,好的过程是高效高质量的前提。人员和过程 是决定软件质量的关键因素,高质量的人员和好的过程应该得到好的产品。 - 软件测试与软件过程的关系
(1)在软件过程中注意把握测试的对象
(2)软件测试在软件生存周期中的位置:软件测试在软件生存周期中占有非常重要的位置,是对软件规格说明、设计和编码 的最后终审。 - 软件测试与软件质量的关系
(1)软件系统的开发包括一系列生产活动,其中由人带来的错误因素非常多。错误可能出 现在程序的最初阶段 ,其次目标可能是错误的或描述不完整,也可能在后期的设计和 开发阶段,因为人们不能完好无缺地工作和交流,软件开发过程中必须伴有质量保证 活动。
(2)软件测试是软件质量保证的重要手段,是规约、设计和编码的最终检查
3. 什么是保证软件质量的安全
- 只有坚持不懈的改进过程中的问题才是提高软件产品质量的根本出路,但是 注意过程并不意味着忽视技术。软件质量不是依靠软件测试来保证的,软件质 量需要靠不断的提高技术水平和改进软件开发过程来保证,正如牛奶的生产, 如果把所有对质量的期望都压在对最后一道工序的质检上,那将是一个什么样 的结果。
4. 正确认识软件测试
- 软件的质量不是靠测出来的
- 软件测试真的比开发容易么
(1)测试人员发现缺陷是测试的初步,还要分析定位缺陷;而且测试人员需要发现潜在的 难以被发现的缺陷
(2)测试人员需要开发测试工具和自动测试脚本
(3)测试人员必须精通整个业务 - 软件测试需要开发与测试人员的共同努力
(1)破坏性、建设性
(2)考虑角度不同
5. 软件质量的的特性
- 功能性:软件在指定条件下使用时,满足用户明确和隐含需求的功能的能力
(1)适合性:软件是否提供了相应的功能
(2)准确性:软件提供的功能是否正确(用户需要的)
(3)互操作性:产品与产品之间交互数据的能力,例如word对其他文档的支持能力
(4)安全性:允许经过授权的用户和系统能够正常的访问相应的数据和信息,禁止未授权的用户 访问等
(5)功能性的依从性:软件遵循与功能性相关的标准、约定或法规以及类似规定的能力。这些标 准要考虑国际标准、国家标准、行业标准、企业内部规范等 - 可靠性:软件在指定条件下使用时,维持规定的性能级别的能力。平均故障修复时间 (mean time to repair,MTTR)、平均无故障时间(mean time between failures, MTBF)
(1)成熟性:软件产品为避免软件内部的错误扩散而导至系统失效的能力(主要是对内错误的隔 离),异常等的处理
(2)容错性:软件防止外部接口错误扩散而导致系统失效的能力(主要是对外错误的隔离)
(3)易恢复性:系统失效后,重新恢复原有的功能和性能的能力。
(4)可靠性的依从性:软件遵循与可靠性相关的标准、约定或法规的能力 - 易用性:在指定使用条件下,产品被理解、 学习、使用和吸引用户的能力
(1)易理解性:软件交互给用户的信息时,要清晰,准确,且要易懂,使用户能够快速理解软件。
(2)易学性:软件使用户能学习其应用的能力。
(3)易操作性:软件产品使用户能易于操作和控制它的能力。
(4)吸引性:软件吸引用户的能力
(5)易用性的依从性:软件遵循与易用性相关的标准、约定、风格指南或法规的能力 - 效率性:在规定条件下,相对于所用资源的数量,软件产品可提供适当性能的能力
(1)时间特性:在规定条件下,软件执行其功能时,提供适当的响应和处理时间以及吞吐率的能 力,即完成用户的某个功能需要的响应时间
(2)资源利用性:在规定条件下,软件执行其功能时,使用合适的资源数量和类别的能力。如: CPU、内存、磁盘、IO、 络带宽等
(3)效率依从性:软件遵循与效率相关的标准或约定的能力 - 可维护性:软件可被修改的能力。修改可能包括修正、改进或软件对环境、需求和功能 规格说明变化的适应
(1)易分析性:软件诊断软件中的缺陷、失效原因或识别待修改部分的能力
(2)易改变性:软件产品使指定的修改可以被实现的能力
(3)稳定性:软件避免由于软件修改而造成意外结果的能力
(4)易测试性:使已修改软件能被确认的能力
(5)维护性的依从性:软件遵循与维护性相关的标准或约定的能力 - 可移植性:软件从一种环境迁移到另一种环境的能力
(1)适应性:适应不同平台
(2)易安装性:在指定环境中被安装的能力
(3)共存性:软件在公共环境中同与其分享公共资源的其他独立软件共存的能力
(4)易替换性: 软件产品在同样的环境下,替代另一个相同用途的软件产品的能力
(5)可移植性的依从性:软件遵循与可移植性相关的标准或约定的能力
6. 质量管理体系
-
ISO:International Organzation for Standardzation,国际标准化组织,其宗旨是在 世界范围内促进标准化工作的发展,以利于国际物资交流和互助,并扩大知识、科学、技 术和经济方面的合作。(ISO9000软件质量体系——是一系列标准的统称,其主体部分可以分为两组)
(1)一组是用于“需方对供方要求质量保证”的标准ISO9001-9003
(2)一组是用于“供方建立质量保证体系”的标准ISO9004 -
CMM:Capability Maturity Model,能力成熟度模型,是美国卡耐基梅隆大学,软件 工程研究所(SEI)提出的一种用于评价软件承包商能力并帮助改善软件质量的模型。自 1987年开始实施认证,现已成为软件业权威的评估认证体系。CMM的精髓在于:过程决 定质量。(CMMI:是SEI于2000年发布的CMM新版本。)
-
CMM的五个等级:
(1)初始级(等级1):软件过程的特点是无秩序的,偶尔甚至是混乱的。几乎没有什么过程是经 过定义的,成功依赖于个人的努力。
(2)可重复级(等级2):已建立基本的项目管理过程去跟踪成本、进度和功能性。必要的过程纪 律已经就位,使具有类似应用的项目,能重复以前的成功。
(3)已定义级(等级3):管理活动和工程活动两方面的软件过程均已文档化、标准化、并集成到 组织的标准软件过程。全部项目均采用供开发和维护软件的组织标准软件过程中的一个经批准 的剪裁本。
(4)已管理级(等级4):已采集详细的有关软件过程和产品质量的度量。无论软件过程还是产品 均得到定量了解和控制。
(5)优化级(等级5):利用来自过程和来自新思想、新技术先导性试验的定量反馈信息、使持续 过程改进成为可能。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!