软件构造笔记 1.1 Multi-Dimensional Views of Software Construction
1.从三个维度看软件系统的构成
软件维度的视图:
1)按阶段:build-time;run-time
2)按动态:moment and period
3)按级别:code and component
软件构造过程中视图间的转换:
Build-time视图:
构造阶段可看做:idea -> requirement->design->code->package
Code-level view: 关注代码的逻辑组织,如functions、classes
Component-level view: 关注代码的物理组织,如files、packages
Moment view: 关注软件在特定时刻的状态
Period view: 关注软件形态随时间的变化
1)Build-time, moment, and code-level view
关注源代码在逻辑层面是如何有基础的程序块,如functions、methods、interface等组成的。
具有三种相互关联的形式:
词汇层面:面向词汇的源代码:如半结构化的代码
语法层面:面向语法的程序结构:例如抽象语法树(AST)
AST是彻底的结构化,将源代码看做一棵树,带源代码的修改等价于对树的操作。
语义层面:面向语义的程序结构:例如,类图
2)Build-time, periodt, and code-level view
视图主要描述了代码随时间的变化(code churn),如代码的修改,文件的删除。
3)Build-time, moment, and component-levelview
主要关注:源代码被物理的组织为文件,文件具有一定的目录组织;文件被封装成为包,逻辑上封装组件和子系统;可重用模块采用库的模式;
在构造阶段,开发者像使用编程语言指令一样使用库中的功能。
库的类型有:操作系统提供的库;编程语言提供的库;第三方公司提供的库;自己积累的库。
静态链接发生在构造阶段,当链接器工具确定需要某个函数时,它会从库中提取适当的对象文件并将其复制到可执行程序中。库被拷贝进入代码形成整体,执行的时候无需提供库文件。
4)Build-time,period,and component-level view
关注各项软件实体如何随时间变化:
Software Configuration Item 配置项
Version版本
软件版本控制是将唯一版本名称或唯一版本号分配给计算机软件的独特状态的过程。
Runtime-time视图:
运行阶段关注程序在目标机器内运行时是怎样的,目标机器内存中的状态
Code-level view:可执行程序的内存状态是什么样的,程序单元(对象,函数等)如何相互交互
Component-level view:如何将软件包部署到物理环境(操作系统,网络,硬件等)以及它们如何进行交互
Moment view: 程序在特定的时间内表现
Period view: 程序如何随时间表现
ExecutablePrograms:
Native MachineCode (原生机器码):
将可执行程序完全转化为cpu可执行的机器代码
Full ProgramInterpretation (程序完全解释执行):
运行时系统将整个源代码加载到内存中并解释它(例如BASIC,UNIXshell等)
Interpreted ByteCodes (解释型字节码):
字节码与本地机器码相似,只是CPU没有
直接了解他们。
它首先将它们翻译成本机机器码或在程序执行时解释它们。
因此,字节码环境要求在程序旁边加载额外的解释器或编译器。
对于Perl或Python:它们被解释而不是编译,但在运行时使用字节码。执行Perl或Python脚本的简单行为会自动触发字节代码的生成。
动态链接:库文件不会在build阶段被加入可执行软件,仅仅做出标记;程序运行时,根据标记装载库至内存 ;发布软件时,记得将程序所依赖的所有动态库都 复制给用户。
5) Run-time, moment, and code-level view
Snapshot diagram(快照图):描述程序运行时内存里变
量层面的状态
Memorydump (内存信息转储):硬盘上的一个文件,其中包含进程内存的副本,当进程因特定类型的内部错误或信号而中止时产生内存。调试器可以加载转储文件并显示它包含的有关正在运行的程序状态的信息、信息包括寄存器,调用堆栈和所有其他程序数据(计数器,变量,开关,标志等)的内容。
(6) Run-time,period and code-level view
顺序图(Sequencediagram )in UML: 程序单元(对象)之间的交互
执行跟踪 (Executiontracing ):用日志方式记录程序执行的调用次序
(7) Run-time, moment, and component-level view
(8) Run-time,period, and component-level view
事件记录为系统管理员提供了对诊断和审计有用的信息。
每一类事件都被分配一个唯一的“代码”来格式化和输出一个人类可读的消息。
视图间的转化
∅ -> code:编程;静态分析,检查;
Code -> Component:设计;编译、打包、链接、安装、清理;
Build-time -> Run-time:安装、部署;调试、单元/集成测试;
Moment -> Period:重构;版本控制;加载,动态链接,解释,运行