跳到主要内容

软件开发技术-软件工程

基本原理

确保软件产品质量和开发效率

分阶段的生命周期计划

  • ❗ 提出原因
    • 50%以上的失败项目是由于计划不周
  • 原理内容
    • 制定并严格执行 项目概要计划
    • 制定并严格执行 里程碑计划
    • 制定并严格执行 项目控制计划
    • 制定并严格执行 产评控制计划
    • 制定并严格执行 验证计划
    • 制定并严格执行 维护运行计划

坚持阶段评审

  • ❗ 提出原因
    • 设计错误占软件错误的 63%
    • 编码错误占软件错误的 37%
  • 原理内容
    • 在每个阶段都应进行严格的评审

严格品控

  • ❗ 提出原因
    • 在软件开发过程中改变需求是难免的
  • 原理内容
    • 软件开发过程中不应该随意改变需求
    • 在改变需求时,为保持软件的各配置成分的一致性,必须实行严格的产品控制
    • 一切有关修改软件的建议都必须按照严格的规程进行评审

现代程序设计技术

  • ❗ 提出原因
    • 方法大于力气
  • 原理内容
    • 采用先进的技术既可以 提高软件开发效率
    • 采用先进的技术既可以 降低软件维护成本

结果可审查

  • ❗ 提出原因
    • 软件开发小组的工作进展情况 可见性差
    • 软件开发小组的工作进展情况 难以评价
    • 软件开发小组的工作进展情况 难以管理
  • 原理内容
    • 根据软件开发的总目标及完成期限尽量明确开发小组的责任和产品标准,从而使结果可审查

开发小组人员应少而精

  • ❗ 提出原因
    • 开发人员素质映像软件质量 高素质开发人员比低素质开发人员的效率高几倍甚至几十倍,犯错也少
    • 开发人员数量影响开发效率 N 人可能的通信信道为N(N1)2\frac{N(N-1)}{2}
  • 原理内容
    • 开发小组人员应少而精

承认不断改进软件工程的必要性

  • ❗ 提出原因
    • 遵循上述 6 条原理就能够按照当代软件工程实现如那件工程化生产
    • 遵循上述 6 条原理不能够保证软件开发与维护过程能更上时代
  • 原理内容
    • 积极采纳新的软件开发技术
    • 注意不断总结经验
    • 注意收集数据

软件生命周期

把整个软件生命周期划分为若干阶段,使每个阶段有明确的任务,使规模大、结构复杂和管理复杂的软件的开发变得容易控制和管理

项目开发计划与可行性分析

  • 要解决什么问题?
  • 是否有可行的方案?
  • 需要多少费用?
  • 需要多少时间?
  • 产出
    • 可行性分析报告
    • 项目开发计划

需求分析

  • 用户期望
    • 功能需求
      • 系统要做什么?
      • 在何时做?
      • 在何时修改或升级?
      • 如何修改或升级?
    • 性能需求
      • 存储容量限制
      • 执行速度
      • 响应时间
      • 吞吐量
    • 用户或人的因素
      • 各类用户对使用计算的熟练度
      • 需要接受的训练
      • 用户理解系统的难度
      • 用户使用系统的难度
      • 用户误操作的可能性
    • 环境需求
      • 机型
      • 外设
      • 接口
      • 地点
      • 分布
      • 湿度
      • 磁场干扰
      • 操作系统
      • 网络
      • 数据库
    • 界面需求
      • 考虑来自其他系统的输入
      • 到其他系统的输出
      • 对数据格式的特殊规定
      • 对存储介质的规定
    • 文档需求
      • 需要那些文档
      • 文档针对那些读者
    • 数据需求
      • 输入数据的格式
      • 输出数据的格式
      • 接收数据的频率
      • 发送数据的频率
      • 数据准确性
      • 数据精度
      • 数据流量
      • 数据需保持的时间
    • 资源使用需求
      • 运行时
        • 所需数据
        • 其他软件
        • 内存空间
      • 开发组
        • 开发所需人力
        • 维护所需人力
        • 支撑软件
        • 开发设备
    • 安全保密需求
      • 是否对访问系统或系统信息加以控制
      • 隔离用户数据的方法
      • 用户程序、其他程序、操作系统隔离
      • 系统备份要求
    • 可靠性需求
      • 是否必须检测错误
      • 是否必须隔离错误
      • 出错重启允许的时间
    • 软件成本消耗
      • 软硬件投资有无限制
    • 开发进度需求
      • 开发是否有规定时间表
    • 其他非功能性需求
      • 采用某种[开发模式]
      • 确定[质量控制标准]
      • 确定[里程碑标准]
      • 确定[评审标准]
      • 确定[验收标准]
      • 确定[质量要求优先级]
      • 确定[可维护性要求]
  • 产出
    • 软件需求说明书
  • 原则
    • 能够表示和理解问题的信息域
    • 能够定义软件将完成的任务
    • 能够表示软件的行为
    • 划分描述数据、功能、行为的模型
    • 分析过程应该从要素移向细节

概要设计

  • 功能->模块
  • 模块结构
  • 数据结构
  • 产出
    • 概要设计说明书

详细设计

  • 使用工具表示模块功能和结构
    • 结构
    • 先后
    • 条件
    • 重复
  • 产出
  • 详细设计说明书

编码

测试

维护

软件过程

产品开发或构建系统时遵循的路线图

CMM

关注组织成熟度

  1. 初始级
    • 杂乱无章
  2. 可重复级
    • 基本的项目管理过程
  3. 已定义级
    • 所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护
  4. 已管理级
    • 软件过程的产品质量都被开发组织的成员所理解和控制
  5. 优化级
    • 通过来自质过程质量、新概念和新技术的反馈使过程能不断持续改进

CMMI

  • 阶段式=CMM

  • 连续式

    • 关注每个过程域的成熟度
    • CL0CL_0未完成
    • CL1CL_1已执行
    • CL2CL_2已管理
    • CL3CL_3已定义级
    • CL4CL_4定量管理
    • CL5CL_5优化

软件过程

软件开发全部过程、活动和任务的结构框架

Waterfall

线性连接的若干阶段的模型

  • 🙂 容易理解,管理成本低
  • 🙃 项目风险控制能力弱

Incremental

将需求分段为一系列增量产品,每个线性序列产生一个可发布增量

  • 🙂 第一个可交付版本成本、时间很少
  • 🙂 小系统承担的风险不大
  • 🙂 可减少用户需求的变更
  • 🙂 增量投资
  • 🙃 管理发生的成本

Evolutionary

适用于对软件需求缺乏准确认识的情况

  • 原型
    • 用于简单系统、用户需求不清、需求经常变化
  • 螺旋
    • 用于庞大、高风险系统、用户需求不清、需求经常变化
    • 定制计划
    • 风险分析
    • 实施工程
    • 用户评估

Water Fountain

  • 适用于面向对象的开发方法
    • 用户需求为动力
    • 对象作为驱动
  • 大量开发人员
  • 审核难度大

Component-based

利用预先包装的构件来构造应用系统

Formal

通过数学分析和推导,易于发现需求的歧义性、不完整性、不一致性

UP

  • 特点
    • 用例和风险驱动
    • 架构为中心
    • 迭代
    • 增量
  • 阶段
    • 起始
    • 精化
    • 构建
    • 移交

Agile

  • XP
  • Crystal
  • Scrum
  • ASD
  • AUP