chapter1. 软件与软件危机
第一章:软件与软件危机
软件测试与质量保证
-
软件测试与质量保证是什么关系?
软件测试和质量保证是用来提高软件质量的手段。
测试是寻找软件系统中出现的问题,通过把这些问题修改正确来提高软件质量。
质量保证是通过一系列有效的手段,通过过程管理、统计分析来发现软件产品在生产、开发的过程中存在的问题,从过程等的角度来保证软件的质量。
-
为什么要进行软件测试?
如果不通过软件测试的手段,就无法验证工作的正确与否。
-
为什么软件总是出问题?
1.1 软件概念
-
能够完成预定功能和性能的、可执行的指令(计算机程序);
-
使得程序能够适当地操作信息的数据结构;
-
描述程序的操作和使用的文档
软件 = 程序+数据(库)+文档
软件组成

软件产品的其他内容

1.2 软件特点
- 软件是逻辑的、知识性的产品的集合,是对物理世界的一种抽象,或者是某种物理形态的虚拟化
- 软件是硬件的灵魂,硬件是软件的基础;
- 软件,是智慧和知识的结晶;
- 软件不会“磨损”,而是逐步完善。
1.3 软件种类
- 系统软件
- 泛指哪些为了有效地使用计算机系统、给应用软件开发与运行提供支持、或者能为用户管理与使用计算机提供方便的一类软件。如操作系统、基本输入\输出系统BIOS
- 应用软件
- 指那些专门用于解决各种问题的软件
- 通过应用软件
- 定制应用软件
- 指那些专门用于解决各种问题的软件
1.4 软件危机

软件复杂性的增长

软件质量引起的事故

- 软件危机
- 在软件开发及维护的过程中所遇到一系列严重问题,这些问题接可能导致软件产品的寿命缩短、甚至夭折。
- 主要表现
- 项目运行超出预算
- 项目运行延期
- 软件质量低
- 软件通常不符合需求
- 项目无法管理,且代码难以维护
1.5 软件工程

-
软件工程试图以工程的原理、原则和方法进行软件开发,以解决软件危机
- 将软件作为产品,借鉴传统工程途径,实现软件的工程化开发和工业化生产
-
软件工程
- 应用计算机科学、数学及管理科学等原理,开发软件的工程
- 是一门交叉学科
软件工程层次
最基础的是质量关注点,根据用户的质量关注点选择合适的开发过程,采用合适的方法和开发工具。
1.6 软件生命周期
什么适合进行软件测试?
软件生命周期定义
- 软件从开始生产直到报废的生命周期。周期内又问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到报废等阶段。
软件生命周期的阶段划分
- 问题定义
- 双方:确定开发目标、范围
- 可行性分析
- 撰写问题陈述,明确具体目标和范围
- 分析经济、技术、法律等因素
- 需求分析
- 功能分析、数据分析、协作关系分析
- 制定系统规格说明、开发计划
- 系统设计
- 系统框架、人机交互设计、数据库设计
- 总体设计:静态模型、动态模型
- 详细设计:模块设计、算法设计
- 编码
- 使用程序设计语言、软件开发工具
- 软件测试
- 单元测试、集成测试、系统测试
- 维护
- 纠错、需求变化、功能扩展
软件生命周期模型
-
软件开发的基本过程
代表性软件生命周期模型
- 瀑布模型
- 原型模型
- 快速应用开发(RAD)模型
- 螺旋模型
- 增量模型和迭代模型
- RUP(Rational Unified Process)
- 敏捷开发
瀑布模型
- 阶段划分明确,执行完一个阶段的任务就开始下一个阶段的任务。
- 瀑布模型是最早出现的软件开发模型
- 软件存在的问题只能可能在软件开发的后期才被发现
原型模型
- 简化的版本,来描述系统的主要功能
- 方便用户和开发人员的沟通
- 开发过程:
- 评估原型的阶段就是测试的阶段
快速应用开发(RAD)—V模型

- 针对早期的开发过程,对每个阶段提出了测试
- 重点掌握、代表性
增量和迭代模型

-
每当新版本就会测试
-
增量:由小到多
-
迭代:由粗到细
统一软件开发过程模型RUP

- 全面的软件过程、迭代开发
- 工作流程清晰,文档详细
- 使用方便、图形化
- 坡形图代表每个阶段的关注点的不同
螺旋模型
- 针对大型项目,以解决风险为主
- 首先确定目标,再进行风险评估,一直进行风险评估和重新计划不停迭代
敏捷开发
- 核心思想是迭代和增量开发
- 以测试驱动开发
- 要求合作简洁、高效
小结
- 为什么需要软件测试?
- 软件质量很重要,但总是容易出问题
- 为什么软件总是出问题?
- 软件本身的复杂性越来越高
- 软件开发中的环境因素越来越高
- 什么时候进行软件测试?
- 早期的软件生命周期模型中基本都是再编码之后进行,后期的模型中变成整个生命周期的质量控制活动
- 敏捷开发倡导测试驱动开发
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步