软件构造 1-1 Multi-Dimensional Views of Software Construction

1.1 软件构造过程中的多维度视图

一.

1.1 Multi-dimensional software views

  分类如下:

  1. 按照阶段划分:构建时 / 运行时视图
  2. 按动态性划分:时刻 / 阶段视图
  3. 按构造对象的层次划分:代码 / 构件视图

软件构造 1-1 Multi-Dimensional Views of Software Construction
  具体分类关键字如下

  Moment Period
  Code-level Component-level Code-level Component-level
Build-time Source code,
AST,
Interface-Class-Attribute-Method
(Class Diagram)
Package,Source File,Static linking,Library,Test Case
(Component Diagram)
Code Churn
(代码变化)
Configuration Item,Version
Run-time Code Snapshot,Memory dump Package,Library,Dynamic linking,Configuration,Database,Middleware,Network,
Hardware
(Deployment Diagram)
Execution stack trace,
Concurrent multi-threads
Event log,
Multi-processes,
Distributed process
Procedure Call Graph,Message Graph(Sequence Diagram)

Parallel and multithreads / processes
Distributed processes

1.1.1. Build-time views of a software system 开发阶段视图

软件构造 1-1 Multi-Dimensional Views of Software Construction

1.1.1.(1) Build-time, moment, and code level view 开发阶段、时刻、代码层面视图

  通常来说源代码被组织为基本的程序结构,如:函数、类、方法、接口等等。需要注意的是,这种视图下共三种相互关联形式:

  1. 词汇层面 : 简单来说就是程序中使用的字符串、语句、变量等等。
  2. 语法层面: 可以使用AST(Abstract Syntax Tree,程序的语法树)。AST:彻底结构化,将源代码变为一棵树,对树做各种操作。
  3. 语义层面: 通常是图形化或形式化的,一般使用 UML (统一建模语言)图。
1.1.1.(2) Build-time, period, and code level view 开发阶段、周期、代码层面视图

  编码过程中代码的改变情况。
  使用版本控制工具可以记录每隔一段时间代码的保留、修改情况。
软件构造 1-1 Multi-Dimensional Views of Software Construction

1.1.1.(3) Build-time, moment, and component-level view 开发阶段、时刻、模块化层面视图

  代码的组织情况:利用模块化的组织形式。 也可以使用 UML 图表示程序的模块化视图。
  库(Library)也是一种组织形式。Java中的库文件例如 Java.io.*; 。由第三方提供,开发、编译、测试都可以用到。
  编程时和 build 时,需要告诉编译器和 IDE 库的位置。库分为静态链接、动态链接两种链接方式。详见深入理解计算机系统。

1.1.1.(4) Build-time, period, and component-level view 开发阶段、周期、模块化层面视图

  代码的改变情况(版本开发情况等)。同样是版本控制工具(VCS)体现(记录不同系统文件的版本更新情况、现有使用版本号等)。.
  版本控制工具也支持协同开发、帮助处于不同空间、不同组的多个人来进行开发与协同。软件构造 1-1 Multi-Dimensional Views of Software Construction
  版本号分为三部分,最左边的数字为版本最大的变化(如Windows 7 -> Windows 10),越往右变化越小。

1.1.2. Run-time views of a software system 运行时视图

软件构造 1-1 Multi-Dimensional Views of Software Construction
  高级语言程序转化为机器码,即预处理、编译、运行、链接等过程。
  可执行文件一次性编译成二进制代码(机器码),程序只需找的起始位置执行就行。优点是快速简单缺点是移植性差(这是由于不同操作系统机器码不相同)。
  程序完全解释执行,当读到相对应的代码行时,翻译成可执行程序,这种方法的移植性好。如Java通过解释程序,直接翻译成解释型字节码,解释型字节码在不同操作系统几乎相同,被JVM使用,使其在不同操作系统能够理解、运行。

  库文件静态链接或动态链接链接到待执行的文件上。
  对于动态链接执行的程序,发布时也需要将动态链接库发布。

  配置文件(不是可执行文件)可以帮助和规划程序的执行,对程序的执行进行限定。如对于处理多种不同数据、资源需要不同的读写方式时,可通过配置文件配置告知程序方式进行读写。

  分布式程序,主要关注不同模块上在不同机器上的具体情况。分布式程序的运行态:需要多个运行程序,分别部署于多个计算机物理环境。

1.1.2.(1) Run-time, moment, and code level view 运行阶段、时刻、代码层面视图

  使用代码快照图,描述程序运行时内存里代码层面的状态。
  也可以使用内存信息转储查看某个时间点或阶段内存的使用情况。如使用任务管理器宏观查看程序的内存使用情况。

1.1.2.(2) Run-time, period, and code level view 运行阶段、周期、代码层面视图

  UML描述程序执行时多个类、方法直接的调用。
  程序执行时也可以使用执行跟踪程序,可以查看程序执行情况:方法、类的调用等,日志方法记录程序执行的调用次序。

1.1.2.(3) Run-time, moment, and component-level view 运行阶段、时刻、模块化视图

  宏观角度下某个时刻下代码的组织情况、程序在不同机器、不同单元上模块的配置情况。

1.1.2.(4) Run-time, period, and component-level view 运行阶段、周期、模块化视图

  事件日志文件查看系统层面查看程序的使用情况,如运行服务器时的提供服务、接受请求状况。
软件构造 1-1 Multi-Dimensional Views of Software Construction

1.2 Software construction: transformation between views

∅ → Code

Code → Component

Build time → Run time

Moment → Period

软件构造 1-1 Multi-Dimensional Views of Software Construction