多维软件视图
1 Build-time Views
idea ⇒ requirement ⇒ design ⇒ code ⇒installable / executable package
Code-level view: 着重源代码----源代码的逻辑组织方式:通过基本程序块,如函数、类、方法、接口等,以及它们之间的依赖关系.
Component-level view:着重架构 ---- 源代码是如何通过文件、目录、包、库和依赖性等物理方式
组织的,以及它们间的依赖关系.
Moment view: 源代码和组件在特定时间内是什么样子的?
Period view: 它们是如何随着时间的推移而演变/改变的?
1.1 Build-time, moment, and code-level view
Three inter-related forms:
– 词汇层面: Lexical-oriented source code.
– 语法层面: Syntax-oriented program structure: e.g., Abstract Syntax Tree (AST):将半结构化的源代码作为一个结构化的树。对树做各种操作==对源代码的修改
– 语义层面: Semantics-oriented program structure: e.g., Class Diagram:于表达“需求”和“设计”思想,再转化成code.
1.2 Build-time, period, and code-level view
Code churn 代码变化: 从一个版本到另一个版本在文件中添加、修改或删除的行。
1.3 Build-time, moment, and component-level view
源代码被物理地组织成文件,这些文件又被目录来组织;
文件被封装成包,在逻辑上,被封装成组件和子系统。
可重复使用的模块是以库的形式存在的。
关于Static linking:在静态链接中,一个库是单个对象文件的集合。
在构建过程中,当链接器工具确定需要一个功能时,它会从库中提取适当的对象文件,并将其复制到可执行程序中。 库被拷贝进入代码形成整体,执行的时候无需提供库文件。
- 库的对象文件看起来与开发者自己创建的任何一个对象文件相同。
- 最终有一个单一的可执行程序被加载到目标机上。
- 在最终的可执行程序被创建后,不可能将程序分开
-静态链接发生在构造阶段
1.4 Build-time, period, and component-level view
软件版本管理是为计算机软件的独特状态指定独特的版本名称或独特的版本号的过程。
- 在一个给定的版本号类别中(可能是主要的,次要的),这些数字通常是按递增的顺序分配的,并对应于软件的新发展。
2 Runtime Views
可执行程序: 机器可读的指令序列的指令序列,以及相关的数据。
- 这是完全编译好的程序,准备装入计算机内存并执行。
库: 常用目标代码的集合,可以被不同的程序重复使用。
- 大多数操作系统都包括一套标准的库,开发者可以重复使用,而不是要求每个程序都要有一个库。
- 一个库不能直接在目标机上加载和执行;它必须首先与可执行程序连接。
程序首先被加载到内存中,然后有几种机制来执行软件。
这取决于在加载程序之前进行了多少编译以及程序需要多少操作系统支持。
Native Machine Code (原生机器码):
- 将可执行程序完全转换为CPU的本地机器码。
- CPU只需 "跳转 "到程序的起始位置,所有的执行都是纯粹使用CPU的硬件。
- 在执行过程中,该程序可以选择对操作系统进行调用,以访问文件和其他系统资源。
- 这是执行代码的最快方式、因为该程序完全访问了CPU的功能。
Interpreted Byte Codes (解释型字节码):
- 字节代码类似于本地机器代码,只是CPU不直接理解它们。
- 它首先将它们翻译成本地机器码,或者在程序执行时对它们进行解释。
- 因此,一个字节码环境需要一个额外的解释器或编译器与程序一起加载。
动态连接方法并不将对象文件复制到可执行图像;相反,它注意到哪些库是成功执行程序所需要的。
优点:
- 有可能升级到一个库的较新版本(增加功能或修复错误),而不需要重新创建可执行程序。
-许多操作系统可以通过在内存中只加载一个库的副本,但与其他需要相同库的程序共享它来优化内存的使用。
2.1 Run-time, moment, and code-level view
快照图:专注于目标计算机的内存中的变量级执行状态。
2.2 Run-time, period and code-level view
Tracing是用日志方式记录程序执行的调用次序,以记录关于程序执行的信息。
这通常是由程序员用于调试目的,并且根据跟踪日志中所包含的信息的类型和细节、
有经验的管理员或技术支持人员,以及由软件监控工具来诊断软件的常见问题。
2.3 Run-time, moment, and component-level view
主要表现为UML中的部署图:
2.4 Run-time, period, and component-level view
事件日志为系统管理员提供信息诊断和审计的有用信息。
- 将被记录的不同类别的事件,以及在事件消息中出现的细节将会出现在事件消息中的不同类别的事件,在开发周期中被考虑。
- 每一类事件都将被分配一个独特的 "代码 "来格式化和输出一个人可读的信息。