软件构造的多维度视图
多维软件视图:
(1) Build-time, moment, and code-level view
含义:代码是如何基于基本程序块及其它们之间的依赖关系有逻辑地组织起来的。
基本逻辑块包括:函数、类、方法、接口等。
有三种相互关联的形式:
- 词汇层面:Lexical-oriented source code
半结构化的源代码(exical-based semi-structured source code)
半结构化:近乎自然语言地风格+遵循特定地编程语法
– 语法层面:Syntax-oriented program structure
抽象语法树Abstract Syntax Tree (AST)
将半结构化的源代码表示成结构化的树,对树做各种操作==对源代码的修改
– 语义层面:Semantics-oriented program structure
语义:源代码想实现什么目标
它是针对用户需求进行面向对象分析和设计(Object-Oriented Analysis and Design)的结果。程序员在设计阶段建模表示语义,这种表示通常是图形化或形式化,之后再将其转换为源代码
e.g., 使用Class Diagram(UML)来描述基本程序块和它们之间的关系。
(2) Build-time, period, and code-level view
含义:代码在构造阶段一段时期内的变化
Code chun 代码变化:在版本变换过程中对文件中的代码行增添、修改、删除。
(3) Build-time, moment, and component-level view
含义:(1)中结构的物理实现
源代码(source code)被组织成文件(files),文件又被组织成目录(directories)。
文件被封装到包(packages)中,包可理解为组件和子系统。
可复用模块以库(libraries)的形式出现。
库:库存储在自己的磁盘文件中(并非调用该库的程序的文件中),它包含一组可在不同程序中复用的函数。在构造阶段,开发者可以将库函数视为标准语言的拓展,像使用自己编写的函数一样使用它们。
库的链接:在构建项目时我们需要为项目(IDE、JVM)指明去哪里寻找用到的库。当源代码中出现了没有被开发者编写的函数时,就会在库列表中搜索使用的函数,当该函数被找到,就会复制相应的文件到可执行程序,这个复制过程叫做链接。链接主要有两种方式:静态链接(static linking)和动态链接(Dynamic linking)
静态链接:库在编译时被拷贝进入代码形成整体(产生唯一一个可执行文件,该整体不可分割),执行的时候无需提供库文件。
动态链接:发生在运行阶段,库文件不会再编译阶段加入执行程序,而是做上标记,在程序执行时再根据标记装在至内存。
(4) Build-time, period, and component-level view
含义:在构造阶段各项软件实体随时间如何变化
关键词:Software Configuration Item (SCI,配置项);
Version (版本) ;
Version Control System (VCS)
Evaluation graph描述了一个软件的开发过程和各个阶段
Software versioning(软件版本控制)是指分配一个版本名或唯一的版本号到的某计算机软件的唯一状态。
番外:关于运行阶段软件的一些概念
Executable programs(可执行程序):一个完全编译的程序可以直接加载到计算机内存中执行,它包含一个计算机可读的供CPU执行指令序列,以及相关数据。
Libraries(库);
Configuration and data files(配置文件和数据文件):提供程序所需的数据和配置信息,可以从磁盘加载,但不可执行。
Distributed programs(分布式程序):这种软件由多个可执行程序组成,这些程序通过网络进行交互或简单地作为多个进程运行在同一个机器上。
(5) Run-time, moment, and code-level view
Snapshot diagram(代码快照图):描述程序运行时内存里变量层面的状态
Memory dump (内存信息转储):一个包含进程内存内容的存储在硬盘上的副本文件,当某个进程被某种内部错误或信号终止时创建。
(6) Run-time, period and code-level view
Execution tracing(执行跟踪):用日志(log)方式记录程序执行的调用次序
(7) Run-time, moment, and component-level view
Deployment diagram in UML
(8) Run-time, period, and component-level view
Event logging(事件日志):系统层面