软件构造基础及过程Part1——多维度视图、阶段划分及构造活动

软件构造的多维度视图

软件的3个(正交)维度:

  • phase(阶段) - 可以分为Build-time Views(构建时视图) 和 Run-time Views(运行时视图)
  • dynamic(动力学) - 可以分为Moment Views(时刻视图) 和 Period Views(时间段视图)
  • level(级别) - 可以分为Code-level Views(代码级视图) 和 Component-level Views(组件级视图)
    于是3个维度就可以产生2^3=8种不同的视图,如下图所示
Moment + Code-level Moment + Component-level Period + Code-level Period + Component-level
Build-time 源代码、AST(抽象语法树)、接口类属性方法(类图) 包、源文件、静态链接、库、测试用例(组件图) Code Churn(代码变化) Configuration Item(配置项), Version(版本)
Run-time Code Snapshot(代码快照)Memory dump(内存转储) 包、库、动态链接、配置、数据库、中间件、网络、硬件(部署图) Execution trace(执行跟踪) 、过程调用图、消息图(序列图)并行和多线程/进程分布式进程 Event log(事件日志)、过程调用图、消息图(序列图)并行和多线程/进程分布式进程

软件构造基础及过程Part1——多维度视图、阶段划分及构造活动

Build-time Views

软件构建的核心过程和环节

  • idea
  • requirement
  • design
  • code
  • installable / executable package(可安装/可执行包)

与另外2个维度的视角结合:

  • Code-level Views(代码级视图):source code——源代码是如何按照基本程序块(如函数、类、方法、接口等)以及它们之间的依赖关系进行逻辑组织的。
  • Component-level Views(组件级视图):architecture(体系结构)—源代码是如何按文件、目录、包、库以及它们之间的依赖关系进行物理组织的
  • Moment Views(时刻视图):源代码和组件在特定时间内是什么样子的
  • Period Views(时间段视图):它们是如何随时间发展/变化的?

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

即从源代码的角度,从其基本的程序模块(包括函数,类,方法,等等)以及他们之 间的联系,看源代码的逻辑组织。
具有三个内在联系的形式:词汇层面,语法层面,语义层面。

  • 词汇层面: 使用半结构化的代码:近乎自然语言的风格+遵循特定的编程语法
  • 语法层面:常用Abstract Syntax Tree(AST,抽象语法树),来表示一个半结构化的源代码
  • 语义层面:考虑源代码要实现的目标,将源代码与现实世界联系起来,使用图形化或形式化的方法,来表达”需求“与”设计“思想,再将其转化为code,主要为面向对象的分析与面向需求的设计。

(2) Build-time, period, and code-level view

随着时间用来描述变化的视图。
主要来关注代码变化(Code churn):关注版本与版本之间的代码每行的增添,修改与删除。GitHub 上可以对其进行查看。

(3) Build-time, moment, and component-level view

即从源代码的物理结构(文件,包,库等),看源代码的物理组织。

  • 源代码以物理方式组织成文件,并按目录进一步组织
  • 文件被封装成包、组件和子系统
  • 可复用模块形成类库
About Library(库)
  • 编辑、构建和安装程序时,必须提供要用到的类库列表
  • 如果源代码中引用了一个函数,但开发人员没有显式地编写它,那么将搜索库列表以定位所需的函数
  • 找到函数后,将复制类库到可执行程序中
  • 将库集成到可执行程序中的两种不同方法:Static linking(静态链接) Dynamic linking(动态链接)

(4) Build-time, period, and component-level view

  • 软件系统中的所有文件/包/组件/库如何随时间变化?
  • Software Configuration Item(SCI,软件配置项)
  • Version(版本)

Run-time Views

Run-time关注当程序在目标机器内运行时,它是什么样子的?目标机器需要加载到内存中的所有磁盘文件是什么?

与另外2个维度的视角结合:

  • Code-level view: source code(源代码):可执行程序的内存状态是什么样的?程序单元(对象、函数等)如何相互作用?
  • Component-level Views: architecture:软件包是如何部署到物理环境(操作系统、网络、硬件等)中的,它们是如何交互的?
  • Moment Views:程序在特定时间内的行为
  • Period Views:它们是如何随时间发展/变化的?
  • 它们如何随时间变化?

(5) Run-time, moment, and code-level view

  • 刻画内存中某时刻变量的状态
  • Fine-grained states. (细粒度状态)
  • Memory dump(内存转储):硬盘上的一种文件,包含进程内存内容的副本,当进程因某种内部错误或信号而中止时产生
About Memory dump
  • Debuggers可以加载转储文件并显示它包含的有关运行程序状态的信息
  • 信息包括寄存器、调用堆栈和所有其他程序数据(计数器、变量、开关、标志等)的内容
  • 这是为了分析程序的状态,程序员查看内存缓冲区,查看故障时正在处理哪些数据项

(6) Run-time, period and code-level view

关注程序单元(对象)之间的交互

  • 可以关注UML顺序图
  • 可以观察执行跟踪,用日志的方式记录程序执行的调用次序

(7) Run-time, moment, and component-level view

Deployment diagram in UML
软件构造基础及过程Part1——多维度视图、阶段划分及构造活动

(8) Run-time, period, and component-level view

关注系统层面的事件日志记录

  • Event logging(事件日志)为系统管理员提供有助于诊断和审核的信息
  • 在开发周期中,将考虑记录的不同类型的事件以及事件消息中显示的详细信息
  • 为每类事件分配一个独特的“代码”,以格式化和输出人类可读的消息
  • 这有助于本地化,并使系统管理员能够更容易地获得发生问题的信息
  • 系统层面的日志与代码层面的执行轨迹追踪之间的差别:
    软件构造基础及过程Part1——多维度视图、阶段划分及构造活动

视图之间的转化

软件构造基础及过程Part1——多维度视图、阶段划分及构造活动