课件翻译
课程目的:
了解软件系统的三维构成
? 了解用什么模型来描述软件系统的形态和状态
? 把软件构建看作不同视图之间的转换
多维软件视图
-按阶段:构建和运行时视图
-按动态:时刻和周期视图
-按级别:代码和组件视图
–每个视图的元素、关系和模型
构建时间(Build time):概念(idea)?需求(requirement)?设计(design)?代码(code)?可安装/可执行包(installable/executable package)
–代码级视图(code level view):源代码(source code)–如何通过函数、类、方法、接口等基本程序块对源代码进行逻辑组织,以及它们之间的依赖关系——
组件级视图:架构——源代码如何通过文件、目录、包、库以及它们之间的依赖关系进行物理组织—
—时刻视图:在特定时间内源代码和组件是什么样子的
周期视图:它们如何随时间演变/变化
(1) 构建时间、时刻和代码级视图
源代码如何由基本程序块(如函数、类、方法、接口等)进行逻辑组织,以及它们之间的依赖关系。
? 三种相互关联的形式:
–词汇层面:面向词法的源代码
–语法层面:面向语法的程序结构:例如,抽象语法树(AST) –语义层面:面向语义的程序结构:例如类图
基于词法的半结构化源代码
源代码:软件开发中最重要的资产
面向语法的程序结构
? 抽象语法树(AST)? 将半结构化源代码表示为结构化树。
Q:为什么要有三个层面,作用是什么r> A:面向的受众不同,词法层面最具体,但不易理解,而类图层面最抽象,易理解。
(2) 生成时间、时段和代码级视图
? 描述随时间而变化的观点。
? 从一个版本到另一个版本添加、修改或删除到文件的代码变化。
3) 构建时间、时刻和组件级视图
? 源代码被物理地组织成文件,这些文件进一步被目录组织起来;
? 文件被封装到包中,并且在逻辑上被封装到组件和子系统中。
? 可重用模块以库的形式存在。
Library
? 库存储在自己的磁盘文件中,收集一组可以跨多种程序重用的代码函数。–开发人员并不总是构建单个可执行程序文件,而是将自定义开发的软件和预构建的库连接到单个程序中。
? 在构建时,可以将库函数视为标准语言的扩展,并以与开发人员编写的函数相同的方式使用。
静态链接
? 在静态链接中,库是单个对象文件的集合。
? 在构建过程中,当链接器工具确定某个函数是必需的时,它从库中提取适当的对象文件并将其复制到可执行程序中
–库的对象文件看起来与开发人员自己创建的任何对象文件都相同。
? 静态链接是在构建时发生的,最终只有一个可执行程序加载到目标计算机上。
–最终可执行程序创建后,无法将程序与其库分离。
UML中的组件图
? 在统一建模语言(UML)中,组件图描述了组件是如何连接在一起形成更大的组件或软件系统的。
版本控制系统(VCS)
进化图(SCI或软件)
评估图描述软件的开发过程和阶段。
版本控制
? 软件版本控制是将唯一版本名或唯一版本 分配给计算机软件的唯一状态的过程。
–在给定的版本 类别(主版本 、次版本 )中,这些编 通常按递增顺序分配,并与软件的新开发相对应。
–在细粒度级别上,修订控制通常用于以增量方式跟踪电子信息的不同版本,无论这些信息是否为计算机软件。
运行时视图
软件系统的运行时视图
? 运行时:当程序在目标计算机内运行时,它是什么样子的计算机需要加载到内存中的所有磁盘文件是什么r> ——代码级视图:源代码
——可执行程序的内存状态是什么样的,程序单元(对象、函数等)是如何相互作用的r> –组件级视图:架构——软件包如何部署到物理环境(操作系统、 络、硬件等)中,以及它们如何交互r> 时刻视图:程序在特定时间段的行为:它们如何随时间而变化
运行时软件的高级概念
? 可执行程序:CPU执行的机器可读指令序列,以及相关的数据值。
–这是完全编译的程序,可以加载到计算机的内存中并执行。 ? 库:可由不同程序重用的常用目标代码的集合。
–大多数操作系统都包含一组标准库,开发人员可以重用这些库,而不需要每个程序都提供自己的库。–库不能直接在目标计算机上加载和执行;它必须首先与可执行程序链接。
配置和数据文件:它们不是可执行文件;它们提供程序可以从磁盘加载的有用数据和配置信息。
? 分布式程序:这类软件由多个可执行程序组成,这些可执行程序通过 络相互通信,或者简单地说是在同一台机器上运行的多个进程。–这与更传统的软件形成了鲜明对比,后者具有单一的单片程序图像。
可执行程序:本机代码
? 一个程序首先被加载到内存中,并且存在几个执行软件的机制,这取决于在加载程序之前进行了多少编译,以及操作系统支持程序需要多少。
? 本机代码(Native Machine Code)–将可执行程序完全转换为CPU的本机代码。
–CPU只是“跳转”到程序的起始位置,所有的执行都是纯粹使用CPU的硬件来执行的。
–在执行时,程序可以选择调用操作系统来访问文件和其他系统资源。
–这是执行代码的最快方式,因为程序可以完全访问CPU的功能。
可执行程序:完全解释
? 完整程序解释(程序完全解释执)–运行时系统将整个源代码加载到内存中并对其进行解释(如BASIC、UNIX shell等)
可执行程序:解释字节码
? 解释字节码:字节码与本机代码类似,只是CPU不能直接理解它们。
–它首先将它们转换为本机代码,或者在程序执行时解释它们。 –因此字节码环境要求在程序旁边加载一个额外的解释器或编译器。
优点:无需重新创建可执行程序,即可升级到新版本的库(添加功能或修复错误)。
–许多操作系统可以优化内存使用,方法是只将库的一个副本加载到内存中,同时与需要相同库的其他程序共享。
(5) 运行时、时刻和代码级视图
? 快照图:关注目标计算机内存中的可变级别执行状态。
? 程序的细粒度状态
侧重描述程序运行时内存 里变量层面的状态
内存转储
? 内存转储:硬盘上的一种文件,包含进程内存内容的副本,当进程被某种内部错误或信 中止时产生。
–调试器可以加载转储文件并显示其中包含的有关运行程序状态的信息。
–信息包括寄存器、调用堆栈和所有其他程序数据(计数器、变量、开关、标志等)的内容。
–这是为了分析程序的状态,程序员查看内存缓冲区,以查看在发生故障时正在处理哪些数据项。
(6) 运行时、时段和代码级别视图
? UML中的序列图:程序单元(对象)之间的交互
执行跟踪
? 跟踪涉及一种专门的日志记录方法,用于记录有关程序执行的信息。
? 这通常由程序员用于调试目的,并取决于跟踪日志中包含的信息的类型和详细信息,由经验丰富的管理员或技术支持人员以及软件监视工具用于诊断软件的常见问题。
7) 运行时、时刻和组件级视图
? UML中的部署图
总结:1.展示在不同的角度上的软件视图
2.对于不同的视图其实都是对同一个软件进行描述,不同的视图其实是可以相互转化的,只是采用的工具不同
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!