导图社区 架构师考试-软件工程
软考高级软件架构师软件工程部分核心内容梳理,内容有软件过程模型、瀑布模型、原型模型、螺旋模型、V模型、构建组装模型、快速应用开发方法(RAD)、统一过程开发方法(UP/RUP)、敏捷开发方法、逆向工程。
编辑于2023-09-10 18:21:45本图介绍数据库系统章节核心内容,包括数据库相关概念、分布式数据库、关系代数、规范化理论、数据控制等内容,并标准重点内容、阐述核心知识点。
主要介绍计算机网络部分关于网络相关基本概念、组网技术、TCP/IP协议簇、网络规划与设计相关的关键知识点。
分为信息工程与信息系统基础、企业信息化两部分的知识梳理和关键点摘录。第一部分包括系统工程方法和生命周期、信息系统生命周期、软件生命周期、信息系统分析和建设原则等;第二部分包括企业信息化概念、目的、企业信息化发展阶段、方法以及企业信息化各类型系统、企业应用集成EAI、电子商务、智能制造等内容。
社区模板帮助中心,点此进入>>
本图介绍数据库系统章节核心内容,包括数据库相关概念、分布式数据库、关系代数、规范化理论、数据控制等内容,并标准重点内容、阐述核心知识点。
主要介绍计算机网络部分关于网络相关基本概念、组网技术、TCP/IP协议簇、网络规划与设计相关的关键知识点。
分为信息工程与信息系统基础、企业信息化两部分的知识梳理和关键点摘录。第一部分包括系统工程方法和生命周期、信息系统生命周期、软件生命周期、信息系统分析和建设原则等;第二部分包括企业信息化概念、目的、企业信息化发展阶段、方法以及企业信息化各类型系统、企业应用集成EAI、电子商务、智能制造等内容。
信息系统开发方法
软件过程模型
软件开发风格
自顶向下
自底向上
软件活动
软件描述
软件开发
软件有效性验证
软件进化
瀑布模型
特点
严格区分阶段,每个阶段因果关系紧密相连
只适合需求明确的项目
阶段
需求分析
软件设计
程序设计
编码实现
单元测试
集成测试
系统测试
运行维护
原型模型
特点
适合需求不明确的项目
阶段
原型开发阶段
目标软件开发阶段
分类
演化型原型
抛弃式原型
螺旋模型
特点
以快速原型为基础+瀑布模型
考虑了风险问题
四个阶段
目标设定
风险分析
开发与有效性验证
评审
V模型
特点
测试贯穿于始终
测试分阶段,测试计划提前
阶段对应关系
需求分析
验收测试
系统测试
概要设计
集成测试
详细设计
单元测试
构建组装模型
优点
易扩展、易重用、降低成本、安排任务灵活
缺点
要求需要经验丰富的架构师
设计不好的构建难以重用
强调重用牺牲其他的指标
第三方构建质量难以控制
开发过程
设计构建组装
建立构件库
构建应用软件
测试与发布
构件标准
CORBA
J2EE
DNA
基于构件的软件工程(CBSE)
特征
可组装性
可部署性
独立性
文档化
标准化
符合某种标准化的构件模型
组装方法
顺序组装
顺序调用
层次组装
接口兼容
叠加组装
多个构件形成新构件
快速应用开发方法(RAD)
过程
业务建模
数据建模
过程建模
应用生成
测试与交付
快速的原因
基于构件的开发思想
统一过程开发方法(UP/RUP)
四个阶段
初始
定义最终产品的视图与业务模型
确定系统范围
细化
设计及确定系统架构
制定工作计划及资源要求
构造
开发剩余构建与应用程序功能,将构件集成为产品并进行详细测试
移交
确保软件对最终用户是可用的。进行β测试,制作产品发布版本
九个核心工作流
业务建模
需求
分析与设计
实现
测试
部署
配置与变更管理
环境
项目管理
三个特点
以架构为中心
用例驱动
增量和迭代
好处
降低了在一个增量上的开支风险
降低了产品无法按照既定进度进入市场的风险
加快了整个开发工程的进度
由于用户的需求并不能一开始做出完全的界定,后续阶段中不断细化,因此迭代过程这种模式适应需求的变化更容易些
敏捷开发方法
一种以人为核心,迭代、循序渐进的开发方法,软件项目被分为多个相互联系的可独立运行的小项目,并分别完成。在此过程中软件一直处于可使用的状态
传统软件开发方法
特点
预设性的
以开发过程为本
整体分阶段
特点
适应性的
以人为本
增量迭代,小步快跑
适合小型项目
敏捷宣言
个体与交互胜过过程与工具
可工作的软件胜过大量的文档
客户合作胜过客户谈判
响应变化胜过遵循计划
类型
XP
4大价值观
沟通
简单
反馈
勇气
SCRUM
侧重项目管理
水晶方法
提倡“机动性”的方法,拥有对不同类型项目非常有效的敏捷过程
特征驱动开发方法(FDD)
三要素
人、过程、技术
6种角色
开发人员分为两类:首席程序员与类程序员
项目经理、架构师、开发经理、首席程序员、程序员、领域专家
开放式源码
人员地域上分布很广
ASD方法
猜测、合作、学习
动态系统开发方法(DSDM)
以业务为核心
逆向工程
抽象级别
实现级
结构级
功能级
领域级
设计恢复
重构
逆向工程
正向工程
再工程
需求工程
软件需求
用户对系统功能、行为、性能、设计约束等方面的期望
分层
业务需求
用户需求
系统需求
功能需求
性能需求
设计约束
项目管理维度
基本需求
隐藏需求
兴奋需求
需求开发△△△
需求获取
用户面谈
成本高,要有领域知识支撑
联合需求计划
高度组织的群体会议,各方参与,了解想法,消除分歧,交互好,成本高
问卷调查
用户多,无法一一访谈,成本低
现场观察
针对较为复杂的流程和操作
原型化方法
解决早起需求不确定问题
头脑风暴法
围绕新业务,发散思维,不断产生新的观点
需求分析
功能模型
数据流图(DFD)
四要素:数据流、加工、外部实体、数据存储
行为模型
状态转换图(STD)
数据模型
E-R图
由实体和联系组成
数据字典
数据元素、数据结构、数据流、数据存储、加工逻辑、外部实体
形成需求规格(形成SRS)
需求确认和验证
形成需求基线
需求管理△△
变更控制、版本控制、需求跟踪、需求状态跟踪
对需求基线的管理
需求工程主要活动阶段
UML图△△△
组成
构造块
事物
结构事物
行为事物
分组事物
注释事物
关系
图
规则
范围
可见性
完整性
执行
公共机制
规格说明
修饰
公共分类
扩展机制
特点
平台无关、语言无关
分类
静态图(结构图)
类图
对象图
构件图
部署图
制品图
包图
组合结构图
动态图(行为图)
用例图
交互图
顺序图
通信图
定时图
交互概览图
活动图
类似程序流程图,并行行为
状态图
UML4+1△△
逻辑视图
系统分析、设计人员
类与对象
实现视图(开发视图)
程序员
物理代码文件和组件
进程视图
系统集成人员
线程、进程、并发
部署视图(物理视图)
系统和网络工程师
软件到硬件的映射
用例视图(场景视图)
最终用户
需求分析模型
UML关系△△
系统设计
软件设计
内容
结构体系设计(架构设计)
接口设计(人机界面交互设计)
数据设计
过程设计
界面设计
黄金三法则
1、置于用户控制之下
2、减少用户的记忆负担
3、保持界面的一致性
结构化设计
概要设计
功能需求分配给软件模块,确定每个模块的功能和调用关系,形成模块结构图
模块外部的设计:模块之间的关系
详细设计
为每个任务选择适合的技术手段和处理方法
模块内部的设计
设计原则
模块独立性原则
保持模块的大小适中
多扇入少扇出
深度和宽度不宜过高
内聚
功能内聚
顺序内聚
通信内聚
过程内聚
时间内聚
也叫瞬时内聚
逻辑内聚
偶然内聚
从上往下内聚度逐渐降低
耦合
非直接耦合
数据耦合
标记耦合
控制耦合
外部耦合
公共耦合
内容耦合
从上往下耦合程度越来越高
模块四要素
输入和输出
模块的输入来源和输出去向都是同一个调用者
处理功能
把输入转换为输出所做的工作
内部数据
模块本身引用的数据
程序代码
用来实现模块功能的程序
图与开发阶段对应关系
需求分析
数据流图
概要设计
模块结构图、层次图、HIPO图
详细设计
程序流程图、伪代码、盒图
面向对象设计
基本过程
使用UML进行分析设计
面向对象
设计模型
包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图、描述流程化处理过程的活动图等
分析模型
主要由顶层架构图、用例与用例图、领域模型构成
类的分类
边界类
机器接口
人机交互
控制类
应用逻辑
业务逻辑
数据访问逻辑
实体类
数据
面向对象设计原则
单一职责原则
设计目的单一的类
开发封闭原则
对扩展开发对修改封闭
里氏替换原则
子类可以替换父类
依赖导致原则
依赖抽象而不依赖具体的实现,针对接口编程,而不是针对实现编程
接口隔离原则
使用多个专门的接口比使用单一的总接口要好
组合重用原则
尽量使用组合而不是继承关系达到重用目的
迪米特原则
也叫最少知识原则
一个对象应该对其他对象有尽可能少的了解
软件测试
软件测试类型
动态测试
计算机运行程序
分类
白盒测试
主要用于单元测试阶段
偏向结构测试,即各种类型的覆盖测试
类型
控制流测试
逻辑覆盖测试
语句覆盖测试最弱
路径测试覆盖最强
数据流测试
程序变异测试
错误驱动测试
黑盒测试
主要用于集成测试、确认测试、系统测试阶段
偏向功能测试
类型
等价类划分:不同等价类,揭示不同问题;有效等价类/无效等价类。
边界值分析:1<=x<=10,可取x的值为0、1、10和11作为测试数据
错误推测:依靠测试人员的经验和直觉。
因果图:根据输入条件与输出结果之间的因果关系来设计测试用例。
判定表:最适合描述在多个逻辑条件取值的组合所构成的复杂情况下,分别要执行哪些不同的动作。
灰盒测试
静态测试
人工监测和计算机辅助分析
分类
桌前检查
自己检查
代码审查
交叉检查
代码走查
人工解析代码,并分析写出执行结果
分析维度
控制流分析
是否存在没有使用的语句/无法达到的语句/调用并不存在的子程序
数据流分析
引用未定义的变量、对以前未使用的变量再次赋值
接口分析
模块之间接口的一致性、子程序和函数之间的接口一致性、函数形参与实参的数量、顺序、类型的一致性。
表达式分析
括号不配对、数组引用越界、除数为零。
软件测试阶段
测试阶段
单元测试
依据[详细设计],模块测试,模块功能、性能、接口等
集成测试
依据[概要设计],模块间的接口
集成测试策略
一次性组装(风险高)
增量式组装(测试全面)
自顶向下
需要桩模块
自底向上
需要驱动模块
混合式
桩模块和驱动模块都需要
系统测试
依据[需求文档],在真实环境下,验证完整的软件配置项能否和系 统正确连接
测试维度
功能测试
性能测试
负载测试
各种工作负载下的性能
压力测试
测上限,系统的瓶颈或不能接受的性能点
强度测试
测下限,系统资源特别低的情况下运行
容量测试
并发测试,同时在线的用户数
可靠性测试
MTTF之类的参数
健壮性测试
用户界面测试
安全性测试
安装与反安装测试
确认测试
依据[需求文档],验证软件与需求的一致性。内部确认测试Alpha测试、Beta测试、验收测试
用户做确认
Alpha测试
在开发环境用户进行测试
Beta
用户环境用户测试
产品测试,项目上不会有
回归测试
测试软件变更之后,变更部分的正确性和对变更需求的符合性
测试脚本
线性脚本
结构化脚本
共享脚本
数据驱动脚本
系统运行与软件维护
遗留系统演化策略
高水平高价值
改造
改造包括系统功能的增强和数据模型的改造两个方面
高水平低价值
集成
低水平高价值
继承
继承原系统的功能模型和数据模型
低水平低价值
淘汰
新旧系统转换策略
直接转换策略
成本低,风险高
并行转换策略
新旧系统同时运行一段时间
分段转换策略
分阶段替换子系统,或者分区域替换子系统
数据转换和迁移
步骤
抽取
转换
装载
ELT
影响软件可维护性的因素
可理解性
可修改性
可测试性
可靠性
可移植性
软件维护类型
正确性维护
修BUG
适应性维护
指应用软件适应环境变化
完善性维护
扩充功能和改善性能
预防性维护
为了适应未来的软硬件环境变化主动增加预防性的新功能
经典示例:专有改通用