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

课件翻译
课程目的:
了解软件系统的三维构成
▪ 了解用什么模型来描述软件系统的形态和状态
▪ 把软件构建看作不同视图之间的转换

多维软件视图
-按阶段:构建和运行时视图
-按动态:时刻和周期视图
-按级别:代码和组件视图
–每个视图的元素、关系和模型

构建时间(Build time):概念(idea)需求(requirement)设计(design)代码(code)可安装/可执行包(installable/executable package)
–代码级视图(code level view):源代码(source code)–如何通过函数、类、方法、接口等基本程序块对源代码进行逻辑组织,以及它们之间的依赖关系——
组件级视图:架构——源代码如何通过文件、目录、包、库以及它们之间的依赖关系进行物理组织—
—时刻视图:在特定时间内源代码和组件是什么样子的
周期视图:它们如何随时间演变/变化
在这里插入图片描述

(1) 构建时间、时刻和代码级视图
源代码如何由基本程序块(如函数、类、方法、接口等)进行逻辑组织,以及它们之间的依赖关系。
▪ 三种相互关联的形式:
–词汇层面:面向词法的源代码
–语法层面:面向语法的程序结构:例如,抽象语法树(AST) –语义层面:面向语义的程序结构:例如类图

基于词法的半结构化源代码
源代码:软件开发中最重要的资产
面向语法的程序结构
▪ 抽象语法树(AST)▪ 将半结构化源代码表示为结构化树。
在这里插入图片描述
面向语义的程序结构
▪ 例如,使用类图(UML)来描述接口、类、属性、方法以及它们之间的关系。
▪ 基于图形的或正式定义的。
▪ 在设计阶段建模,并转换为源代码。
▪ 它是根据用户需求进行面向对象分析和设计的结果。

Q:为什么要有三个层面,作用是什么?
A:面向的受众不同,词法层面最具体,但不易理解,而类图层面最抽象,易理解。

(2) 生成时间、时段和代码级视图
▪ 描述随时间而变化的观点。
▪ 从一个版本到另一个版本添加、修改或删除到文件的代码变化。

3) 构建时间、时刻和组件级视图
▪ 源代码被物理地组织成文件,这些文件进一步被目录组织起来;
▪ 文件被封装到包中,并且在逻辑上被封装到组件和子系统中。
▪ 可重用模块以库的形式存在。

Library
▪ 库存储在自己的磁盘文件中,收集一组可以跨多种程序重用的代码函数。–开发人员并不总是构建单个可执行程序文件,而是将自定义开发的软件和预构建的库连接到单个程序中。
▪ 在构建时,可以将库函数视为标准语言的扩展,并以与开发人员编写的函数相同的方式使用。

▪ 库的来源:OS预安装的一组库,用于文件和网络I/O、图形用户界面、数学、数据库评估等操作;
–来自第三方来源;
–开发人员还可以发布自己的库。
链接到库
▪ 编辑、生成和安装程序时,必须提供要搜索的库列表。编▪ 如果在源代码中引用了某个函数,但开发人员没有显式地编写它,则会搜索库列表以找到所需的函数。
javac-classpath./lib/*.jar
▪ 找到该函数后,会将相应的对象文件复制到可执行程序中。
▪ 将库集成到可执行程序中的两种不同方法:
–静态链接
–动态链接

静态链接
▪ 在静态链接中,库是单个对象文件的集合。
▪ 在构建过程中,当链接器工具确定某个函数是必需的时,它从库中提取适当的对象文件并将其复制到可执行程序中
–库的对象文件看起来与开发人员自己创建的任何对象文件都相同。
▪ 静态链接是在构建时发生的,最终只有一个可执行程序加载到目标计算机上。
–最终可执行程序创建后,无法将程序与其库分离。

UML中的组件图
▪ 在统一建模语言(UML)中,组件图描述了组件是如何连接在一起形成更大的组件或软件系统的。
在这里插入图片描述
(4) 构建时间、时段和组件级视图
▪ 软件系统中的所有文件/包/组件/库如何随时间而变化?
▪ 软件配置项(SCI)
▪ 版本

版本控制系统(VCS)
在这里插入图片描述

进化图(SCI或软件)
评估图描述软件的开发过程和阶段。

版本控制
▪ 软件版本控制是将唯一版本名或唯一版本号分配给计算机软件的唯一状态的过程。
–在给定的版本号类别(主版本号、次版本号)中,这些编号通常按递增顺序分配,并与软件的新开发相对应。
–在细粒度级别上,修订控制通常用于以增量方式跟踪电子信息的不同版本,无论这些信息是否为计算机软件。

运行时视图
软件系统的运行时视图
▪ 运行时:当程序在目标计算机内运行时,它是什么样子的?目标计算机需要加载到内存中的所有磁盘文件是什么?
——代码级视图:源代码
——可执行程序的内存状态是什么样的,程序单元(对象、函数等)是如何相互作用的?
–组件级视图:架构——软件包如何部署到物理环境(操作系统、网络、硬件等)中,以及它们如何交互?
时刻视图:程序在特定时间段的行为:它们如何随时间而变化

运行时软件的高级概念
可执行程序:CPU执行的机器可读指令序列,以及相关的数据值。
–这是完全编译的程序,可以加载到计算机的内存中并执行。 ▪ :可由不同程序重用的常用目标代码的集合。
–大多数操作系统都包含一组标准库,开发人员可以重用这些库,而不需要每个程序都提供自己的库。–库不能直接在目标计算机上加载和执行;它必须首先与可执行程序链接。

配置和数据文件:它们不是可执行文件;它们提供程序可以从磁盘加载的有用数据和配置信息。
分布式程序:这类软件由多个可执行程序组成,这些可执行程序通过网络相互通信,或者简单地说是在同一台机器上运行的多个进程。–这与更传统的软件形成了鲜明对比,后者具有单一的单片程序图像。

可执行程序:本机代码
▪ 一个程序首先被加载到内存中,并且存在几个执行软件的机制,这取决于在加载程序之前进行了多少编译,以及操作系统支持程序需要多少。
▪ 本机代码(Native Machine Code)–将可执行程序完全转换为CPU的本机代码。
–CPU只是“跳转”到程序的起始位置,所有的执行都是纯粹使用CPU的硬件来执行的。
–在执行时,程序可以选择调用操作系统来访问文件和其他系统资源。
–这是执行代码的最快方式,因为程序可以完全访问CPU的功能。
在这里插入图片描述

可执行程序:完全解释
▪ 完整程序解释(程序完全解释执)–运行时系统将整个源代码加载到内存中并对其进行解释(如BASIC、UNIX shell等)

在这里插入图片描述

可执行程序:解释字节码
▪ 解释字节码:字节码与本机代码类似,只是CPU不能直接理解它们。
–它首先将它们转换为本机代码,或者在程序执行时解释它们。 –因此字节码环境要求在程序旁边加载一个额外的解释器或编译器。
在这里插入图片描述
可执行程序:解释字节码
▪ Perl或Python:它们是解释的而不是编译的,但是在运行时使用字节码
▪ 执行Perl或Python脚本的简单动作会自动触发字节码的生成。

在这里插入图片描述
动态链接
▪ 动态链接方法不会将对象文件复制到可执行映像中;相反,它会记录成功执行程序所需的库。
▪ 当程序开始运行时,库作为单独的实体加载到内存中,然后与主程序连接。
▪ 动态库是通过连接对象文件来构造的磁盘文件。然后将库收集到发布包中并安装到目标计算机上。只有这样,它才能加载到机器的内存中。

优点:无需重新创建可执行程序,即可升级到新版本的库(添加功能或修复错误)。
–许多操作系统可以优化内存使用,方法是只将库的一个副本加载到内存中,同时与需要相同库的其他程序共享。
在这里插入图片描述
配置和数据文件
▪ 任何大的程序都使用外部数据源,如磁盘上的文件。
▪ 程序调用操作系统以请求将数据读入内存。
例如:–屏幕上显示的位图图形图像
–存储为数字化波形的声音
–自定义程序行为的配置文件
–包含联机帮助文本的一组文档
–包含名称和地址的数据库

在这里插入图片描述
分布式程序
▪ 例如,软件系统可能使用客户机/服务器模式,一台计算机上运行一个服务器程序,而许多其他计算机上运行大量客户机程序。
▪ 在这个场景中,构建系统可以创建两个发布包,因为安装服务器程序和客户端程序的人不同。
▪ 或者,可以使用相同的发行包来安装这两个独立的程序。

(5) 运行时、时刻和代码级视图

▪ 快照图:关注目标计算机内存中的可变级别执行状态。
▪ 程序的细粒度状态
侧重描述程序运行时内存 里变量层面的状态

内存转储
▪ 内存转储:硬盘上的一种文件,包含进程内存内容的副本,当进程被某种内部错误或信号中止时产生。
–调试器可以加载转储文件并显示其中包含的有关运行程序状态的信息。
–信息包括寄存器、调用堆栈和所有其他程序数据(计数器、变量、开关、标志等)的内容。
–这是为了分析程序的状态,程序员查看内存缓冲区,以查看在发生故障时正在处理哪些数据项。

(6) 运行时、时段和代码级别视图
▪ UML中的序列图:程序单元(对象)之间的交互
执行跟踪
▪ 跟踪涉及一种专门的日志记录方法,用于记录有关程序执行的信息。
▪ 这通常由程序员用于调试目的,并取决于跟踪日志中包含的信息的类型和详细信息,由经验丰富的管理员或技术支持人员以及软件监视工具用于诊断软件的常见问题。

7) 运行时、时刻和组件级视图
▪ UML中的部署图
在这里插入图片描述
(8) 运行时、时段和组件级视图
▪ 事件日志记录为系统管理员提供了对诊断和审核有用的信息。
–在开发周期中会考虑将要记录的不同类型的事件,以及事件消息中将显示哪些详细信息。
▪ 为每个事件类分配一个唯一的“代码”来格式化和输出人类可读的消息。
–这有助于本地化,并允许系统管理员更容易获得有关所发生问题的信息。
在这里插入图片描述
代码-编程/编码(第3章ADT/OOP)
-审查、静态分析/检查(删除)
▪ 代码组件-设计(第3章ADT/OOP;第4章可重用性;第5章可维护性)
-构建:编译、静态链接、包、安装等(第2章施工过程)
▪ 构建时间运行时间-安装/部署(第三年课程)-调试、单元/集成测试(第6章稳健性)
▪ 时刻周期-版本控制(第2章构造过程)
-加载、动态链接、执行(转储、分析、记录)(删除)
-并发线程(第7章并发)

总结:1.展示在不同的角度上的软件视图
2.对于不同的视图其实都是对同一个软件进行描述,不同的视图其实是可以相互转化的,只是采用的工具不同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值