图1:MIT课件中的软件多维试图内容
概述
在软件构造课程的学习中了解了关于软件多维视图的知识,软件的多维视图是用来对软件构造和运行整个生命周期的各个过程进行集合划分的一个方法;
如图1所示,多维视图的总体框架是构建阶段和运行阶段,其中每个阶段又分为代码层面和模块层面,二者又都有其特定时刻的形态和形态随时间变化的过程。
构建阶段
代码层面的内容是指代码的逻辑组织,而模块层面的内容是指代码的物理组织。
1、特定时刻的、代码层面视图
主要分为词汇层面、语法层面和语义层面,阐述软件是如何被方法、类、接口等逻辑实现的。
词汇层面:半结构化,近乎自然语言的风格并遵循特定的编程语法;
语法层面:AST树,将代码彻底结构化,源代码变成一棵树,对树做各种操作相当于对源码做各种操作;
语义层面:指源代码想要实现的目标。
2、体现形态变化的、代码层面视图
这个层面只有code churn一个内容,意思是代码变化,说白了就是对代码的修改增删,比如增加一行或者修改删除文件一行,产生版本的变化。
3、特定时刻的、模块/构件 层面视图
源码会被物理地组织成文件,文件会组织成目录,这部分内容其实就是软件构建过程中对源码的管理,哪些代码放在一个包或者文件当中,需要调用那些库以及整个工程的文件目录等。
4、变化的、模块/构件 层面视图
各项软件实体如何变化;涉及到的内容就是各个文件的版本变化过程,需要用到VCS版本控制工具
运行阶段
代码层面是指逻辑实体在内存中如何实现;
构件/模块层面是指物理实体在物理硬件环境中如何实现;
1、某一时刻、代码层面的视图
可以使用代码快照图来衡量,代码快照图是描述程序运行时内存中变量的状态的图,比如:
图2:代码快照图
2、变化的、代码层面视图
用日志方式记录程序执行调用的次序,比如stack trace。
3、某一时刻、构件/模块 层面视图
UML图;
4、变化的、构件/模块 层面视图
和代码层面不相同,代码层面是对程序执行调用的记录,构件层面是对程序运行时发生的各种事件的记录:
记录的是更加高级的运行时事件信息。