chapter1. 软件与软件危机

第一章:软件与软件危机

软件测试与质量保证

  • 软件测试与质量保证是什么关系?

    软件测试和质量保证是用来提高软件质量的手段。

    测试是寻找软件系统中出现的问题,通过把这些问题修改正确来提高软件质量。

    质量保证是通过一系列有效的手段,通过过程管理、统计分析来发现软件产品在生产、开发的过程中存在的问题,从过程等的角度来保证软件的质量。

  • 为什么要进行软件测试?

    如果不通过软件测试的手段,就无法验证工作的正确与否。

  • 为什么软件总是出问题?

1.1 软件概念

  • 能够完成预定功能和性能的、可执行的指令(计算机程序);

  • 使得程序能够适当地操作信息的数据结构;

  • 描述程序的操作和使用的文档

    软件 = 程序+数据(库)+文档

软件组成

image-20210306000826921

软件产品的其他内容

image-20210306000917009

1.2 软件特点

  • 软件是逻辑的、知识性的产品的集合,是对物理世界的一种抽象,或者是某种物理形态的虚拟化
    • 软件是硬件的灵魂,硬件是软件的基础;
    • 软件,是智慧和知识的结晶;
    • 软件不会“磨损”,而是逐步完善。

1.3 软件种类

  • 系统软件
    • 泛指哪些为了有效地使用计算机系统、给应用软件开发与运行提供支持、或者能为用户管理与使用计算机提供方便的一类软件。如操作系统、基本输入\输出系统BIOS
  • 应用软件
    • 指那些专门用于解决各种问题的软件
      • 通过应用软件
      • 定制应用软件

1.4 软件危机

image-20210306001557994

软件复杂性的增长

image-20210306001627732

软件质量引起的事故

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

1.5 软件工程

image-20210306002030583
  • 软件工程试图以工程的原理、原则和方法进行软件开发,以解决软件危机

    • 将软件作为产品,借鉴传统工程途径,实现软件的工程化开发和工业化生产
  • 软件工程

    • 应用计算机科学、数学及管理科学等原理,开发软件的工程
    • 是一门交叉学科
    image-20210306155453529

    软件工程层次

    image-20210306155516080

    最基础的是质量关注点,根据用户的质量关注点选择合适的开发过程,采用合适的方法和开发工具。

1.6 软件生命周期

什么适合进行软件测试?

软件生命周期定义

  • 软件从开始生产直到报废的生命周期。周期内又问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到报废等阶段。

软件生命周期的阶段划分

  • 问题定义
    • 双方:确定开发目标、范围
  • 可行性分析
    • 撰写问题陈述,明确具体目标和范围
    • 分析经济、技术、法律等因素
  • 需求分析
    • 功能分析、数据分析、协作关系分析
    • 制定系统规格说明、开发计划
  • 系统设计
    • 系统框架、人机交互设计、数据库设计
    • 总体设计:静态模型、动态模型
    • 详细设计:模块设计、算法设计
  • 编码
    • 使用程序设计语言、软件开发工具
  • 软件测试
    • 单元测试、集成测试、系统测试
  • 维护
    • 纠错、需求变化、功能扩展

软件生命周期模型

  • 软件开发的基本过程

    image-20210306160236851

代表性软件生命周期模型

  • 瀑布模型
  • 原型模型
  • 快速应用开发(RAD)模型
  • 螺旋模型
  • 增量模型和迭代模型
  • RUP(Rational Unified Process)
  • 敏捷开发

瀑布模型

  • 阶段划分明确,执行完一个阶段的任务就开始下一个阶段的任务。
  • 瀑布模型是最早出现的软件开发模型
  • 软件存在的问题只能可能在软件开发的后期才被发现

原型模型

  • 简化的版本,来描述系统的主要功能
  • 方便用户和开发人员的沟通
  • 开发过程:image-20210306160727913
  • 评估原型的阶段就是测试的阶段

快速应用开发(RAD)—V模型

image-20210306160835196
  • 针对早期的开发过程,对每个阶段提出了测试
  • 重点掌握、代表性

增量和迭代模型

image-20210306161118729
  • 每当新版本就会测试

  • 增量:由小到多

  • 迭代:由粗到细

统一软件开发过程模型RUP

image-20210306161228928
  • 全面的软件过程、迭代开发
  • 工作流程清晰,文档详细
  • 使用方便、图形化
  • 坡形图代表每个阶段的关注点的不同

螺旋模型

  • 针对大型项目,以解决风险为主
  • 首先确定目标,再进行风险评估,一直进行风险评估和重新计划不停迭代

敏捷开发

  • 核心思想是迭代和增量开发
  • 以测试驱动开发
  • 要求合作简洁、高效

小结

  • 为什么需要软件测试?
    • 软件质量很重要,但总是容易出问题
  • 为什么软件总是出问题?
    • 软件本身的复杂性越来越高
    • 软件开发中的环境因素越来越高
  • 什么时候进行软件测试?
    • 早期的软件生命周期模型中基本都是再编码之后进行,后期的模型中变成整个生命周期的质量控制活动
    • 敏捷开发倡导测试驱动开发
原文地址:https://www.cnblogs.com/zhangzizi/p/14491190.html