软件系统有三个相互正交的三个维度
按阶段划分:build-time(构造阶段)和run-time(运行阶段)
按动态划分:moment(时刻)和period(时期)
按层次划分:code(代码层面)和component(组件,文件层面)
1. build-time
(1) build-time; moment; code-level
三种相互关联的形式
面向词法:半结构化源代码
面向词法:(AST抽象语法树)半结构化的源代码变成语法树(编译器能够处理)
面向词法:UML视图(通常是图形化或形式化的)
(2) build-time; period; code-level
Code churn(代码变化)
(3) build-time; moment; component-level
源代码如何组织成文件——通过类库
文件被压缩进package,逻辑上进入components(组件)and sub-systems(子系统)
链接技术(动态 / 静态)
Library
操作系统提供的库
编程语言提供的库
第三方公司提供的库
自己编写的库
链接:编程时和build时,需告诉IDE和JVM在哪里寻找某些库。
静态链接
库被拷贝进入代码形成整体,执行的时候无需提供库文件。
静态链接发生在构造阶段。
(4) build-time; period; component-level
配置项的更改
各项软件实体随时间如何变化
软件随时间变化的版本
版本控制(通过Git,SVN等等)
2. run-time
动态链接
- 库文件不会在build阶段被加入可执行软件,仅仅做出标记。
- 程序运行时,根据标记装载库至内存。
- 发布软件时,记得将程序所依赖的所有动态库都复制给用户。
分布式程序
- 需要多个运行程序,分别部署于多个计算机物理环境。
- 需要多端口或者多线程。
(5) run-time; moment; code-level
Code SnapShot(代码快照)
描述程序运行时内存里变量层面的状态。
Memory dump(内存信息转储)
常发生在异常退出时,把内存中信息写到文件中(常用来调试)。
(6) run-time, period and code-level view
Execution tracing(执行跟踪)
用日志方式记录程序执行的调用次序。
(7) run-time; moment; component-level
UML部署图
执行跟踪:根据跟踪日志里的信息进行调试或诊断软件问题。
(8) run-time; period; component-level
事件日志(系统层面)