软件构造第一章

软件构造第一章

第1章:软件构建的观点和质量目标1.1软件构建的多维视图
1.1软件构建的多维视图
大纲
多维软件视图 - 按阶段:构建和运行时视图 - 按动态:时刻和周期视图 - 按级别:代码和组件视图 - 每个视图的元素,关系和模型软件构造:视图之间的转换 - ∅⇒代码 - 代码⇒组件 - 构建时间⇒运行时间 - 时刻⇒期限总结
1.1软件构建的多维视图本讲座的目标
以三个正交维度理解软件系统的组成部分; 了解用什么模型来描述软件系统的形态和状态; 将软件构造视为不同视图之间的转换;
软件构建
1多维软件视图
1.1软件构建的多维视图
什么是软件?
AlanTuring首先提出“软件”一词​​。 - 系统软件与应用软件 - 桌面/网络/移动/嵌入式软件 - 面向企业/个人的软件 - 开源与专有软件
阿兰图灵(1912-1954)
1.1软件构建的多维视图软件系统的组成部分
软件=程序(代码)? 软件=算法+数据结构? 软件=程序+数据+文档软件=模块(组件)+数据/控制流程
Donald E. Knuth(1938-)图灵奖1974
Edager Dijkstra(1930-2002)图灵奖1972年
NiklausWirth(1934-)图灵奖1984
1.1软件构建的多维视图软件系统的组成部分:再迈出一步
软件系统= - 程序(UI,算法,实用程序,API,测试用例等) - 数据(文件,数据库等) - 文档(SRS,SDD,用户手册等)+++++++++++ ++++++用户谁会使用它? - 业务目标为什么它有用? - 社会环境应该遵循什么样的规则? - 技术环境如何实施? - 硬件/网络运行时是什么时候?
1.1软件构建的多维视图多维软件视图
时刻周期代码级组件级代码级组件级
构建时
源代码,AST,Interface-ClassAttributeMethod(ClassDiagram)
包,源文件,静态链接,库,测试用例(组件图)
Code Churn(代码变化)
配置项,版本
运行
代码快照,Memorydump
包,库,动态链接,配置,数据库,中间件,网络,硬件(部署图)
执行跟踪事件日志过程调用图,消息图(序列图)
并行和多线程/进程分布式进程
软件构建
(1)构建时间视图
1.1软件构建的多维视图软件系统的构建时视图
构建时间:想法⇒需求⇒设计⇒代码⇒可安装/可执行包 - 代码级视图:源代码----源代码如何通过基本程序块(如函数,类,方法,接口等)进行逻辑组织,和它们之间的依赖关系 - 组件级视图:体系结构----源代码如何按文件,目录,包,库以及它们之间的依赖关系进行物理组织-------------- --------------------------------------------------时刻视图:源代码和组件在特定时间内的样子 - 周期视图:它们如何随时间演变/变化

(1)构建时,时刻和代码级视图
源代码如何通过基本程序块(如函数,类,方法,接口等)以及它们之间的依赖关系进行逻辑组织。 三种相互关联的形式: - 面向词汇的源代码 - 面向语法的程序结构:例如,抽象语法树(AST) - 面向语义的程序结构:例如,类图
1.1软件构建的多维视图
源代码:软件开发中最重要的资产
基于词汇的半结构化源代码
1.1软件构建的多维视图面向语法的程序结构
抽象语法树(AST)将半结构化源代码表示为结构化树。
而(a≠b){if(a> b)a = a - b;否则b = b - a;返回; }
https://en.wikipedia.org/wiki/Abstract_syntax_tree
1.1软件构建的多维视图面向语义的程序结构
例如,使用类图(UML)来描述它们之间的接口,类,属性,方法和关系。 基于图形或正式定义。 通常在设计阶段建模,并转换为源代码。 这是面向对象分析和设计的结果,用户要求。
1.1软件构建的多维视图面向语义的程序结构
1.1软件构建的多维视图(2)构建时间,周期和代码级视图
描述“变化”和时间的视图。 代码流失:从一个版本到另一个版本添加,修改或删除文件的行。
1.1软件构造代码流失的多维视图代码流失定义为从一个版本到另一个文件的文件添加,修改或删除。
1.1软件构建的多维视图(3)构建时,时刻和组件级视图
源代码按物理方式组织成文件,进一步按目录组织; 将文件封装到包中,逻辑上封装在组件和子系统中。 可重用模块采用库的形式。静态链接
1.1软件构建的多维视图
图书馆
库存储在自己的磁盘文件中,收集一组代码函数,可以在各种程序中重用。 - 开发人员并不总是构建单个可执行程序文件,而是将自定义开发的软件和预构建的库加入到单个程序中。 在构建时,库函数可以被视为标准语言的扩展,其使用方式与开发人员编写的函数相同。 System.out.println(“Hello World”); 库的来源: - FromOS预安装的库集,用于文件和网络I / O,GUI,数学,数据库评估等操作; - 来自语言SDK; - 来自第三方来源,例如从Internet下载。 - 开发人员还可以发布自己的库。
1.1软件构建的多维视图
链接库
编辑,构建和安装程序时,必须提供要搜索的库列表。 如果源代码中引用了某个函数但开发人员没有明确地编写它,则会搜索库列表以找到所需的函数。 找到该功能后,相应的目标文件将被复制到可执行程序中。 将库集成到可执行程序中的两种不同方法: - 静态链接 - 动态链接

静态链接
在静态链接中,库是各个目标文件的集合。 在构建过程中,当链接器工具确定需要某个函数时,它会从库中提取相应的目标文件并将其复制到可执行程序中。 - 库的目标文件看起来与开发人员自己创建的任何目标文件相同。 静态链接在构建时发生 - 在构建过程中,将库与开发人员自己的软件链接起来。 - 最终将一个可执行程序加载到目标机器上。 - 在创建最终的可执行程序之后,将程序与其库分开是不可能的。
1.1 UML中软件构建组件图的多维视图
1.1软件构建的多维视图(4)构建时间,周期和组件级视图
软件系统中的所有文件/包/组件/库如何随时间变化? 软件配置项(SCI)版本
1.0 1.1 1.2 1.3
File 3File 2File 1Version Labels
最终版本
Beta 1
1.0 1.1 1.2 1.3
1.0 1.1 1.2
1.0 1.1 1.2 1.3 1.4
1.1软件构建版本控制系统(VCS)的多维视图
1.1软件构建演化图(SCI或软件)的多维视图
1.1软件构建的多维视图
版本
软件版本控制是将唯一版本名称或唯一版本号分配给计算机软件的唯一状态的过程。 - 在给定版本号类别(主要,次要)内,这些数字通常按递增顺序分配,并对应于软件中的新发展。 - 在细粒度级别,版本控制通常用于跟踪增量不同版本的电子信息,无论该信息是否是计算机软件。
1.1软件构建的多维视图
软件进化
软件进化是一个用于软件维护的术语,指的是初始开发软件的过程,然后由于各种原因反复更新软件。 - 典型系统的90%以上的成本出现在维护阶段,并且任何成功的软件都将不可避免地得到维护。
弗雷德里克布鲁克斯(1931-)图灵奖1999
软件构建
(2)运行时视图
1.1软件构建的多维视图软件系统的运行时视图
运行时:程序在目标机器内运行时的样子是什么,目标机器需要加载到内存中的所有磁盘文件是什么? - 代码级视图:源代码----可执行程序的内存状态是什么样的,程序单元(对象,函数等)如何相互交互? - 组件级视图:体系结构----如何将软件包部署到物理环境(操作系统,网络,硬件等)以及它们如何交互? -------------------------------------------------- -------------- Moment view:程序在特定时间内的行为方式 - 周期视图:它们如何随时间变化
1.1软件构建的多维视图运行时软件的高级概念
可执行程序:CPU执行的机器可读指令序列以及相关数据值。 - 这是完全编译的程序,可以将其加载到计算机的内存中并执行。 库:可以由不同程序重用的常用对象代码的集合。 - 大多数操作系统都包含一组开发人员可以重用的标准库,而不是要求每个程序都提供自己的库。 - 无法在目标机器上直接加载和执行库;它必须首先与可执行程序链接。运行时软件的高级概念
配置和数据文件:这些不是可执行文件;它们提供程序可以从磁盘加载的有用数据和配置信息。 分布式程序:这种类型的软件由多个可执行程序组成,这些程序可以通过网络相互通信,或者只是在同一台机器上运行多个进程。 - 这与具有单个单片程序映像的更传统软件形成对比。
1.1软件构建可执行程序的多维视图:本机代码
程序首先被加载到内存中,并且存在几种用于执行软件的机制,具体取决于在加载程序之前进行了多少编译以及程序需要多少OS支持。 本地机器代码: - 将完全转换的可执行程序转换为CPU的本机代码。 - CPU只是“跳转”到程序的起始位置,所有执行都是纯粹使用CPU的硬件执行的。 - 当它正在执行时,程序可选择调用操作系统来访问文件和其他系统资源。 - 这是执行代码的最快方法,因为程序完全访问CPU的功能。
1.1软件构建可执行程序的多维视图:完整解释
完整程序解释:运行时系统将整个源代码加载到内存中并对其进行解释(例如BASIC,UNIX shell等)
1.1软件构建可执行程序的多维视图:解释的字节代码
解释的字节代码: - 字节代码类似于本机代码,但CPU不直接理解它们。 - 它首先将它们转换为本机机器代码,或者在程序执行时将它们解释。 - 字节代码环境因此需要在程序旁边加载另外的解释器或编译器。 Java虚拟机(JVM)
1.1软件构建可执行程序的多维视图:解释的字节代码
Perl或Python:它们被解释而不是编译,但在运行时使用字节代码。 执行Perl或Python脚本的简单操作会自动触发字节代码的生成。
1.1软件构建的多维视图
动态链接
动态链接方法不会将目标文件复制到可执行映像中;相反,它指出了成功执行程序所需的库。 程序开始运行时,库作为单独的实体加载到内存中,然后与主程序连接。 动态库是通过连接目标文件构建的磁盘文件。然后将库收集到发行包中并安装在目标计算机上。只有这样它才能加载到机器的内存中。
1.1软件构建的多维视图
动态链接
优点: - 可以升级到更新版本的库(添加功能或修复错误),而无需重新创建可执行程序。 - 许多操作系统可以通过仅将一个库的副本加载到内存中来优化其内存使用,然后与需要相同库的其他程序共享它。
1.1软件构造配置和数据文件的多维视图
任何大小的程序都使用外部数据源,例如磁盘上的文件。 您的程序调用操作系统来请求将数据读入内存。 - 屏幕上显示的位图图形图像 - 存储为数字化波形的声音 - 自定义程序行为的配置文件 - 包含在线帮助文​​本的一组文档 - 包含名称和地址的数据库
1.1软件构建的多维视图
分布式程序
例如,软件系统可能使用客户端/服务器模型,在一台计算机上运行单个服务器程序,在许多其他计算机上运行大量客户端程序。 在这种情况下,构建系统可以创建两个发布包,因为不同的人将安装服务器程序而不是客户端程序。 或者,可以使用相同的发行包来安装两个单独的程序。
1.1软件构建的多维视图
快照图:专注于目标计算机内存中的变量级执行状态。 细粒度的状态。
(内存转储
内存转储:硬盘上的文件,包含进程内存的内容副本,当进程被某些内部错误或信号中止时产生。 - 调试器可以加载转储文件并显示它包含的有关正在运行的程序状态的信息。 - 信息包括寄存器,调用堆栈和所有其他程序数据(计数器,变量,开关,标志等)的内容。 - 它取决于该程序的最新状态,并且程序员看起来在内存中记录了哪些数据项在时间失效时正在处理。
1.1软件构建的多维视图
内存转储
1.1软件构建的多维视图(6)运行时,周期和代码级视图
UML中的序列图:程序单元(对象)之间的交互
1.1软件构建的多维视图
执行追踪
跟踪涉及专门使用日志记录来记录有关程序执行的信息。 此信息通常由程序员用于调试目的,此外,还取决于跟踪日志中包含的信息的类型和详细信息,由经验丰富的系统管理员或技术支持人员以及软件监视工具诊断软件的常见问题。
1.1软件构建的多维视图(7)运行时,时刻和组件级视图
UML中的部署图
1.1软件构建的多维视图(8)运行时,周期和组件级视图
事件记录为系统管理员提供对诊断和审计有用的信息。 - 在开发周期中将考虑将记录的不同类别的事件以及将在事件消息中显示的详细信息。 为每类事件分配一个独特的“代码”,以格式化和输出人类可读的信息。 - 这有利于本地化,并使系统管理员能够更容易地获得有关问题的信息。
1.1软件构建的多维视图执行跟踪和事件记录
事件记录软件跟踪主要由系统管理员消费主要由开发人员消费记录“高级别”信息(例如程序安装失败)记录“低级别”信息(例如thrownexception)不能太“吵”(包含许多重复事件)或者对其目标受众没有帮助的信息)可能是嘈杂的基于Astandard的输出格式通常是可取的,有时甚至是需要输出格式的限制很少事件日志消息经常是本地化本地化很少是一个问题添加新类型的事件,以及新事件消息,不需要敏捷添加新的跟踪消息必须敏捷
软件构建
2软件构建:视图之间的转换
1.1软件构建的多维视图软件构建:转换btw视图
建造时间
运行
片刻期
时刻


零件
代码流失
CI和版本
代码快照
物理架构
调用图
线程和进程
程序设计
设计
构建安装部署
重构
版本控制
演化
部署
审查,静态分析
调试测试
剖析,倾销
记录
1.1软件构建的多维视图软件构建中的转换类型
∅⇒代码 - 编程/编码(第3章ADT / OOP) - 复习,静态分析/检查(第4章可理解性)代码⇒组件 - 设计(第3章ADT / OOP;第5章可重用性;第6章可维护性) - 构建:编译,静态链接,包,安装,清理(第2章构建过程)构建时间⇒运行时间 - 安装/部署(第3年的课程) - 调试,单元/集成测试(第7章健壮性)时刻⇒周期 - 重构(第9章重构) - 版本控制(第2章SCM) - 加载,动态链接,解释,执行(转储,分析,记录)(第8章性能)
软件构建
摘要
1.1软件构建的多维视图本讲座的总结
描述软件系统的三个维度: - 按阶段:构建和运行时视图 - 按动态:时刻和周期视图 - 按级别:代码和组件视图每个视图的元素,关系和模型软件构造:视图之间的转换 - ∅⇒代码 - 代码⇒组件 - 构建时间⇒运行时间 - 时刻⇒期间
软件构建
结束

猜你喜欢

转载自blog.csdn.net/t03010/article/details/93405339