软件构造学习博客第一章

软件构造学习博客第一章

一、软件构造的多维视图

从三个方面认识软件构造,软件的构造就是在不同方面之间的变换
代码(code)-------------------------组件(Component)
构建时(build)----------------------运行时(run)
时刻(Moment)-------------------------时间段(Period)

多维视图Multi-dimensional software views

软件包括:

1.项目(Programs (UI, Algorithms, Utilities, APIs, test cases, etc))
2.数据:(Data(files, databases, etc))
3.文档:(Documents (需求规格说明SRS, 设计规格说明SDD, user manuals, etc))

示例:在这里插入图片描述

构建(build)时视图

软件构建的核心过程和环节:想法->需求->设计->代码->变为可安装或可执行包

1.代码层:源代码如何通过基本程序块(如函数,类,方法,接口等)以及它们之间的依赖关系进行逻辑组织
2.组件层(体系结构):源代码如何按文件,目录,包,库以及它们之间的依赖关系进行物理组织
3.时刻层:源码与组件在某一特定时间的样子
时间段层:他们在一段时间的改变与发展

逐条概述

构建、代码、时刻层级

a)在逻辑上代码是如何通过基本程序块(函数,方法,类,接口,等)组织的
b)三种形式:面向词法(面向词法的源码),面向语法(如:抽象语法树),面向语义(如:类图)
i.抽象语法树:将半结构化源代码表示为结构化树。是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
在这里插入图片描述
在这里插入图片描述
ii.面向语义的结构:通常在设计阶段建模,并转换为源代码。 它是面向对象分析和设计的用户需求的结果。比如类、方法的调用关系。

构建、时间段、代码:

Code churn:定义为从一个版本到另一个版本,添加、修改或删除代码行,并保存到文件。

构建、组件、时刻层级

源代码物理地组织成文件,其进一步按目录组织
a)文件被封装成包、组件和子系统
b)可复用模块形成类库
c)UML:组件图描述了组件如何连接在一起以形成更大的组件或软件系统。
d)类库:

  • 有一组代码组成,在磁盘中
  • build阶段,库函数可以被视为标准语言的扩展,其使用方式与开发人员编写的函数相同。
  • 来源:OS预装、语言自带、第三方、自行开发
  • 程序被编辑,构建和安装时,需要提供用到的类库列表
  • 如果在源代码中引用了某个函数但开发人员没有显式写入该函数,则会搜索库列表以找到所需的函数。
  • 当函数被找到的时候,复制类库到可执行程序。分为静态链接(build时期)与动态链接(run时期),
  • 静态链接:
    – 将类库文件复制 到可执行文件中,成为可执行文件的一部分。
    静态链接在build时发生
    – 最终得到一个可加载到目标机器上的可执行程序。
构建、组件、时间段层级:

所有文件/包/组件/库如何随着时间的推移在软件系统中发生变化?

版本控制系统:

  • 版本控制是给计算机软件的不同 状态分配唯一的名字或者编号的过程。
  • 在给定版本号类别,这些数字通常按递增顺序分配,并对应于软件中的新的发展。版本控制通常用于跟踪增量不同版本的电子信息,无论该信息是否是计算机软件。

运行(run)时期层级:

  • 代码层:可执行程序的内存状态是什么样的,程序单元(对象,函数等)如何相互交互?
  • 组件层:如何将软件包部署到物理环境(操作系统,网络,硬件等)以及它们如何交互?

一些概念:

1、可执行程序:CPU执行的机器可读指令序列以及相关数据值。
2、库:大多数操作系统都包含一组开发人员可以重用的标准库,无法在目标机器上直接加载和执行库; 它必须首先与可执行程序链接。
3、可执行程序

  • 1.本地机器代码:完全转换为CPU能识别的机器码。
  • 2.全解释型:源代码被加载入内存进行解释执行
  • 3.Interpreted Byte Codes:
    – java:代码编译为二进制代码(与机器码相似,但cpu不直接理解它),运行时需要由解析器转换成机器码或者解释执行,因此,字节代码环境要求在加载程序的同时加载另外的解释器或编译器。
    在这里插入图片描述
    – Perl或python在执行时编译为字节码解释执行
    在这里插入图片描述
  • 4.动态链接:
    – 原理:不将目标文件复制到可执行程序 中,而是会标注用到的类库。在运行时,加载用到的库到内存中,然后同主程序链接。
    – 优点:类库 变化时,不需要重新生成可自行程序;多个运行中程序可共享同一类 库,优化内存使用.
  • 5.配置和数据文件:程序调用操作系统以请求将数据读入内存。
  • 6.分布式程序:举个例子。某软件需要有客户端与服务器端。其中一台机器跑服务器端的程序,另外多台机器跑用户端的程序。此时,构建系统可以创建两个release package,一个给服务器端,一个给用户端。或者,可以使用相同的发行包来安装两个不同的程序

具体概述:

  • 执行,时刻,代码层级
    – 1.比如,Snapshot diagram:刻画内存中某时刻变量的状态
    – 2.Memory dump:硬盘上的文件,包含进程内存的内容副本,当进程被某些内部错误或信号(internal error or signal)中止时产生。
  • 执行,时间段,代码层级
    – Sequence diagram in UML:
    – Execution tracing
    — tracing使用日志来记录项目执行的信息
    — 此信息通常由程序员用于调试目的,此外,还取决于tracing日志中包含的信息的类型和详细信息,由经验丰富的系统管理员或技术支持人员以及软件监视工具诊断软件的常见问题。
  • 执行,时刻,组件层级:Deployment diagram in UML
  • iv.执行,时间段,组件层级
    – 事件日志:提供对诊断和审计有用的信息。这有助于本地化,并允许系统管理员更轻松地获取有关问题的信息
Event loggingExecution tracing
系统管理人员使用开发人员使用
录“高级”信息(例如程序安装失败)记录“低级别”信息(例如,thrownexception)
不能包含太多重复的事件与无用信息可以
常常基于标准输出格式格式限制少
消息通常是本地化的很少关心本地化
加新类型的事件以及新事件消息不一定非常敏捷。添加新的跟踪消息必须敏捷
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值