软件构造的多维度构图
1. 三个维度,八个视图的总视角:
(1) By phases:Build-time/Run-time Views
(2) By dynamics:Moment/Period Views
(3) By levels:Code-level/Component-level Views
其间的组合,形成了2^3=8个视图,其具体内容如下:
2. 详细解释三个维度下的八个视图
先看Build-time Views下的四个视图
(1)Build-time Views
Build-time,即构造阶段,有以下流程
idea->requirement->design->code->installable/executable package.
其中,与下列视角结合:
(a)Code-level view 与 Component-level view。
(b)Moment view 与 Period view。前者看特定时刻的软件状态,后者看软件状态随时
间的变化。
所衍生的四个视图:
(1)Build-time,moment,code-level view:
即从源代码的角度,从其基本的程序模块(包括函数,类,方法,等等)以及他们之
间的联系,看源代码的逻辑组织。
具有三个内在联系的形式:词汇层面,语法层面,语义层面。
词汇层面: 使用半结构化的代码:近乎自然语言的风格+遵循特定的编程语法。
语法层面:常用抽象语法树(AST),来表示一个半结构化的源代码。
语义层面:考虑源代码要实现的目标,将源代码与现实世界联系起来,使用图形化
或形式化的方法,来表达”需求“与”设计“思想,再将其转化为code。
主要为面向对象的分析与面向需求的设计。
(2)Build-time,period,code-level view:
随着时间用来描述变化的试图。
主要来关注代码变化(Code churn):随着文件版本的变化,关注代码每行的增添,
修改与删除。github上可以对其进行查看。
(3)Build-time,moment,component-level view:
即从源代码的物理结构(文件,包,库等),看源代码的物理组织。
A. 源代码在物理结构上以文件的形式组织,更上层是以目录形式组织的。
B. 文件在逻辑上是被封装成Package,components和子系统的。
C. 可复用的模块是以库(library)的形式存储的。
在build time中需要执行静态链接,将库拷贝入代码形成整体,在执行时无需提供
库文件。
(4)Build-time,period,component-level view:
从软件配置项(SCI)和版本(Version)上进行观察。
其中有版本控制系统 VCS:
以及从SCI上得到的程序更新图:
软件更新是一个对软件进行不断地升级和维护的过程。
再看Run-time下的四个视图
(2)Run-time Views
Run-time,即运行阶段,有以下流程
其中,与下列视角结合:
(a)Code-level view 与 Component-level view。前者看可执行程序的内存状态,以及
程序在类,方法方面是怎样连接与交互的。后者看软件架构是怎样与操作系统,网络,硬
件等相联系的。
(b)Moment view 与 Period view。前者看特定时刻的软件状态,后者看软件状态随时
间的变化。
其中一些高层次的概念:
可执行程序,动态链接库,配置和数据文件,分布式程序。
所衍生的四个视图:
(5)Run-time,moment,code-level view:
通过快照图,关注程序运行时,目标计算机内存中变量层面的状态。
例如:
另外可以观察内存信息转储(memory dump),将当前内存信息的详细情况转储到硬
盘上的文件中,再对硬盘中的文件进行分析。
(6)Run-time,period,code-level view:
关注程序单元-类是如何交互的。
例如,可关注UML顺序图:
或者观察执行跟踪,用日志的方式记录程序执行的调用次序。
下面是用于debug过程中典型的例子:
(7)Run-time,moment,component-level view:
可观察UML部署图:计算机与服务器,服务器与服务器之间的拓扑图。
(8)Run-time,period,component-level view:
观察系统层面的事件日志。
系统层面的日志与代码层面的执行轨迹追踪之间的差别:
3. 视图之间的转化:
总体上如下图所示: