©️ OverlookArt

需求分析

需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式化的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程

软件需求

  1. 功能需求:考虑系统要做什么、什么时候做、如何修改或升级
  2. 性能需求:考虑软件开发的技术性指标,如存储容量限制、执行速度、响应时间、吞吐量等
  3. 用户或人的因素:考虑用户类型
  4. 环境需求:考虑软件应用的环境
  5. 界面需求:考虑来自其他系统的输入或到其他系统的输出等
  6. 文档需求:考虑需要哪些文档、文档针对哪些读者
  7. 数据需求:考虑输入、输出格式,接收、发送数据的频率,数据的精准度、数据流量、数据保持时间
  8. 资源使用需求:考虑软件运行时所需要的资源
  9. 安全保密需求:考虑是否需要对访问系统或系统信息加以控制
  10. 可靠性需求:考虑系统的可靠性需求、系统是否必须检测和隔离错误、出错后重启系统所允许的时间等
  11. 软件成本消耗或开发进度需求:考虑开发是否有规定的时间表
  12. 其他非功能性需求:如采用某种开发模式、确定质量控制标准、里程碑和评审、验收标准等。

需求分析原则

需求分析过程有不同的分析方法,他们要遵循的操作原则有:

  1. 必须能表示和理解问题的信息域
  2. 必须能定义软件将完成的任务
  3. 必须能表示软件的行为
  4. 必须划分描述数据、功能和行为的模型
  5. 分析过程应该从要素信息移向细节信息

需求工程

需求工程是一个不断反复的需求定义、文档记录、需求演进的过程,并最终在验证的基础上冻结需求。需求工程可以细分为六个阶段

  1. 需求获取
  2. 需求分析与协商
  3. 系统建模:模型以一种简洁、准确、结构清晰的方式系统的描述软件需求。常用的需求分析方法有 面向数据流的结构化分析方法SA,面向对象的分析方法OOA
  4. 需求规约:通过建立完整的信息描述、详细的功能和行为描述、性能需求和设计约束说明、合适的验收标准,给出对目标软件的各种需求,作为用户和开发者之间的一个协议
  5. 需求验证:其目的是要检验需求功能的正确性、完整性和清晰性,是否能够反映用户的意愿
  6. 需求管理

系统设计

系统设计的主要内容包括系统总体结构设计、代码设计、输入设计、输出设计、处理过程设计、数据存储设计、用户界面设计和安全控制设计。

主要的目的就是为系统制定蓝图

常用的设计方法有:

  • 面向数据流的结构化设计方法(SD)
  • 面向对象的设计方法(OOD)

系统设计包括两个基本步骤:

  • 概要设计
    1. 软件系统总体结构设计:将系统按功能划分成模块,确定每个模块的功能,确定模块之间的调用关系,确定模块之间的接口,评价模块结构的质量
    2. 数据结构及数据库设计:如 E-R 图
    3. 编写概要设计文档:概要设计说明书、数据库设计说明书、用户手册及修订测试计划
    4. 评审
  • 详细设计
    1. 对每个模块进行详细的算法设计
    2. 对模块内部的数据结构进行设计
    3. 对数据库进行物理设计,即确定数据库的物理结构
    4. 其他设计(代码设计、输入输出设计、用户界面设计)
    5. 编写详细设计说明书
    6. 评审

系统设计的结果是一系列的系统设计文件,这些文件是物理实现一个信息系统(包括硬件设备和编制软件程序)的重要基础

系统测试

系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现错误的测试

测试的目的是以最少的人力和时间发现潜在的各种错误和缺陷

信息系统测试包括软件测试、硬件测试、网络测试

测试因遵循的基本原则:

  1. 应尽早不断的进行测试
  2. 测试工作应避免原先开发软件的人员或小组参与
  3. 设计测试方案时要确定输入数据,还要根据系统功能确定预期的输出结果
  4. 设计测试用例时要设计合理、有效的输入条件,还要包括不合理、失效的输入条件
  5. 在测试时要检查程序是否做了该做、不该做的事,多余的工作会影响程序效率
  6. 严格按照测试计划进行测试
  7. 妥善保存测试计划、测试用例
  8. 要精心设计测试用例

测试的过程包括:

  1. 制定测试计划
  2. 编制测试大纲
  3. 根据测试大纲设计和生产测试用例
  4. 实施测试
  5. 生成测试报告

测试策略

软件测试分为 4 步:单元测试,集成测试,确认测试和系统测试

  • 单元测试:也称为模块测试,在模块编写完成且编译无误后进行,侧重于模块中的内部处理逻辑和数据结构。在对每个模块进行测试时,需要开发两种模块,驱动模块相当于一个主程序,桩模块用来代替测试模块中所调用的子模块
  • 集成测试: 把模块按系统设计说明的要求组合起来进行测试。集成测试通常有两种方法
    1. 非增量集成:分别测试各个模块,再将这些模块组合起来进行整体测试
    2. 增量测试:以小增量的方式逐步进行构造和测试
      常用的增量集成策略包括:自顶向下集成测试、自底向上集成测试、回归测试、冒烟测试
    3. 确认测试:始于集成测试的结束,即已测试完单个构件,软件已组装成完整的软件包,而且接口错误已被发现和改正。确认过程的一个重要成分是配置评审,主要检查软件、文档、数据是否齐全、分类是否有序。
    4. 验收测试:阿尔法测试:最终用户在开发者的场所进行验收测试,贝塔测试:在一个或多个最终用户场所执行,与测试不同,开发者通常不在场
    5. 系统测试:将已经确认的软件、硬件、外设、网络等其他因素结合在一起,进行各种集成测试和确认测试。目的是通过与系统的需求进行比较,发现所开发的系统与用户需求不符或矛盾的地方。主要包括恢复测试、安全性测试、压力测试、性能测试、部署测试

测试方法

  • 静态测试:被测试程序不在机器上运行,采用人工检测和计算机辅助静态分析的手段对程序进行测试
  • 动态测试:通过运行程序发现错误,一般采用黑盒测试和白盒测试
  • 黑盒测试:也称功能测试,在不考虑内部结构和特性的情况下测试软件的外部特性。常用的黑盒测试技术有等价类划分、边界值分析、错误性推测和因果图等
  • 白盒测试:也称结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需求。常用的白盒测试技术有逻辑覆盖、循环覆盖和基本路径测试,逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。

调试

调试发生在测试之后,其任务是根据测试时所发现的错误找出原因和具体位置,进行改正。调试工作主要由程序开发人员进行,目前常用的调试方法有以下5种

  1. 试探法:调试人员分析错误的症状,猜测问题所在位置,一步步试探和分析问题的所在。该方法效率低,适用于结构比较简单的程序
  2. 回溯法:调试人员从发现错误的位置开始,人工沿着程序的控制流程往回追踪代码,直到找出问题根源为止。该方法适用于小型程序
  3. 对分查找法:该方法主要用来缩小错误范围,直到把故障范围缩小到比较容易诊断为止
  4. 归纳法:从测试所暴露的问题出发,收集所有正确、不正确的数据,并分析它们之间的关系,提出假想的错误原因,用这些数据证明或反驳,从而查出错误所在
  5. 演绎法:根据测试结果,列出可能的错误原因,分析已有数据,排除不可能和彼此矛盾的原因。若有多个错误同时存在,就要重新分析,提出新的假设,直到发现错误为止