复习目录
多维软件视角
首先需要复习的是最重要的多维软件视角表
其中部分名词解释:
1.AST:Abstract Syntax Tree (抽象语法树)源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
示意图如下
2.Code Churn:代码变动
3.Configuration:结构
4.Middleware:中间件
5.Concurrent:并发
6.Multi-threads:多线程
Build-time Views
Moment
特定时刻的软件形态
Period
软件形态随时间的变化
- Build-time, moment, and code-level view
词汇层面:面向词法的code
语法层面:AST
语义层面:语义导向的程序结构,如类图(下图为UML图)
通过类似的图形的方式来表达需求和设计思想。 - Build-time, period, and code-level vie
Code churn:代码变化如:Lines added, modified or deleted to a file
from one version to another - Build-time, moment, and component-level view
源代码组织进文件,进一步由目录组织,形成包(Package)。
其中,可复用的文件称为库(Library)
库可以被静态链接,也可以动态链接(参见Runtime Views)
静态链接(Static linking):库被拷贝进入代码形成整体,执行的时候无需提供库文件 - Build-time, period, and component-level view
其中需要考虑:各项软件实体随时间如何变化、软件的配置项(Software Configuration Item)、版本(Version)
Runtime Views
Moment
逻辑/物理实体在内存/硬件环境中特定时刻的形态
Period
逻辑/物理实体在内存/硬件环境中的形态随时间变化的情况
- Executable Programs: Native Machine Code\Full Interpretation\Interpreted Byte Codes
- 库的动态链接
动态链接(Dynamic linking):库文件不会在build阶段被加入可
执行软件,仅仅做出标记,程序运行时,根据标记装载库至内存 - Configuration and Data File
- Distributed Programs: 需要多个运行程序,分别部署于多个计算机物
理环境
Snapshot diagram 用于描述程序运行时内存里变量层面的状态(Fine-grained 细粒度)
示意图:
- Run-time, period and code-level view ⇒ \Rightarrow ⇒ Execution tracing 执行跟踪
- Run-time, moment, and component-level view ⇒ \Rightarrow ⇒ Event logging 事件日志
视角之间的转换
- ∅ ⇒ \varnothing \Rightarrow ∅⇒ Code
- Code ⇒ \Rightarrow ⇒ Component
- Build-time ⇒ \Rightarrow ⇒ Run-time
- Moment ⇒ \Rightarrow ⇒ Period
软件系统的质量特性
外部质量因素影响用户
内部质量因素影响软件本身和它的开发者
外部质量取决于内部质量
外部质量因素(External quality factors)
- Correctness 正确性 按照预先定义的“规约”执行 最重要
- Robustness 健壮性 针对异常情况的处理 对正确性的补充 出现异常时不要“崩溃”
Reliability(可靠性) Correctness and robustness:
- Extendibility 可扩展性 对软件的规约进行修改是否容易。目的是为了应对变化
⇒
\Rightarrow
⇒
– 简约主义
– 分离主义 - Reusability 可复用性 ⇒ \Rightarrow ⇒ 一次开发,多次使用,发现程序代码之间的共性 (DRY)
Modularity(模块性) Extendibility and reusability
- Compatibility 兼容性
⇒
\Rightarrow
⇒ 不同的软件系统之间相互可容易的集成 保持设计的同构性 Standardization
– Standardized file formats
– Standardized data structures
– Standardized user interfaces - Efficiency 对性能的关注要与其他质量属性进行折中
- Portability 可移植性软件 ⇒ \Rightarrow ⇒ 可方便的在不同的技术环境之间移植
- Ease of use 易用性 ⇒ \Rightarrow ⇒ 容易学、安装、操作以及监控,要给用户提供详细的指南
- Functionality 功能性
– 注意:功能不必太复杂以影响易用性,也不能过于关注特性而忽略其他质量因素
– 每增加一小点功能,都确保其他质量属性 不受到损失 - Timeliness 及时性 在用户需要的时候能够提供出软件
- Others Verifiability (可验证性) Integrity (完整性) Repairability (可修复性) Economy (经济性)
内部特性(Internal quality factors )
Complexity , Readability, Understandability, Clearness, Size
Tradeoff between quality properties
各个质量影响因素需要折中来平衡。正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来。虽然需要折中,但 正确性 绝不能与其他质量因素折中。
五大质量目标
- Easy to understand: elegant and beautiful code / understandability ⇒ \Rightarrow ⇒ 易于理解
- Ready for change: maintainability and adaptability ⇒ \Rightarrow ⇒ 应对变化的能力
- Cheap for develop: design for/with reuse: reusability ⇒ \Rightarrow ⇒ 代码可以复用,节省开发成本
- Safe from bugs: robustness ⇒ \Rightarrow ⇒ 程序健壮性
- Efficient to run: performance ⇒ \Rightarrow ⇒ 性能优越
补充
在维护性(Maintainability)和适应性(Adaptability)的表格中有两个词
GRASP General Responsibility Assignment Software Patterns “通用职责分配软件模式”
相关资料:GRASP----(职责分配原则)
SOLID 面向对象设计5大重要原则的首字母缩写
- 单一职责原则(SRP)
- 开放封闭原则(OCP)
- 里氏替换原则(LSP)
- 接口隔离原则(ISP)
- 依赖倒置原则(DIP)
相关资料:浅谈 SOLID 原则的具体使用