掌握软件架构、需求工程、软件设计、软件实现等软件工程的核心概念和方法。
核心问题:能否达到架构级的软件复用
软件架构风格:
| 风格名称 | 说明 | 举例 |
|---|
| 数据流风格 | 批处理序列、管道/过滤器 | 流水线作业 |
| 调用/返回风格 | 主程序/子程序、数据抽象和面向对象、层次结构 | 公司组织架构 |
| 独立构件风格 | 进程通信、事件驱动的系统 | 电梯系统 |
| 虚拟机风格 | 解释器、基于规则的系统 | 脚本解释器 |
| 仓库风格 | 数据库系统、黑板系统、超文本系统 | 数据库 |
架构评估:
- 基于调查问卷(或检查表)的方式
- 基于场景的方式(最常用)
- 基于度量的方式
基于场景的方式包括:
- 架构权衡分析法(ATAM)
- 软件架构分析法(SAAM)
- 成本效益分析法
| 需求类型 | 含义 | 记忆 |
|---|
| 常规需求 | 用户认为系统应该做到的功能或性能,实现越多用户会越满意 | 满意 |
| 期望需求 | 用户想当然认为系统应具备的功能或性能,未实现会让用户不满意 | 不满意 |
| 意外需求 | 用户要求范围外的功能,实现用户会更高兴,但不实现也不影响购买决策 | 惊喜 |
需求获取方法:
用户访谈、问卷调查、采样、会议讨论法、界面原型法、情节串联板、联合需求计划等
好的需求特性:无二义性、完整性、一致性、可测试性、确定性、可跟踪性、正确性、必要性
结构化分析(SA方法):
- 核心:数据字典
- 三个层次的模型:
- 行为模型:状态转换图(STD)
- 功能模型:数据流图(DFD)
- 数据模型:实体联系图(E-R图)
面向对象分析(OOA方法):
- 基本任务:运用面向对象方法,对问题域进行分析和理解,找出所需的类和对象
- OOA模型:
- 用例模型(分析阶段的核心工作)
- 分析模型(静态模型+动态模型)
结构化设计(SD):
- 基本思想:将软件设计成由相对独立且具有单一功能的模块组成的结构
- 两个阶段:概要设计、详细设计
- 基本原则:高内聚,低耦合
- 内聚:模块内部各成分之间的联系程度
- 耦合:模块之间联系的程度
面向对象设计(OOD):
- 基本思想:抽象、封装和可扩展性
- 可扩展性:通过继承和多态来实现
- 主要任务:对类和对象进行设计(最重要的组成部分)
- 核心问题:如何同时提高软件的可维护性和可复用性
设计模式:
| 分类方式 | 类型 | 说明 |
|---|
| 处理范围不同 | 类模式 | 处理类和子类之间的关系(静态关系) |
| 对象模式 | 处理对象之间的关系(动态性) |
| 用途不同 | 创建型模式 | 用于创建对象(工厂方法、抽象工厂、原型、单例、建造者) |
| 结构型模式 | 处理类或对象的组合(适配器、桥接、组合、装饰、外观、享元、代理) |
| 行为型模式 | 描述类或对象的交互以及职责的分配(职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者) |
软件编码:
- 程序设计风格:源程序文档化、数据说明、语句结构、输入/输出方法
- 程序复杂性度量:定量度量软件的性质
- 编码效率:程序效率、算法效率、存储效率、I/O效率
软件测试:
| 测试方法 | 分类 | 说明 |
|---|
| 静态测试 | - | 被测试程序不在机器上运行,采用人工检测和计算机辅助静态分析手段检测 |
| 对文档的静态测试 | 以检查单的形式进行 |
| 对代码的静态测试 | 桌前检查、代码走查、代码审查、静态分析工具等 |
| 动态测试 | 白盒测试(结构测试) | 测试人员对软件内部结构和实现细节有详细了解,检查程序内部逻辑和结构 |
| 黑盒测试(功能测试) | 测试人员不关心软件内部的实现细节,只关注程序的输入和输出结果 |
架构风格例子
- 管道/过滤器:像流水线,每个工人(过滤器)完成特定任务,原料(数据)在流水线(管道)中流动
- 层次结构:像公司组织架构,董事长→总经理→部门经理→员工,层层调用
- 事件驱动:像电梯系统,按下按钮(触发事件)→系统响应→执行相应操作
需求层次例子
- 常规需求:手机能打电话、发短信
- 期望需求:手机电池能用一天、屏幕清晰
- 意外需求:手机有无线充电功能(用户没要求但很惊喜)
高内聚低耦合例子
- 高内聚:一个模块只做一件事,如”用户登录模块”只负责登录,不负责注册、密码修改等
- 低耦合:模块间依赖尽量少,如”订单模块”只需要知道”用户ID”,不需要知道用户的详细信息
| 知识点 | 关键要点 | 记忆口诀 |
|---|
| 架构五风格 | 数据流、调用返回、独立构件、虚拟机、仓库 | 五风格 |
| 需求三层次 | 常规(满意)、期望(不满意)、意外(惊喜) | 三层次 |
| SA三模型 | STD(行为)、DFD(功能)、E-R图(数据) | 三模型 |
| SD原则 | 高内聚,低耦合 | 原则 |
| OOD三思想 | 抽象、封装、可扩展性(继承+多态) | 三思想 |
| 设计模式三分类 | 创建型、结构型、行为型 | 三分类 |
| 测试两方法 | 静态(文档+代码)、动态(白盒+黑盒) | 两方法 |
- A A. 仓库风格 (Repository)
- B B. 管道/过滤器风格 (Pipe and Filter)
- C C. 事件驱动风格 (Event-based)
- D D. 虚拟机风格 (Virtual Machine)
解析【真题考点:架构风格选型】
- 管道/过滤器:典型的'数据流'风格,构件串联,数据依次流过。非常适合编译器、信号处理、多媒体处理等场景。
- 仓库风格:以数据库或黑板为中心,构件围绕数据中心工作。
- 事件驱动:基于消息或中断,适合GUI或控制系统。
- A A. 数据耦合 (Data Coupling)
- B B. 控制耦合 (Control Coupling)
- C C. 内容耦合 (Content Coupling)
- D D. 外部耦合 (External Coupling)
解析【真题考点:耦合性等级】
耦合度从低到高(从好到坏):
1. 非直接耦合
2. 数据耦合(传参,只传数据值 -> 好)
3. 标记耦合(传数据结构)
4. 控制耦合(传控制信号,如'开关'变量)
5. 外部耦合
6. 公共耦合(用全局变量)
7. 内容耦合(直接动人家内部数据/代码 -> 最差)
- A A. 策略模式 (Strategy)
- B B. 单例模式 (Singleton)
- C C. 适配器模式 (Adapter)
- D D. 观察者模式 (Observer)
解析【真题考点:设计模式应用】
- 策略模式:定义一系列算法(这里是'画笔算法'),把它们封装起来,并且使它们可以相互替换。非常适合'算法/行为'的动态切换。
- 单例模式:保证只有一个实例。
- 观察者模式:处理一对多依赖(如事件通知)。
- A A. 白盒测试主要依据需求规格说明书,检查功能是否实现
- B B. 只要进行了充分的黑盒测试,就没有必要再进行白盒测试
- C C. 静态测试是指不运行被测程序,仅通过检查文档或代码来发现错误
- D D. 回归测试只能在系统维护阶段进行
解析【真题考点:软件测试基础】
- A错:白盒测试依据的是'内部逻辑'(代码结构),依据需求的是黑盒测试。
- B错:黑盒白盒互补,黑盒测不到内部冗余逻辑,白盒测不到遗漏的需求。
- C对:静态测试(桌前检查、走查、评审)不需要运行程序。
- D错:开发过程中修复Bug后也需要回归测试。
- 软件架构五风格:数据流、调用返回、独立构件、虚拟机、仓库
- 需求三层次:常规需求、期望需求、意外需求
- SA三模型:STD、DFD、E-R图
- SD原则:高内聚,低耦合
- OOD三思想:抽象、封装、可扩展性
- 设计模式三分类:创建型、结构型、行为型
- 测试两方法:静态测试、动态测试(白盒+黑盒)