1. 概述
1.1 开发只占冰山一角
1.2 计算机科学、数学,工程,管理
1.3 软件开发的本质:实现问题域中的概念和处理逻辑 到 运行平台的概念和处理逻辑的映射。
系统建模
需求 -> 设计 -> 实现
1.4 软件工程的目标:
- 生产具有正确性、可用性、以及开销合宜的产品。
1.5 软件工程的活动:
需求:定义问题,给出系统模型
- 需求获取,跟用户、领域专家沟通
- 需求定义,给出系统功能正确的陈述。通常采用自然语言、use case图
- 需求规约,系统需求规格说明
- 需求验证,验证需求陈述和需求规约的一致性、完整性、可跟踪性。
设计:在需求分析的基础上,给出系统的软件设计方案。
- 总体设计
- 建立整个软件体系结构,包括子系统/模块以及相关层次的说明、每一模块的接口定义
- 结构类型:层次模块体系结构、C/S
- 详细设计
- 根据总体设计,给出每一模块的详细描述,即数据结构和实现算法
实现:把设计结果转换为可执行代码
确认:贯穿整个开发过程
支持:修改和完善,纠错/适应
2. 软件过程
2.1 软件过程
开发逻辑,是获取正确软件的关键
- 软件开发有哪些活动?即要做哪些映射
- 应如何正确组织开发活动,形成求解软件的逻辑?
软件开发方法学:结构化方法、面向对象方法、面向数据结构方法、维也纳开发方法
过程是活动的集合,活动是任务的集合,任务是把输入转换成输出的操作。
2.2 软件生存周期过程
按承担软件开发工作的主体,分三类:
基本过程
- 获取、供应、开发、运行、维护
- 开发过程包括13个活动
- 过程的实施准备
- 系统需求分析(软硬件、人)
- 系统结构设计
- 软件需求分析(一致性、二义性)
- 软件体系结构设计
- 软件详细设计
- 软件编码和测试
- 软件集成
- 软件合格测试
- 系统集成
- 系统合格测试
- 软件安装
- 软件验收支持
支持过程
- 文档过程
- 配置管理过程
- 质量保证过程
- 验证过程
- 确认过程
- 联合评审过程
- 审计过程
- 问题解决过程
组织过程
- 管理过程
- 基础设施过程
- 改进过程
- 人力资源过程
- 资产管理过程
- 复用程序管理过程
- 领域软件工程过程
软件开发模型 = 软件生存周期模型
- 瀑布模型
- 每个阶段的工作产品,可提交的产品
- 增量模型
- 适用:最初的需求是明确,确定的。不断迭代
- 演化模型
- 适用:最初需求不明确。初版用户反馈
- 喷泉模型
- 需求分析和系统设计融合较多
3. 需求
需求的基本性质:
- 必要性:是要求的吗?
- 无歧义性:只能用一种方式解释
- 可测的:可以进行测试吗?
- 可跟踪的:可以从一个开发阶段到另一个开发阶段进行跟踪
- 可测量的,可量化
需求分类:
- 功能
功能需求规约了系统或系统构建必须执行的功能。
(1)关于该功能输入的所有假定,或为了验证该功能输入,有关监测的假定;
(2)功能内的任一次序,这一次序是与外部相关的;
(3)对异常条件的响应,包括所有内外部产生的错误;
(4)需求的时序优先程度;
(5)功能之间的互斥规则;
(6)系统内部状态的假定;
(7)为了该功能的执行,所需要的输入和输出次序;
(8)用于转换或内部计算的公式。 - 性能
- 外部接口
- 设计约束:限制了系统或构建的设计方案
- 质量属性
软件需求规约SRS:
格式:
1. 引言1.1 目的1.2 范围1.3 定义,缩略语1.4 参考文献1.5 概述(即项目范围)2. 总体描述2.1 产品概述2.2 产品功能2.3 用户特性2.4 约束2.5 假设和依赖3. 特定需求(核心)附录
索引
4. 结构化分析方法
模型:就一定目的而言,从某种角度,给出物理系统抽象的描述。主要是边界,及内部关系。
就软件需求分析而言,即:系统化地使用问题域属于,给出该问题的模型(即“系统必须做什么”的一个估算)
需求分析的目标:
对需求陈述进行分析,解决其中的歧义、不一致等问题,以系统化的形式表达用户的需求,即给出问题的形式化或半形式化的描述(称为系统的概念模型,或系统的需求规约或需求规格说明)。作为开发人员和客户间技术契约的基础,并作为而后开发活动的一个基本输入。
结构化分析模型:
(1)基本术语
数据流、加工、数据存储、数据源、数据潭
数据流、数据存储 -- 描述数据抽象
加工 -- 描述过程/功能的抽象,表达系统内涵
数据源、数据潭 -- 描述系统边界抽象,表达系统外延
(2)模型表达工具
数据流图(DFD图) -- 表达系统功能模型的工具
数据字典 -- 定义数据流和数据存储
加工小说明 -- 判定表或判定树
描述加工做什么,即加工逻辑,也包括执行条件、优先级、执行频率、出错处理等。
【1】结构化自然语言
if 20 < 订票量
then 订票折扣为10%
else 订票折扣为5%
【2】判定表
【3】判定树
(3)结构化分析过程
【1】建立系统的功能模型
首先:建立系统环境图(顶层数据流图),确定系统边界
继之:自顶向下,逐步求精,建立系统的层次数据流图
【2】建立数据字典
定义数据流、数据存储、数据项
【3】给出加工小说明
例:
(4) 需遵循的约定
加工 -- 其标识使用领域术语,采用动宾结构;必须有输入和输出
数据流 -- 其标识使用领域术语,采用名词或名词短语
(5)《XX系统需求规格说明书》
1. 引言1.1 编写目的说明编写本需求规格说明书的目的1.2 背景说明(1)给出待开发的软件产品的名称(2)说明本项目的提出者、开发者及用户(3)说明该软件产品将做什么,如有必要,说明不做什么1.3 术语定义1.4 参考文献2. 概述2.1 功能概述叙述待开发软件产品将完成的主要功能。2.2 约束叙述对系统设计产生影响的限制条件,并对下一节中所述的某些特殊需求提供理由,如管理模式、硬件限制、安全等。3. 数据流图与数据字典与加工说明3.1 数据流图3.1.1 数据流图1(1)画出该数据流图(2)加工说明(3)数据流说明3.2 数据字典3.2.1 文件说明3.2.2 数据项说明4. 接口4.1 用户接口4.2 硬件接口4.3 软件接口5. 性能需求5.1 精度逐项说明对各项输入数据和输出数据达到的精度5.2 时间特征定量说明本软件的时间特征,如响应时间、更新处理时间、数据传输、转换时间、计算时间等。5.3 灵活性说明本软件所具有的灵活性,即当用户需求有某些变化(如操作方式、运行环境、时间特征等),本软件的适应能力。6. 属性6.1 可使用性规定某些需求,如检验点、恢复方式和重启动性,以确定软件可使用。6.2 保密性规定保护软件的要素6.3 可维护性6.4 可移植性7. 其他需求7.1 数据库7.2 操作7.3 故障及处理
5. 结构化设计方法
设计:一种软件开发活动,定义实现需求规约所需要的软件结构。
设计目标:依据需求规约,在一个抽象层上建立系统软件模型,包括软件体系结构(数据和程序结构),以及详细的处理算法,产生设计规格说明书。
结构化设计分:
- 总体设计:确定系统的整体模块结构,需要的软件模块以及这些模块之间的调用关系。+
- 体系结构设计(MSD):定义软件模块及模块间关系,从分析模型(DFD图)导出。
- 接口设计
- 外部接口设计:依据分析模型中的顶层数据流图。包括用户界面,与其他软硬件的接口
- 内部接口设计:系统内部各元素间的接口
- 数据设计:根据数据字典确定软件涉及的文件系统的结构及数据库的表结构
- 详细设计:详细描述模块。
结构化设计方法
(1)总体设计阶段(将DFD转为MSD)
【1】引入两个术语:模块、调用
【2】引入模块结构图(MSD)
分两步:
DFD转为初始MSD,分类:
变换型DFD
变换设计步骤:
设计准备:复审语境,符合实际
确定边界:输入、变换、输出的边界,确定系统的逻辑输入和逻辑输出
第一级分解:主模块、输入模块、变换模块、输出模块
第二级分解:
事务型DFD
初始DSD转为可供详细设计的DSD
模块和模块化 (高内聚低耦合)
接口:由其他模块访问的对象
实现:私有量、、过程描述、源程序代码
耦合类型
内容耦合:一个模块直接访问或修改另一模块的数据
公共耦合:两个模块共同引用一个全局数据项
控制耦合:一个模块向另一模块发送控制信号
记耦合:
数据耦合:模块通过参数传递基类型的数据
内聚类型
s
三个阶段:
初始设计:根据穿越边界的数据流初步确定系统与外部的接口
精化设计:”高内聚低耦合“,精化DSD,并设计全局数据结构和每一模块的接口
设计复审
启发式规则
7 +- 2
接口设计
数据设计
详细设计工具
伪码
程序流程图(程序框图)
PAD图
N-S图
判定表/判定树
软件设计规约
概要设计规约
详细设计规约
6. 面向对象设计
OOA
OOD
OOP
UML
需求获取层:USE CASE图
需求分析层:类图、交互图
设计层:类图、交互图
实现:
表达客观事物的术语: 八个类目
类和对象:类图
接口
协作:交互图
用况:
主动类:至少一个进程或线程
构件:
制品:打包
节点:
控制复杂性的术语:包
表达关系的术语:
关联
泛化
实现
依赖