Software-Engineering

Cheapter 1

软件

软件的组成

  • 程序+数据+文档

软件的特征

固有特征

  • 复杂性(逻辑系统庞大)
  • 抽象性(肉眼不可见)
  • 依赖性
    1. 硬件
    2. OS
  • 软件使用特性(不会老化,不同OS兼容性不同)

生产特性

  • 开发特性
  • 产品形式特性
  • 维护特性

软件工程

  • 提出:1968年(20世纪60年代)

定义

  • 软件工程是指导计算机软件开发和维护的工程学科。
  • 它强调按照软件产品的生产特性,采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前最好的技术结合起来,以便经济地开发出高质量的软件并有效地维护它。

目标

  • 低成本。
  • 满足用户的需求。
  • 性能好。
  • 可靠性高。
  • 易使用、维护和移植。
  • 按时完成开发并可使用。

技术要素

  • 软件开发方法
    1. 结构化方法
    2. JSD方法
    3. 面向对象方法
  • 软件开发工具
  • 软件过程
    1. 需求分析
    2. 系统设计
    3. 系统实施
    4. 支持维护

基本原则

  • 分阶段的生命周期计划
  • 每个阶段进行评审
  • 实行严格的产品控制
  • 采用现代程序设计技术
  • 软件成果能清楚地审查
  • 开发小组人员少而精
  • 承认不断改进软件工程实践的必要性

Chapter 2 软件生命周期及开发模型

软件生命周期

  1. 问题定义
  2. 可行性研究
    • 技术可行性
    • 经济可行性
    • 法律可行性
  3. 需求分析
  4. 概要设计
  5. 详细设计
  6. 编码和单元测试
  7. 综合测试
  8. 系统运行与维护

软件过程模型

瀑布模型(传统)

  • 特点
    1. 顺序性
    2. 依赖性
    3. 阶段评审
    4. 文档管理
  • 优点
    • 必须采用规范化方法
    • 有文档支持
  • 缺点
    • 难以真正达到用户需求
    • 极大增加了工作量
    • 偏差累积,后期修改代价巨大

原型模型

原型模型(一般型)

在设计阶段使用样本让用户试用

  • 优点
    • 减少风险和不确定性

增量模型

分批次向用户交付产品

  • 优点
    1. 开发早期反馈及时,易于维护

螺旋模型

瀑布模型+原型模型+风险分析xN

  • 优点
    1. 有助于软件重用
    2. 减少浪费资金风险
    3. 适用于大型软件

面向对象的软件过程

统一开发过程(RUP)

  • 4阶段(Page 19)
    1. 初始阶段:完成商业需求,并确定项目边界
    2. 细化阶段:完成领域问题分析和软件的设计
    3. 构造阶段:产品的制造过程,开发和测试为主
    4. 交付阶段:确保软件对用户可用

构件复用模型

  • 需求框架描述
      ↓
  • 构建复用分析
      ↓
  • 需求修改与细化
      ↓
  • 系统设计
      ↓
  • 构件开发
      ↓
  • 系统集成

敏捷软件开发过程

  • 价值观
    • 个体和交互胜过过程和工具
    • 可以工作的软件胜过面面俱到的文档
    • 客户合作胜过合同谈判
    • 响应变化胜过遵循计划

Chapter 3 结构化需求分析

需求工程

软件需求

  • 业务需求
  • 用户需求
  • 系统需求

需求验证

  • 有效性检查
    • 与用户协商
  • 一致性检查
    • 文档对同一功能不应有不同描述
  • 完备性检查
    • 说明书上的功能应包含用户要求的功能
  • 现实性检查
    • 分析是否能实现,以及开发预算和进度安排
  • 可检验性检查
    • 保证描述的需求可检验

需求获取

  • 资料研究
  • 问卷调查
  • 用户访谈
  • 实地观察

结构化分析方法

  • 核心:数据字典
  • 面向数据流

实体-关系图(E-R)

☆ 数据流图(DFD)

  • 功能建模
  • 基本成分
    1. 输入源点与输出汇点
    2. 加工
    3. 数据流
    4. 数据存储文件
  • 原则
    1. 数据守恒与数据封闭原则
    2. 加工分解原则
      • 自然性
      • 均匀性
      • 分解度:子加工不超过7
    3. 子图与父图平衡
    4. 合理使用文件
  • 画图步骤
    1. 找出输入输出
    2. 画出数据流图内部
    3. 为每个数据流命名
    4. 为加工命名

状态转换图

Chapter 4 结构化设计

模块独立性

  • 内聚
    1. 功能内聚(最高)
    2. 顺序内聚
    3. 通信内聚
    4. 过程内聚
    5. 时间内聚
    6. 逻辑内聚
    7. 偶然内聚(最低)
  • 耦合
    1. 数据耦合(低)
    2. 控制耦合(中)
    3. 公用耦合(高)
    4. 内容耦合(最高)

结构化设计建模

  • 模块结构图(HIPO)
    • 是IBM公司在层次结构图的基础上推出的一种描述系统结构和模块内部处理功能的工具。它既可以描述软件总的模块层次结构–H图(层次图),又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况–IPO图。
    • HIPO图以模块分解的层次性以及模块内部输入、处理、输出三大基本部分为基础建立的。

数据设计

  • 数据结构设计
  • 文件设计
  • 数据库设计

详细设计

  • 内容

    1. 逻辑设计
    2. 接口设计
    3. 数据设计
  • 方法

    • 流程图
    • 盒图(N-S)
    • PAD图

Chapter 5 面向对象的软件方法

  • 面向对象
  • 三要素(特点)
    • 继承
    • 封装:对属性和操作进行封装
    • 多态:两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同响应

对象模型

  • 用例图
    • 执行者
    • 用例与用例之间的关系(类间关系)
      1. 关联(实线黑心)
      2. 泛化(实线空心)
      3. 包含(虚线黑心+<>)
      4. 扩展(虚线黑心+<>)
  • 类图
    • 实体类(现实的实体)
    • 控制类(润滑剂)
    • 边界类(接口)

Chapter 6 面向对象的设计

  • 强内聚
  • 弱耦合
  • 可重用

系统分解

  • 问题域子系统
  • 人机交互子系统
  • 任务管理子系统
  • 数据管理子系统
  • 类中的服务
  • 关联
  • 优化

Chapter 7 软件测试技术