导图社区 软件工程
软件工程相关内容整理,包括:软件开发方法、软件开发模型、系统分析、系统设计、软件测试、软件维护、逆向工程。
编辑于2022-07-05 17:20:27软件工程
软件开发方法
按照开发风范
自顶向下:大问题分化成小问题,逐一解决
自底向上:从具体的部件开始,凭借设计者的技巧进行相互连接、修改和扩大
按照性质划分
形式化
数学推理方法,代表有净室工程(CSE)
非形式化
原型法
按照实现功能划分
水平原型
垂直原型
按照最终结果划分
抛弃式
演化式
结构化开发方法
是一种面向数据流的开发方法,用数据流图来建立系统的功能模型,从而完成需求分析工作
核心思想是“自上而下,逐步分解”。与瀑布模型有很好的结合度,是与其最适应的开发方法,特别适合于数据处理领域的问题,但是不适合解决大规模的、特别复杂的项目,且难以适应需求的变化
结构化分析
工具
数据流图(DFD)
组成元素
数据流(数据流向)
数据存储(以记录文件或记录表的形式来存储数据)
加工(输入数据经过什么处理后变成了输出数据流)
外部实体(指系统以外,又与系统有联系的人或事物或软件系统)
平衡原则
父图与子图的平衡
父图与子图的数据流条数和方向保持一致
子图内部的平衡
加工要同时有输入和输出
数据词典(DD)
数据流、数据存储、数据项、基本加工
结构化语言
判定表
判定树
产出
一套分层的数据流图
一本数据词典
一组小说明(也称加工逻辑说明)
补充说明
系统模型
功能模型:DFD数据流图
数据模型:ER图
行为模型:STD状态装换图
结构化设计
模块是指执行某一特定任务的数据结构和程序代码
设计原则
抽象化
过程抽象
数据抽象
控制抽象
自顶向下,逐步细化
信息隐蔽
将每个程序的成分隐蔽或封装在一个单一的设计模块中
通过信息隐蔽可以提供软件的可修改性、可测试性和可移植性
模块独立
模块划分原则
模块的大小要适中:模块功能单一,模块间不能调用频繁
模块的扇入和扇出要合理(扇入:调用上级模块;扇出:调用下级模块)
深度和宽度适当
内聚类型
功能内聚:完成一个单一功能,各个部分协同工作,缺一不可
顺序内聚:处理元素,而且必须顺序执行
通信内聚:所有处理元素集中在一个数据结构的区域上
过程内聚:处理元素相关,而且必须按特定的次序执行
瞬时内聚:所包含的任务必须在同一时间间隔内执行(如初始化模块)
逻辑内聚:完成逻辑上相关的一组任务
偶然(巧合)内聚:完成一组没有关系或松散关系的任务
耦合类型
非直接耦合:没有直接联系,互相不依赖对方
数据耦合:借助参数表传递简单数据
标记耦合:一个数据结构的一部分借助于模块接口被传递,传递数据结构的地址
控制耦合:模块间传递的信息中包含用于控制模块内部逻辑的信息
外部耦合:与软件以外的环境有关,一组模块都访问同一全局变量
公共耦合:多个模块引用同一全局数据区
内容耦合:模块间存在数据访问
概要设计
确定每个模块的功能和调用关系,形成软件的模块结构图,即SC系统结构图
系统结构图又称模块结构图
模块
模块之间的调用关系
模块之间的通信
辅助控制符号
主要工作
体系结构设计:定义软件系统各主要部件之间的关系
接口设计:软件内部,软件和操作系统间以及软件和人之间如何通信
数据设计:将模型转换成数据结构的定义。好的数据设计将改善程序结构和模块划分,降低过程复杂性
详细设计
为每个具体模块选择适当的技术手段和处理方法的过程。实现细节
主要工作:过程设计
设计工具
程序流程图
IPO图
用来描述每个模块的输入、输出和数据加工
盒图(N-S)
控制结构
顺序型
选择型
WHILE循环型(当型循环)
UNTIL循环型(直到型循环)
多分支选择型
问题分析图(PAD)
判定树
用来表示逻辑判断问题的一种常用的图形工具, 它用树来表达不同条件下的不同处理流程, 比语言、 表格的方式更为直观
语言工具
过程设计语言(PDL)也称为结构化语言或伪代码
表格工具
判定表
结构化程序设计
面向对象开发方法
基本概念
多态
定义:指同一操作作用于不同的对象可以有不同的解释,产生不同的执行结果
类型
参数多态
包含多态:一个类型是另一类型的子类型
过载多态:同一变量被用来表示不同的功能,通过上下文以决定一个类所代表的的功能
强制多态:通过语义操作把一个变元的类型加以变换,以符合一个函数的要求,如果不做这一强制性变换将出现类型错误
统一建模语言(UML)
事务
结构事务:名词、静态部分、物理元素
行为事务:动词、动态部分、行为
分组事务:包
注释事务:注解
视图
用例图
由参与者、用例、边界以及他们之间的关系构成的用于描述系统功能的视图。用例图是外部用户所能观察到的系统功能的模型图。用例图是系统的蓝图,用于需求分析阶段。
用例间的关系
包含关系:脱离了子用例,基用例是不完整的,箭头从基用例指向子用例
扩展关系:脱离了子用例,基用例依然是完整的,箭头从子用例指向基用例
泛化关系
类图
类的分类
实体类:对应系统需求中的每个实体,通常需要保存在永久存储体
控制类:用于提现应用程序的执行逻辑
接口类(边界类):用于对外部用户与系统之间的交互对象进行抽象,主要包括界面类,如对话框、窗口、菜单
类之间的关系
依赖
使用关系,类A使用到了类B,具有偶然性、临时的
泛化
继承关系的反关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。子类继承自父类,父类是子类的泛化
关联
拥有关系,一个类知道另外一个类的属性和方法,如,老师有学生
聚合
整体和部分是可以分离的
组合
强聚合,整体和部分是不可分离的
实现
接口实现
对象图
类图中事物的实例静态快照,没有操作
交互图
序列图
定义:描述消息在对象之间如何发送和接收的
构成:对象、生命线、控制焦点、消息
作用:展示对象间的交互时序
通信图(协作图)
定义:描述了该协作所有对象组成的网络结构以及相互发送消息的整体行为
构成:对象、消息、链、顺序号
作用:显示了对象及其交互关系的组织结构,表现了一个类的操作实现
交互概览图
计时图
状态图
用来描述一个特定的对象所有可能的状态,以及由于各种事件的发生而引起的状态之间的转移和变化。
活动图
本质是一种流程图,着重表现从一个活动到另一个活动的控制流
活动图主要描述行为的动作,状态图主要描述行为的结果
构件图(组件图)
构件图的思想是复用
类型
部署构件:dll文件、EXE文件、com+对象、EJB、动态Web页
工作产品构件:源代码文件
执行构件
组合结构图
部署图
用来显示系统中软件和硬件的物理架构
可以显示运行时系统的结构,同时传达构成应用程序的硬件和软件元素的配置和部署方式
包图
系统模型
功能模型:用例图
数据模型:类图
行为模型:活动图、顺序图、状态图等
设计原则
单一职责原则:设计目的单一的类
开放-封闭原则:对开展开放,对修改封闭
里式替换原则:子类可以替换父类
依赖倒置原则:要依赖于抽象,不是具体实践,对接口编程,而不是对实现编程
接口隔离原则:使用多个专门的接口比使用单一的总接口好
组合重用原则:尽量使用组合不是继承达到重用的目的
迪米特原则:一个对象应当对其他对象尽可能少的了解
设计模式
创建型模式
工厂方法模式
抽象工厂模式
单例模式
建造者模式
原型模式
结构型模式
适配器模式
装饰器模式
代理模式
外观模式
桥接模式
组合模式
享元模式
行为型模式
策略模式
模板方法模式
观察者模式
迭代模式
责任链模式
命令模式
备忘录模式
状态模式
访问者模式
中介者模式
解释器模式
敏捷开发
以人为本,与用户紧密协作,面对面沟通,今早发布增量,小而自主的开发团队。适用于规模小的项目
分类
XP极限编程
4大价值观:沟通、简单、反馈和勇气
12个最佳实践:计划游戏、小型发布、隐喻、简 单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、 每周工作40小时、现场客户、编码标准
Cockburn水晶方法
SCRUM并列争求法
FDD功用驱动方法
开放式源码
ASD自适应方法
面向服务的开发方法
抽象级别
面向构件的软件开发
构件的获取
使用现有构件
提取遗留工程构件
购买
开发
构件复用方法
检索和提取构件
理解与评价构件
修改构件
构件组装
面向数据结构的开发方法
基本思想:根据数据结构到出程序结构
Jackson
先建立系统的数据结构;接着以数据结 构为基础,对应地建立程序结构;列出程序中要用到的各种基本操 作,然后将操作分配到适当的模块中去
Warnier
适用范围
整体性:软件开发全过程的方法
局部性:某个具体阶段的软件方法
软件开发模型
瀑布模型
原型模型
需求不明确
螺旋模型
具有风险分析
瀑布模型+演化模型+风险分析
喷泉模型
面向对象的,具有迭代和无间隙的特点
V模型
强调测试
快速应用开发模型(RAD)
组件完善的情况下,代码使用工具生成
RUP
用例驱动
迭代过程
以架构设计为中心
演化模型
在快速开发一个原型的基础上,根据用户在调用原型的过程中提出的反馈意见和建议,对原型进行改进,获得原型的新版本,重复这一过程,直到演化成最终的软件产品
增量模型
风险低
构建组件模型(CBSD)
利用模块化方法,将整个系统模块化,并在一定构件模型的支持下,复用构件库中的一个或多个软件构件,通过组合手段高效率、高质量地构造应用软件系统的过程
系统分析
系统分析阶段也称逻辑设计阶段。其任务是根据系统设计任务书所确定的范围,对现有系统进行详细调查,描述现有系统的业务流程,指出现有系统的局限性和不足之处,确定新系统的基本目标和逻辑功能要求,即提出新系统的逻辑模型
过程
系统调查
收集资料
开调查会
个人访问
书面调查
抽象调查
现场观摩
参加业务实践
阅读历史文档
现有系统分析
物理系统->模型化为物理模型->抽象化为逻辑模型
现有系统逻辑模型->优化为新系统逻辑模型->新系统物理模型
组织结构分析
系统功能分析
业务流程分析
价值链分析法
客户关系分析法
供应链分析法
基于ERP的分析法
业务流程重组
业务流程建模
描述业务流程模型的方法
形式化描述
精确、严谨,易于系统以后的实现,但难以掌握和理解,模型可读性差,往往只有专业人员才会使用,因此难以推广
图示化描述
建模方式
自上而下
自下而上
建模方法
标杆瞄准
IDEF
DEMO
Petri
业务流程建模语言
基于服务的BPM
数据与数据流程分析
数据汇总分析
数据属性分析
数据的存储
系统需求规格说明书
一旦通过评审,系统需求规格说明书将成为系统开发中的权威性文件,是系统设计阶段的主要依据。同时,系统需求规格说明书也是承建方与建设方之间的技术合同,是将来对系统进行验收的标准之一
分析方法
结构化分析
面向对应分析
系统设计
结构化设计
面向对象设计
面向数据结构的设计
面向构件设计
软件测试
方法
动态测试
黑盒法
设计方法
等价类划分
边界值分析
错误推测法
因果图
功能图
白盒法
设计方法
基本路径测试
循环覆盖测试
逻辑覆盖测试
灰盒法
静态测试
桌面检查
代码评审
代码走查
性能测试
负载测试
强度测试
容量测试
软件维护
改正性维护
为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程
适应性维护
为使软件适应这种变化,而去修改软件的过程
完善性维护
为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性
预防性维护
逆向工程
实现级别:抽象的语法树、符号表、过程的设计表示
结构级别:反应程序变量之间相互依赖关系的信息,如调用图、结构图、程序和数据结构
功能级别:反应程序段功能及程序段之间关系的信息,如数据和控制流模型
领域级别:反应程序分量或程序实体与应用领域概念之间对应关系的信息,如E-R模型
软件能力成熟度评估(CMMI)
两种模型
连续式:过程的能力成熟度
过程域
过程管理
项目管理
工程
支持
阶段式:组织的能力成熟度
过程领域级别
初始级
受管理级
已定义级
定量管理级
持续优先级