一、什么是软件?
软件:
软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分。它是包括程序(program)、数据(date)和文档(document)的完整结合。
软件 = 程序 + 数据 + 文件
程序:是能够完成预定功能和性能的可执行序列。
数据:是使程序能够适当地处理信息的数据结构,例如输入与输出以及数据库。
文档:是开发、使用和维护程序所需要的图文资料,其中包含图文数据、需求分析、客户数据等等。
软件按层次分类包括:
- 系统软件 —— 基于硬件之上
如操作系统、系统实用工具、系统扩充工具等
(如微软的Windows,苹果的iMAC)- 支持软件 —— 为了更方便地操作计算机
1 对操作系统进行控制:界面工具、计算机管理类工具等。
2 用来开发应用软件: 软件开发工具、软件评测工具、数据库管理系统等。- 应用软件 —— 最常用的软件
包括科学和工程计算软件、文字和数据处理软件、图形图像处理软件、事务管理软件、游戏娱乐软件等
软件按使用范围分类包括:
- 单机版软件:不需要且不会和其他计算机进行交互的软件。
- 分布式软件:需要在多台计算机上进行协同工作的软件。
一般有C/S(客户端/服务器)结构与B/S(浏览器/服务器)结构两种。
》软件的特性:
- 软件是一种逻辑实体,具有抽象性。
- 软件产品的生产主要是研制,生产成本主要在开发和研制阶段,该阶段结束后,通过复制就可以产生大量软件产品。
- 软件在使用过程中,没有磨损与老化的问题。
- 软件会对硬件和环境有不同程度的依赖性,这使得软件移植过程中会有各种各样的问题。
- 软件的研发至今仍然是手工作坊式的研发方式,生产效率偏低。
- 软件是复杂的,且今后会更加复杂。
- 软件的成本相当昂贵。
二、软件危机与软件工程 (了解)
软件危机
是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含两方面的问题:
- 如何开发软件,以满足不断增长,日趋复杂的需求。
- 如何维护数量不断膨胀的软件产品。
软件危机的特性:一般包含 “不确定性” 与 “损失”
软件危机的典型表现:
- 对软件开发成本和进度的估计常常不准确。
- 用户对“已完成的”软件系统不满意的现象时有发生。
- 软件产品质量靠不住。
- 软件产品不可维护。
- 软件缺乏适当的文档资料。
- 软件成本在计算机系统总成本中所占比例逐年上升。
- 软件开发生产率提高的速度,既跟不上硬件的发展,也比不上计算机应用迅速普及及深入的趋势。
软件危机产生的原因:
- 忽视了软件开发前期的调研和需求分析工作。
- 缺乏软件开发的经验和有关软件开发数据的积累,使得开发计划难以制定。
- 开发过程缺乏统一的、规范化的方法论指导。
- 忽视了与用户、开发组成员间的及时有效的沟通。
- 文档资料不规范或不准确,导致开发者失去了工作的基础,管理者失去了管理的依据。
- 没有完善的质量保证体系。
软件工程:是一门研究怎么用系统化、规范化、数量化等工程原则和方法去进行软件的研发和维护的学科。
软件工程概念的提出是由于软件危机的出现
- 软件工程包括:软件研发技术 和 软件项目管理。
- 软件研发技术包括:软件研发方法学、软件工具和软件工程环境。
- 软件项目管理包括:软件度量、项目估算、进度控制、人员组织、设置管理、项目计划等(6个方面)
三、软件测试产生的背景:
原因一: 程序规模的爆炸式增长。
》 程序代码规模的显著增大
》 程序结构和算法更加复杂
》 程序模块间接口增多
原因二: 在程序员与用户需求间寻找平衡点。
程序员在开发过程中关注什么?
》设计需求
》技术内涵
用户关注什么?
》满足自身特定的需求。
软件测试的意义:
- 从工作量上来说:解放程序员和售后服务人员
软件测试可以降低软件质量风险,使程序员能够更专心于解决程序的算法和效率;同事经过严格检验的完整产品也减轻了售后服务人员的工作量。- 软件测试本质上是对软件产品和阶段性工作成果进行质量检验。
- 从软件测试过程的角度来说:它推动了软件工程的发展,使软件的质量得到了阶段性的提升
软件测试的概念:
- 是为了发现错误而执行程序的过程。
- 应关心程序的效率和鲁棒性等因素。
- 检验软件是否满足规定的需求。
- 弄清预期与实际之间的结果。
- 【注】所谓“鲁棒性”,是英文“robust”的译音,值强壮、健壮的意思。软件的“鲁棒性”,是指系统在一定条件下维持某些性能的特性,简单地说就是适应各种各样变化的能力。鲁棒性越强,系统的精确度就越高,性能也就越好。
软件测试的定义:
使用人工或自动手段,来运行或测试某个系统的过程。其目的在于检验它是否满足规定的需求或弄清预期结果和实际结果之间的差别。
软件测试活动一般包括:
- 制定测试计划
- 设计测试用例
- 实施测试
- 提交缺陷报告
- 测试总结
四、软件测试的目的和原则:
目的:
- 确保产品完成了它所承诺或公布的功能,并且用户可以访问到的功能都有明确的书面说明。
- 确保产品满足性能和效率的要求。
- 确保产品是健壮的和适应用户环境的。
原则:
- 软件测试应该尽早的去执行。
- 软件测试应贯穿于整个软件生命周期
- 需求阶段引入的缺陷越多(需求说明书)
- 每个阶段都需要参与评审、审核相关文档。
不同阶段引入的缺陷对于软件的影响有什么不同?
阶段 | 相对修复费用 |
---|---|
需求阶段 | $1 |
设计阶段 | $5 |
编码阶段 | $10 |
单元测试阶段 | $20 |
验收阶段 | $50 |
维护阶段 | $200 |
-
软件测试应追溯需求:
*什么是需求?—— 需求说明书
*需求是用来约束产品的最终标准
*如果软件测试过程中发生了争议,则应该将需求说明书作为标准来评判。 -
测试应该由第三方来构造
-
穷举测试不可取,应该遵循Good-enough原则
*Good-enough原则:不要做过多的测试,也不要做不充分的测试。(因此应该制定最低测试通过标准和测试内容)
- 必须确定预期测试的输出(或结果)。
- 必须彻底检查每个测试结果:
- 重复的缺陷描述可能属于不同的模块,要分别处理。
- 相似的缺陷报告很容易被作为重复的缺陷报告被剔除。
- 一个缺陷被两个人提交后,可能都认为是对方跟踪,结果谁都没有跟踪。
- 充分注意测试中的群集现象。
五、软件测试的现状和前景:
- 目前仍处于发展阶段,且还是以手工测试为主。
- 国内外软件企业越来越重视软件测试
工作量:软件开发总工作量的40%+
费用:占软件开发总成本的30%-50% - 自动测试工具的出现提升了测试的效率。
》测试是为了验证软件的正确性,目的是验证软件是否能够正常工作。(正向测试)
》目的是为了发现软件中的缺陷BUG。(逆向测试)
软件测试的发展经历:
以调试为主(20世纪50年代)→ 以证明为主(1957年~) → 以破坏为主(1979年~) → 以评估为主(1983年)→ 以预防为主(当下主流思想)