## 软件的分类(重要)
```
1.软件包括程序,数据,文档(记住)
2.软件的分类
1.层次:系统软件->应用软件
2.组织:商业软件,开源软件
3.结构:单机软件,分布式软件(多台计算机可以联合使用)
```
## 缺陷的由来和定义
```
1.缺陷的由来:
Bug
Defect
2.软件缺陷的定义:(要记)
软件未实现产品说明书要求的功能(有些需求没有满足)
软件出现了产品说明书指明不应该出现的功能(指明了不该出现的功能,但又实现了该功能)
软件实现了产品说明书未提到的功能(自己添加需求外的功能)
软件未实现产品说明书虽未明确提及但应该实现的目标(功能必须实现,需求没有说,但也没去实现该功能)
软件难以理解、不易使用、运行缓慢或者(从测试的角度看)最终用户会认为不好
所有不满足需求或超出需求的都是缺陷
没有不存在缺陷的软件,只有迄今为止尚未发现的缺陷
```
## 软件测试的由来和发展
```
1945年计算机诞生
1956年操作系统诞生
从<测试数据选择的原理>这篇文章开始重视软件测试了,开始把软件测试作为一个方向进行研究了
早期开发人员把调试和测试等同
到1957年软件测试才开始与调试区别开来
直到上世纪80年代早期,因为几个事故,
软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且包含软件质量评价的内容。
国内是从2000年才开始有软件测试,重视起来是2010年后才重视
开发和测试的人员匹配是8:1,所以软件测试人员对软件的整体更加了解
保温杯的测试
1.保温功能(保温)
2.防滑功能
3.压力下是否变形
4.水量
5.溢出
6.密封性
7.隔热性
8.杯口是否润滑
9.杯身图案在温度高时是否脱落
10.清洗杯身图案是否掉色
11.重量是否过重
12.耐热性,耐寒性
13.高压和低压
14.材质是否合格
15.坚硬度
16.尺寸大小
17.颜色是否过于鲜艳
18.是否有拉栓
19.是否透明
20.开盖方式
21.抗氧化性
22.是否有异味
```
## 软件测试的定义介绍(重要)
```
1 正向思维的定义
2 反向思维的定义
3 IEEE定义的软件测试(IEEE是电气和电子工程师协会,美国的一个协会)
4 广义的软件测试
```
## 正向思维的定义(重要)
```
出发点:使自己确信产品是能够正常工作的评价一个程序和系统的特性或能力,并确定它是否达到期望的结果,软件测试就是以此为目的的任何行为。
(先从思想上确定产品是ok的,再进行测试,测试的目的是证明产品是ok)
```
## 反向思维的定义(重要)
```
出发点:测试是为发现错误而执行一个程序或者系统的过程。
测试是为了证明程序有错,而不是证明程序无错误
一个好的测试用例在于它能发现以前未发现的错误
一个成功的测试是发现了以前未发现的错误的测试
(先从思想上确定产品是有问题的,测试的目的是证明产品有问题)
```
## IEEE定义的软件测试(重要)
```
在规定条件下运行系统或构件的过程:观察和记录结果,并对系统或构件的某些方面给出评价
分析软件项目的过程:检测现有状况和所需状况之间的不同,并评估软件项目的特性
(不只重视结果,还重视过程)
电气和电子工程师协会
```
## 广义的软件测试(重要)
```
软件测试是对软件形成过程中的所有工作产品(包括程序以及相关文档)进行的测试,而不仅仅是对程序的运行进行测试
确认(Validation)
通过检查和提供客观证据来证实特定目的的功能或应用是否已经实现
验证(Verification)
通过检查和提供客观证据来证实指定的需求是否满足
```
## 软件测试的目的(重要)
```
1.以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,保证各种错误和缺陷得以修复,避免软件发布后由于潜在的软件错误和缺陷造成的隐患所带来的商业风险。
2.同时利用测试过程中得到的测试结果和测试信息,作为后续项目开发和测试过程改进的重要输入,避免在将来的项目开发和测试中重复同样的错误;
3.采用更加高效的测试管理手段,提高软件测试的效率和软件产品的质量。
总结:降低商业风险,吸取经验,增强软件测试的效率
```
## 测试和调试的区别(重要)
```
1.在主体、目标、方法和思路上有所不同
测试 调试
主体 测试人员 开发
目标 找bug 修改
方法 等价类,边界值... 程序和逻辑算法
思路 反向思维 正向思维
2.测试是从已知的条件开始,使用预先定义的过程,并且有预知的结果;调试是从未知的条件开始,结束的过程可能不可预计
3.测试可以计划,可以预先制定测试用例和过程,工作进度可以度量;描述调试的过程或持续时间相对比较困难
4.测试的对象包括软件开发过程中的文档、数据以及代码,而调试的对象一般来说只是代码
总结:在主体、目标、方法和思路上有所不同,测试已知结果,调试是未知结果,测试的工作进度可以度量,调试是不可以,测试和调试的对象不同
```
## 软件测试的对象
```
软件=程序+数据+文档
文档
1.需求文档:需求文档要求清晰,如给我钱,没说给多少钱,这就是需求文档不清晰
2.设计文档:设计文档合不合理,如:关闭页面按键在页面中间
3.使用手册:看看使用的手是否有错别字,使用手册是否清晰简单
单元测试
1.开发研究出一个单元,我们就测试一个单元,如登录模块
集成测试
1.多个模块测试完毕,那么把多个模块组合在一起进行测试
确认测试
1.全部功能都测试完成,还要进全面测试
系统测试
1.系统测试很重要,要在真实的环境下进行测试
验收测试
2.一般和客户方面进行联合测试
```
## 对软件测试的误解和职业要求
```
1.如果发布的软件有质量问题,那是软件测试人员的问题,不对
2.软件测试对技术要求不高,比编程容易多了
3.有时间就多测一点,没有就少测试一下
4.软件测试是测试人员的事,与开发人员无关
```
## 软件危机
```
是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
如数据库的发展历程 网状-层次-关系
如通信,BB机->大哥大->手机->智能手机
生产软件如果没有工程化,那么生产的软件很大的可能性是不可靠的,使用和维护过程会出现问题
以前开发游戏,租个小区套房,几张桌子,几台电脑,几个程序员,敲几天代码,弄出来的一个游戏,现在在市场上肯定
会被淘汰
所以现在把软件生产要工程化
```
## 软件工程
```
1.基于软件危机对于计算机发展的阻碍,提出了软件工程 这个名词,从此软件生产进入工程化时代 。
软件工程化和非工程化有什么区别
如:古代私塾和现代学校
如:用自己的手机去拍电影和电影公司去拍电影
工程就意味着标准
软件工程包括两方面的内容:
软件开发技术:软件开发方法学、软件工具和软件工程环境
软件项目管理:软件质量、项目估算、进度控制、人员组织、配置管理、项目计划
软件开发技术:
1.软件开发方法的规范化:就是国际上大家写的代码格式都差不多,如函数的命名方法
2.软件工具的规范化:如存储数据都用数据库
3.软件工程环境:如写代码的IDE,不只可以写代码,还可以运行代码
软件项目管理:
1.软件质量:达到什么条件软件质量是合格的
2.项目估算:时间多久,钱多少
3.进度控制:每天做到什么程度,哪几模块可以同时进行
4.人员组织:项目经理,谁做前端的,谁做后端的,谁是测试,
5.配置管理:软件的版本的发布,版本之间的差异,什么时候替换版本等等,这些事情谁管理
6.项目计划:制定编写计划
引起软件危机的主要问题是软件质量问题
软件质量很差,必然会引起软件危机,软件质量的好坏因素很多,如需求的设定,开发,人员的管理等
软件工程主要解决的就是软件质量问题
软件测试是软件质量管理体系中一个非常重要的手段(记住)
```
## 软件生命周期(重点)
```
1.软件生命周期是软件的产生直到报废或停止使用的生命周期。(记住)
百度浏览器,腾讯微博,快播,漂流瓶等
```
## 软件开发过程模型介绍
```
软件产生生命的过程:
需求分析:解决什么问题,满足什么需求
概要设计:大概有什么模块,比如,登录模块,注册模块,聊天模块
详细设计:登录模块是怎么样的,按键是什么颜色等等
编码:用什么语言去编写,写代码
测试:单元测试,系统测试等等
验收:验收好了就发布
记住过程
这个过程是可以回访上一个过程,如概要设计,设计不出来,要看看需求是否有问题等等
一:瀑布模型
二.螺旋模型
三.迭代模型
四.敏捷开发模型
五.增量模型
六.快速原型模型
```
## 瀑布模型
```
上面的过程是完美的,但有些开发过程不是这样的,那么是怎么样的呢?
一:瀑布模型
最早提出的软件开发过程模型
每个阶段都有产出物(看瀑布模型图)
优点
1)为项目提供了按阶段划分的检查点。
2)当前一阶段完成后,只需要去关注后续阶段。
缺点
1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2)线性开发,前阶段不完成,后阶段就不进行,用户等到整个过程的末期才能见到开发成果,从而增加了开发风险。
3)瀑布模型不适应用户需求的变化,没有灵活性
4) 测试放在编码之后,没有体现软件测试贯穿整个软件的生命周,不能避免需求问题一直到编码完成才暴露或被发现
学习要求:会画瀑布模型图
1.线性开发,不灵活,测试介入晚
```
## 螺旋模型
```
螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。
1.引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。
2.螺旋模型更适合大型的昂贵的系统级的软件应用。
螺旋模型:
1.有风险分析
2.有快速原型模型和瀑布模型的特点
3.适用于大型而且贵的软件生产
```
## 迭代模型(重点)
```
1.软件开发常用的模型
2.迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他元素,强调开发的深入
如qq,以前没有语言聊天,现在有,以前不能发红包,现在有了
3.在某种程度上,开发迭代是一次完整地经过所有工作流程的过程:需求分析、设计、实施和测试工作流程。
4.迭代过程具有以下优点:
a.降低了在一个增量上的开支风险。
b.降低了产品无法按照既定进度进入市场的风险。
c.加快了整个开发工作的进度。
d.迭代过程这种模式使适应需求的变化会更容易些。
迭代模型:先上线,需求或非重点缺陷在下一个版本进行实现或修改
```
## 敏捷开发模型
```
敏捷宣言,也叫做敏捷软件开发宣言,正式宣布了对四种核心价值和十二条原则,可以指导迭代的以人为中心的软件开发方法
个体和互动 高于 流程和工具
---比如测试通过流程拿到需求文档,发现需求文档里有些需求有点模糊,这个时候你应该和写需求的人互动,直接问他,而不是再次走流程去解决需求的不确定.管理bug的工具很好用,但是就是有些个体不愿意上传bug
工作的软件 高于 详尽的文档
---公司开发规范文档来个2万页,大家都要遵守这个开发规范.
有一款工作软件来指导开发人员来规范的开发,还是图形界面的哦.
客户合作 高于 合同谈判
-- 合同写的再好也比不上客户对你的工作支持和合作
响应变化 高于 遵循计划
计划赶不上变化
注意:尽管右侧有其价值,但我们更重视左侧的价值
```
## 增量模型
```
增量模型:
1.把一个软件分割成独立的模块
2.能够进行分批次的完成和交付
缺点:很难打破原有的软件结构和框架,可能带来一定的风险
增量模型常和迭代模型一起使用
线上的app商城,
软件的发布经历都有
1.软件增加了新功能
2.优化了....功能
3.修复了...bug
开发的时候会多种模式一起使用
增量模型和迭代模型的共同点和区别
共同点是,通过若干个阶段的开发,完成整个软件,每阶段完成之后,
都有一个新版本发布。这就有一个好处,相对于整个漫长的开发周期来说,
每阶段都会见到亮光,有利于鼓舞团队的士气,降低项目的风险。
不同点是,主要是阶段的划分上不太一样。增量模型是从功能量上来划分的,
每阶段完成一定的功能。迭代模型是从深度或细化的程度来划分的,每阶段功能得到完善、增强。
增量模型适用于需求比较明确,架构比较稳定的软件开发,每次增量不影响已有的架构,在已有的架构下增加新的功能。
迭代模型适用于需求不甚明确、难度比较大的软件开发
```
## 快速原型模型(重点)
```
越来越多的公司引用这个模型进行开发
1.什么叫快速原型模型,说白了就是仿原型来制作软件
原型:就是一个模型,可以模拟操作,简单运行的
快速原型常用的工具:Axure,作用是制作原型
```