软件构造(1)- 软件构造的多维度视图

一. 软件构造的多维度视图:

软件构造(1)- 软件构造的多维度视图1. 构造阶段
Code-level 代码的逻辑组织:functions, classes, methods, interfaces
Component-level 代码的物理组织:files, directories, packages, libraries
Moment view 指特定时刻的软件形态
Period view 指软件形态随时间的变化

(1) Build-time, moment, and code-level view

词汇层面:Lexical-oriented source code
半结构化:近乎自然语言的风格+遵循特定的编程语法。(前者方便程序员,后者方便编译器)
语法层面:Syntax-oriented program structure: e.g., Abstract Syntax Tree (AST)
AST:彻底结构化,将源代码变为一棵树,对树进行各种操作==对源代码进行修改
软件构造(1)- 软件构造的多维度视图
语义层面:Semantics-oriented program structure: e.g., Class Diagram(UML类图)
语义:源代码具体想实现什么目标?从源代码到现实世界
软件构造(1)- 软件构造的多维度视图
(2) Build-time, period, and code-level view
Code churn 代码变化:添加、修改、删除从一个版本到另一个版本的文件。

(3) Build-time, moment, and component-level view
源代码通过文件,目录,包,库及其依赖关系进行物理组织。
Static linking 静态链接:库被拷贝进入代码形成整体,执行的时候无需提供库文件(happens in build time)

(4) Build-time, period, and component-level view
Software Configuration Mgmt. (SCM) 软件配置管理:追踪和控制软件的变化
Software Configuration Item (SCI) 软件配置项:软件中发生变化的基本单元(例如:文件)
软件构造(1)- 软件构造的多维度视图

版本控制系统(VCS)
基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)软件构造(1)- 软件构造的多维度视图

版本控制Versioning
版本:为软件的任一特定时刻(Moment)的形态指派一个唯一的编号,作为“身份标识”
软件构造(1)- 软件构造的多维度视图
使用git进行版本控制:
软件构造(1)- 软件构造的多维度视图

  1. 运行阶段
    Code-level view 代码层面:逻辑实体在内存中的呈现方式
    Component-level view 构件层面:物理实体在物理硬件环境中的呈现方式
    Moment view: 逻辑/物理实体在内存/硬件环境中特定时刻的形态
    Period view:逻辑/物理实体在内存/硬件环境中的形态随时间如何变化

动态链接:
库文件不会在build阶段被加入可执行软件,仅仅做出标记
程序运行时,根据标记装载库至内存
发布软件时,将程序所依赖的所有动态库都复制给用户
优点:
1.不用重新创建可执行文件,就可以把依赖库更新到更新的版本
2.操作系统可以优化内存使用,只将库的一个副本加载到内存中,然后与其他需要相同库的程序共享它

(1) Run-time, moment, and code-level view
Snapshot diagram
代码快照图:描述程序运行时内存里变量层面的状态
软件构造(1)- 软件构造的多维度视图
Memory dump
内存信息转储:硬盘上的一种文件,包含进程内存内容的副本,当进程因某种内部错误或信号而中止时产生。
可用于分析当前程序状态,并找到在程序崩溃时正在运行的元素

(2) Run-time, period and code-level view
Execution tracing 执行跟踪:用日志方式记录程序执行的调用次序
软件构造(1)- 软件构造的多维度视图
(3) Run-time, moment, and component-level view
UML中的部署图
软件构造(1)- 软件构造的多维度视图
(4) Run-time, period, and component-level view
事件日志:系统层面

event logging与 exection tracing对比
软件构造(1)- 软件构造的多维度视图

二.软件构造:多个视图间进行转换

软件构造(1)- 软件构造的多维度视图转换类型:
none -> Code

  • Programming / Coding
  • Review, static analysis/checking

代码 -> 组件

  • 设计Design
  • 构建:编译,静态链接,打包,安装…

构建阶段 -> 运行阶段

  • 安装,部署deploy
  • 调试,单元测试/综合测试

时刻 -> 时间段

  • 重构
  • 版本控制
  • 加载,动态链接,解释,执行