软件三维度八视图
软件描述的三个维度分别是:Code/Component, Run-time/Build-time, Moment/Period
分别对应于空间、时间、状态。从局部代码的角度来看能看到软件的内容,从整体组件的角度来看能看到代码的结构。一个软件可以是静态的程序,也可以是动态的应用。一个软件具有某一时刻的状态,在一段时间内具有一定的行为模式,这就构成了基本的三个维度。
Period | Moment | |||
Code | Component | Code | Component | |
Build-time | Source code, AST | Package, File, Test case, Build Script | Code Churn | Configuration Item, Version |
Run-time | Code Snap, Memory | Package, Dynamic Linking, Network, Hardware | Execution Trace, Multi-Thread | Event log, Multi-Process |
Sequence Diagram |
各象限的内容浅析
构建时,代码视角,时间点:源码、AST、语意
代码是程序的最基本内容,一个代码经过词法分析和语法分析得到抽象语法树,进而对应某种机器的形式化操作。而原始的源代码对应的功能,即语意,则是程序员希望达到的目标。
构建时,组件视角,时间段:包、文件、测试用例、构建脚本
一个程序要想构建起来,仅有源代码是不够的。程序必须按照一定的规则组织成包、模块、编译单元等编译系统支持的结构,配合依赖的库文件,经过构建脚本的处理,才能得到可执行的程序。静态链接和运行测试用例也是在构建时进行的。
构建时,代码视角,时间段:代码变更
代码变更是以行为单位的增、删、改,是代码的最小变更单位。代码变更的频率和代码的质量有很大的关系,代码变更的频率越高,说明代码的质量相对较差,需要不断的改bug或改需求。
构建时,组件视角,时间段:配置项、版本
软件配置项是更宏观的软件管理单位,例如Git将文件作为软件配置项。软件版本则是特定时间下所有软件配置项的综合体,是软件的一个快照。软件版本管理通过记录软件配置项的变更,并维护软件版本中的软件配置项的内容,来实现记录软件开发的历史。
运行时,代码视角,时间点:代码快照、内存
运行时的代码快照图是对代码当前引用和对象内容的一个抽象展示,体现出引用和对象是否可变,包含哪些内容,经历过哪些变化。内存则包含代码运行时的具体数据。
运行时,组件视角,时间段:包、动态链接、网络、硬件
部署图展示了软件在运行时如何进行机器间的业务交互,通常是展示了包含网络通讯和远程服务的情况下,各中间节点机器的OS、软件支持、代码模块、代码逻辑,以及他们之间的数据链路。
运行时,代码视角,时间段:栈追踪、多线程
代码中的调用栈信息可以展示出代码是如何一步步地进入当前函数的,常用于调试。
运行时,模块视角,时间段:事件日志、多进程
事件日志提供了宏观视角下的软件运行情况,可以用于分析软件的性能瓶颈和问题原因。
软件构造的阶段
1.从无到代码:程序员设计代码
2.从代码到模块:程序员设计软件结构
3.从构建到运行:程序员将软件部署在设备上
4.从时间点到时间段:运行软件,获取结果和日志
软件设计的五个核心维度
核心:
避免错误
易于理解
便于修改
其余:
高效开发
高效运行