软件的概念和特点
软件的定义
软件的发展
程序
数据
文档
个体化
作坊式
工程化
产业化
能够完成预定功能和性能的可执行的指令序列
使程序能够适当地处理信息的数据结构
开发、使用和维护程序所需要的图文资料
定义
在计算机软件的开发和维护过程中所遇到的一系列严重问题
软件危机的产生
客观:软件本身特点
原因
逻辑部件
规模庞大
忽视需求分析
消除途径
软件工程
定义
目标
三要素
主观:不正确的开发方法
错误认为:软件开发=程序编写
轻视软件维护
IEEE计算协会
(1)应用系统化的、学科化的、定量的方法,来开
发、运行和维护软件,即,将工程应用到软件。
(2)对(1)中各种方法的研究
给定时间和预算内,按照用户的需求,开发易修改、高效、可靠、可维护、
适应力强、可移动、可重用的软件。
工具
方法
过程
软件过程概念
软件过程
在工作产品构建过程中,所需完成的工作活动、动作和任务的集合
软件产品或软件系统从设计、投入到使用到被淘汰的全过程
软件工程学概述
软件生命周期
软件过程
选择过程模型
瀑布模型(经典生命周期模型)
线性模型
质量保证的观点(以文档为驱动)
特点
推迟实现
缺点
增加工作量
开发风险大
早期错误发现晚
不适应需求变化
适用于系统需求明确且稳定、技术成熟、工程管
理较严格的场合,如军工、航天、医疗
变形
V模型
原型模型
优点
减少需求不明确带来的风险
特点
缺点
构造原型采用的技术或者工具不一定主流
快速建立+连续修改可能导致质量下降
设计者在质量和原型中进行折中
客户意识不到一些质量问题
适合客户定义一个总体目标集,但是不清楚系统
的具体输入输出;或者开发者不确定算法的效
率、软件与操作系统是否兼容以及客户与计算机
交互的方式
传统软件过程模型
增量可能无法集成
增量方式+迭代方式
每个增量可用瀑布或快速原型模型
增量模型
特点
优点
缺点
不需要提供完整的需求,软件可以更早投入市场
开放体系结构,便于维护
在项目初始阶段不需要投入太多的人力资源
产品逐步交付,软件开发能够较好地适应需求的
变化
开发者很难根据客户的需求给出大小合适的增量
软件必须具备开放式体系结构(困难)
易退化成边做边改的方式,使软件过程控制失去
整体性
适用于让软件开发中需求可能发生变化、具有较
大风险、或者希望尽早进入市场的项目。
螺旋模型
结合瀑布模型和原型模型
特点
优点
缺点
强调原型的可扩充性和可修改性,原型的进化贯
穿整个软件生存周期,有助于软件的适应能力
为项目管理人员及时调整管理决策提供了方便
原型可看作可执行的需求规格说明,易于用户和
开发人员共同理解
如果每次迭代效率不高,致使迭代次数过多,将
会增加成本并推迟交付时间
要求相当丰富的风险评估经验和专门知识
适用需求不明确或者需求可能发生变化的大型复
杂的软件系统,支持面向过程、面向对象
喷泉模型
现代软件过程模型
基于构件的开放模型
特点
优点
缺点
软件复用思想
降低开放成本和风险,加快开发进度,提高软件
质量
模型复杂
商业构件不能修改,会导致修改需求,不符合客
户需求
无法完全控制所开发系统的演化
项目划分的好坏直接影响项目结果的好坏
基于面向对象方法学
特点
使用统一建模语言UML
使用与系统之间有共性的情况
完整且完美
动态视角
静态视角
实践视角
3视角
迭代式开发
管理需求
基于构件体系结构
可视化建模
验证软件质量
控制软件变更
Rational统一过程模型(RUP)
特点
个体交互
可工作软件
客户合作
响应变化
基本原理
敏捷开发
开发准则
极限编程
有效实践
特点
用图形符号以黑盒子形式描绘组成系统的每个部
件(程序、文档、数据库、人工过程等)
符号
基本符号
系统符号
系统流程图
系统流程图
系统
区别
程序流程图(详细设计)
程序
区分
特点
信息流
物理数据流(系统流程图)
做什么(物理)
数据流
数据流向,逻辑存储(DFD),与控制条件无关
做什么(逻辑)
控制流
物理过程控制时序(程序流程图)
怎么做
介于加工之间、加工与数据存储或外部项
两个加工之间可有多股数据流
注意
每个加工至少有一个输入流和一个输出流
基本符号
附加符号
可行性研究
数据流图(DFD)
符号
DFD图
基本元素
数据字典(DD)
定义数据的方法
数据流
数据流分量(数据元素)
数据存储
处理
顺序
选择
重复
可选
需求类型
功能性需求
非功能性需求
访谈
需求获取
方式
面向数据流自顶向下求精
简易的应用规格说明技术(面向团队)
特性
快速
容易修改
快速建立软件原型
第四代技术
需求分析
分析模型
工具
可重用软件构件
形式化规格说明和原型环境
模型的定义
模型是为了理解事物而对事物作出的一种抽象
需求分析模型
分析模型描述工具
需求分析
面向过程的需求分析
面向对象的需求分析
数据模型
实体-联系图(ERD)
数据字典(DD)
类图、类关系图
功能模型 数据流图(DFD)
用例图
行为模型 状态变迁图(STD)
活动图、时序图、状态图
需求描述
需求规格说明书(SRS)
一致性
完整性
现实性
有效性
需求验证
需求变更
设计过程
系统设计阶段
确定系统的具体实现方案
结构设计阶段
确定软件结构及调用关系
层次图和结构图
模块化
抽象
总体设计
逐步求精
优先级排序、自顶向下
信息隐藏和局部化
互补
完全独立
低耦合
数据耦合
必须存在,且理想的目标
控制耦合
可以分解为数据耦合
传递数据结构
中耦合
特征耦合
实际数据>所需数据
耦合
对数据访问失去控制
概要
较强耦合
公共环境耦合
公共数据环境
一个模块访问另一个模块的内部信息
尽量使用数据耦合
少用控制耦合和特征耦合
限制公共环境耦合的范围
完全不用内容耦合
设计原理
模块独立
强耦合
内容耦合
重叠代码
多接口
非正常入口
偶然内聚
模块中各机能唯一的关系是其恰好在同一个模块中
低内聚
逻辑内聚
模块内执行逻辑上相似的功能,由参数决定执行哪个功能
内聚
中内聚
高内聚
时间内聚
同一时间段内完成(初始化、异常后调用函数)
过程内聚
模块内各处理成份相关,且必须以特定次序执行
通信内聚
相同的输入数据或者输出数据
顺序内聚
和同一个功能密切相关,顺序执行(一个成分的输出作为另一个成分的输入)
功能内聚
所有成分对于完成单一的功能都是必须的
改进软件结构,提高独立性
模块规模适中
启发式规则
(低耦合、高内聚)
深度、宽度、扇出和扇入适中
顶层扇出比较高,中层扇出少,底层模块高扇入
控制域
作用域
模块本身以及所有直接或间接从属于它的模块
受该模块内一个判断影响的所有模块的集合
模块的作用域应该在控制域之内
降低模块接口的复杂性
单入口单出口模块
模块功能可预测,但防止模块功能过分局限
描述软件结构的图形工
具
层次图
连线表示调用关系
HIPO图
层次图加输入/处理/输入图
除最顶层添加编号
结构图
二种调用
选择调用
循环调用
定义
把信息流映射成软件结构
变换型流
(外部形式->内部形式)
传入部分
变换中心
传出部分
面向数据流的设计方法
事务型流
(选择一动作执行)
接收部分
事务中心
动作部分
复查基本系统模型
输入和输出数据符合实际
复查并精华数据流图
分析步骤
确定数据流图具有变换特性还是事务特性
确定输入流和输出流的边界,从而孤立出变换
中心
变换分析
完成“第一级分解”
完成”第二级分解“
使用设计度量和启发式规则对第一次分割得到的
软件结构进一步净化
识别事务型流各个组成部分
事务型DFD可以分成三部分
判断每一个动作路劲上数据流的特征:变换流或
者事务流
事务分析
把事务型DFD映射为软件结构
分解精华事务结构以及每个动作路径
精华初步软件结构