概述

软件工程生命周期

  1. 问题定义
  2. 可行性研究
  3. 需求分析
  4. 总体设计
  5. 详细设计
  6. 编码和单元测试
  7. 综合测试
  8. 软件维护

可行性研究

在了解问题定义之后,将其模型抽离出来,然后对其进行可行性分析,探索若干种解法,对每种解法仔细研究其可行性,从下面几种方面来考虑

  1. 技术可行性:能否用现又技术实现?
  2. 经济可行性:软件带来的经济效益能否大于软件的开发成本?
  3. 操作可行性:在用户组织之间是否具有操作可行性?

必要时还有从法律和社会效益来研究其可行性。

系统流程图
数据流图

成本/效益分析

成本估计的几种方法

  • 代码行技术:根据每行代码的平均成本乘以行数就是大概的成本
  • 任务分解技术:将整个声明周期划分不同阶段,估计每个不同阶段所花费的成本,一般都是各阶段的人数诚意平均工资再加这般
  • 自动估计成本:根据程序来估计,一般要用到大量数据,才能保证这个估计有效(大数据时代应该很吃香,可以利用所搜集的大量数据来进行建模)

成本/效益分析的方法

  • 货币的时间价值:这里面有年利率的概念,就是过 n 年之后,你手中的钱在 n 年之后会提升

F=P(1+n)^n (P 元钱在 n 年后的价值)

  • 投资回收期:你所赚的钱等于你所投资的资金所花费的时间越短越好
  • 纯收入:整个生命周期内,赚的钱减去你投资的钱

需求分析

与用户沟通获取需求的方法

  • 访谈
  • 面向数据流自顶向下求精
  • 简易的应用规格说明技术
  • 快速建立软件模型

根据结构化分析准则,需求分析过程应该建立三种模型,它们分别是?以及他们所用到的工具?

  • 数据模型——E-R 图:就是数据库里面学到的实体-联系图
  • 功能模型——数据流图:描述数据在系统中的转换的逻辑过程
  • 行为模型——状态转换图:作为外部事件结果的系统行为

其他的工具还有

  • 层次方框图(树形结构)
  • Warnier 图{大括号包裹)
  • IPO 图(方框-箭头;表格形式)

形式化说明技术

软件工程所使用的方法可划分为下面三种

  • 非形式化方法:用自然语言描述就是典型的非形式化方法
  • 半形式化方法:利用 E-R 图描述就是半形式化方法
  • 形式化方法:用到数学的技术,也就是说,如果一种方法用到坚实的数学基础,那么他就是形式化方法

总体设计

总体设计又称之为概要设计、初步设计

由哪两阶段组成呢?

  • 系统设计阶段:确定系统的具体实现方案
  • 结构设计阶段:确定软件结构

设计原理

模块是由边界元素限定的相邻程序元素(数据说明,可执行的语句)的序列,而且有一个总体标识符代表它

image.png

模块之间的独立程度有两个标准来度量,分别是:

耦合:度量模块间的互相依赖程度

内聚:度量模块内部元素间的结合程度

尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合
**
7 种内聚优劣评分:功能内聚(10 分)偶然内聚(0 分)

描绘软件结构的图形工具

  • 层次图(树状)和 HIPO 图(带编号的层次图)
  • 结构图

面向数据流的设计方法

概念:面向数据流的设计方法就是把信息流映射成软件结构,同时信息流的结构决定了映射的方法

  • 变换流
  • 事务流
  • 设计过程

详细设计

结构程序设计

只用 3 种控制结构就能实现任何单入口单出口的程序,这三种结构分别是顺序结构、选择结构、循环结构

人机界面设计的设计问题有:

  • 系统响应时间
  • 用户帮助实施
  • 出错信息处理
  • 命令交互

人机界面设计的设计指南:

  • 一般交互指南
  • 信息显示指南
  • 数据输入指南

过程设计的工具【重要】

  1. 程序流程图
  2. 盒图(N-S 图)
  3. PAD 图
  4. 判定表
  5. 判定树
  6. 过程设计语言

面向数据结构的设计方法

两个最著名的方法为:Jackson 方法和 Warnier 方法
**

Jackson 方法

只有顺序、选择、重复三种结构

要会用伪代码表示

程序复杂程度的定量度量有 McCabe 方法和 Halstead 方法,只介绍前者

  1. 流图(给出伪代码画流图)
  2. 计算环形复杂度的方法

实现

维护