软件构造 1-1 Multi-Dimensional Views of Software Construction
1.1 软件构造过程中的多维度视图
一.
1.1 Multi-dimensional software views
分类如下:
- 按照阶段划分:构建时 / 运行时视图
- 按动态性划分:时刻 / 阶段视图
- 按构造对象的层次划分:代码 / 构件视图
具体分类关键字如下:
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.1.(1) Build-time, moment, and code level view 开发阶段、时刻、代码层面视图
通常来说源代码被组织为基本的程序结构,如:函数、类、方法、接口等等。需要注意的是,这种视图下共三种相互关联形式:
- 词汇层面 : 简单来说就是程序中使用的字符串、语句、变量等等。
- 语法层面: 可以使用AST(Abstract Syntax Tree,程序的语法树)。AST:彻底结构化,将源代码变为一棵树,对树做各种操作。
- 语义层面: 通常是图形化或形式化的,一般使用 UML (统一建模语言)图。
1.1.1.(2) Build-time, period, and code level view 开发阶段、周期、代码层面视图
编码过程中代码的改变情况。
使用版本控制工具可以记录每隔一段时间代码的保留、修改情况。
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)体现(记录不同系统文件的版本更新情况、现有使用版本号等)。.
版本控制工具也支持协同开发、帮助处于不同空间、不同组的多个人来进行开发与协同。
版本号分为三部分,最左边的数字为版本最大的变化(如Windows 7 -> Windows 10),越往右变化越小。
1.1.2. Run-time views of a software system 运行时视图
高级语言程序转化为机器码,即预处理、编译、运行、链接等过程。
可执行文件一次性编译成二进制代码(机器码),程序只需找的起始位置执行就行。优点是快速简单缺点是移植性差(这是由于不同操作系统机器码不相同)。
程序完全解释执行,当读到相对应的代码行时,翻译成可执行程序,这种方法的移植性好。如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.2 Software construction: transformation between views
∅ → Code
Code → Component
Build time → Run time
Moment → Period