一、软件定义:
计算机系统中与硬件相互依存的一部分(程序+数据+相关文档)
二、软件分类
- 按照功能划分:
系统软件: 能够直接操作底层的硬件、并为上层软件提供支持的软件,如操作系统软件、各种硬件驱动程序等。
应用软件: 能够为用户提供某种特定条件的应用服务的软件,如金山词霸 - 按照技术架构划分
单机软件: 直接在单个计算机上安装并运行的软件,如画图工具
分布式软件: 包括C/S和B/S结构软件
C/S 结构软件:C指的是客户端(Client),S指的是服务器端(SERVER)。这种软件是基于局域网或互联网的,需要一台服务器来安装服务器端软件,每台客户端都需要安装客户端软件。不便于升级和维护(升级时需要重新安装每一个客户端)
B/S 结构软件:B指的是浏览器(Browser),S指的是服务器端(SERVER)。这种软件是基于局域网或互联网的,不需要安装客户端,只需要有浏览器即可,便于升级和维护(升级时只需要升级服务器即可)
三、软件测试
1、软件测试定义
在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
2、软件测试目的
- 尽可能多的发现软件缺陷。bug是测试过程中的产品而非目标。检查系统是否满足要求,站在用户角度思考产品或项目功能实现的正确性。
- 通过分析错误产生的原因和错误的分布特征,帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。
四、软件测试V模型
- 需求分析:明确客户需要,准确描述客户需求,得出分析结果,写出需求文档
- 概要设计:架构师完成。搭建架构,各个模块功能,模块接口连接和数据传递
- 详细设计:对各个模块进行深入分析,模块组合分析------>伪代码/数据库设计说明
- 软件编码:按照详细设计和设计好的模块功能,编程人员编写实际的代码
- 单元测试:单元----独立程序或者拥有独立功能的代码块
- 集成测试:单元测试的基础上,通过单元模块组装成系统再进行测试,检查模块之间接口的正确性。
- 系统测试:针对整个产品进行测试,验证系统是否满足需求文档,对实现的系统进行正确性和性能两方面测试。
- 验收测试:软件部署到操作系统(Linux、Windows)------>运维工程师
α测试(用户、测试人员、开发人员和运维内部调试------>内测)和β测试(内测后的公测,完全交给客户测试)
五、软件缺陷
- 软件未达到客户需求的功能和性能
- 软件超出了客户需求的范围
- 软件出现客户不能容忍的错误
- 软件的使用未能符合客户的习惯和工作环境
缺陷的集群效应:一个搜索模块出现问题,凡是调用该模块都出现问题,测试上不能写多个跟该模块相关的页面错误(黑盒测试没问题,白盒测试得清楚调用代码逻辑思维)
六、软件测试分类
- 软件的自动化程度:手工测试、自动化测试
- 软件的测试面:功能测试、性能测试(空间性能、时间性能)
- 软件的测试周期:冒烟测试、回归测试、随机测试、安全测试
冒烟测试:对一个新版本进行大规模测试前,先验证软件的基本功能是否实现,是否具备可测性
回归测试:开发人员修改bug之后,修改旧代码后重新进行测试,注: 确保修改后的内容不会引入新错误或导致其它代码出错
随机测试:所有输入的数据都是随机产生。目的是模拟用户真实操作,发现边缘性错误。
安全测试:开发过程完成到发布阶段,对产品进行检验,验证产品是否符合安全需求定义和产品质量标准。
- 软件开发角度:单元测试、集成测试、系统测试、验收测试
- 软件结构和算法角度:黑盒测试、白盒测试、灰盒测试
黑盒测试:也称为功能测试,通过测试来检测每个功能是否实现,把程序比喻成黑盒,在完全不考虑程序内部实现的情况下,对程序接口进行测试,对比需求文档,检查功能是否实现。
灰盒测试:介于黑、白盒测试之间。灰盒关注输入、输出数据的正确性,同时也关注内部实现,关键关注内部实现不如白盒测试详细完整。只是通过一些表象,标志来判断内部运行状态,有时内部程序出现问题,但输出结果正确。
白盒测试:(进行单元测试居多)对软件代码实现的细节做细致检查。程序员必须全面了解程序的内部逻辑结构,对逻辑结构进行测试。软件所处的阶段和使用的测试技术没有关系