0. 概述
多维软件视图
- 按阶段划分:构造时/运行时视图
- 按动态性划分:时刻/阶段视图
- 按构造对象的层次划分:代码/构件视图
- 每个视图的元素、关系和模型
软件系统的质量属性
- 外部与内部质量因素的对比
- 重要的外部质量因素
- 质量因素之间的权衡
软件构造的五个关键质量目标
- 易于理解:代码优雅美观/易懂
- 准备变更:可维护性和适应性
- 开发成本低:设计可重用:可重用性
- 不受bug影响:健壮性
- 高效运行:性能
1. 多维软件视图
1.1 什么是软件?
“软件”一词最早是由艾伦·图灵提出的。
- 系统软件vs应用软件
- 桌面/网络/移动/嵌入式软件
- 面向商业/个人的软件
- 开源软件vs专有软件
软件介于使用者与操作系统之间
1.2 软件系统的组成部分
软件=程序+数据+文档
软件=模块(组件)+数据/控制流
2 构造时视图
软件系统的构造时视图:
构造阶段:想法->需求->设计->代码->可安装/可执行包
- 代码级视图:源代码——源代码是如何通过基本程序块(如函数、类、方法、接口等)以及它们之间的依赖关系进行逻辑组织的(代码的逻辑组织)
- 组件级视图:架构——源代码是如何通过文件、目录、包、库以及它们之间的依赖关系进行物理组织的(代码的物理组织)
- 时刻视图:特定时间内的源代码和组件是什么样子的(特定时刻的软件形态)
- 阶段视图:它们是如何随着时间发展/变化的(软件形态随时间的变化)
2.1 构造时、时刻和代码级视图
源代码是如何通过基本程序块进行逻辑组织的
例如函数、类、方法、接口等,以及它们之间的依赖关系。
三种相互关联的形式:
– 词汇层面:面向词汇的源代码
– 语法层面:面向语法的程序结构:例如,抽象语法树
– 语义层面:面向语义的程序结构:例如,类图
2.2 构造时、阶段和代码级视图
描述随时间“变化”的视图。
代码变化:从一个版本到另一个版本的文件中添加、修改或删除的行。
2.3 构造时、时刻和构件级视图
- 源代码在物理上被组织成文件,这些文件进一步被目录组织;
- 文件被封装到包中,逻辑上,封装到组件和子系统中。
- 可重用模块是库的形式。
库:
库存储在自己的磁盘文件中,收集一组可以在各种程序中重用的代码函数。
- 开发人员并不总是构建一个可执行的程序文件,而是将定制开发的软件和预构建的库加入到一个程序中。
在构建时,库函数可被视为标准语言的扩展,其使用方式与开发人员编写的函数相同。开发者像使用编程语言指令一样使用库中的功能
比如:system . out . println(" Hello World ");
库的来源:
- 操作系统提供的库:从操作系统预装的操作库集合,如文件和网络输入/输出、图形用户界面、数学、数据库评估;
- 编程语言提供的库:来自语言SDK
- 第三方公司提供的库:来自第三方来源;
- 你自己积累的库:开发人员也可以发布自己的库。
与库链接:
编辑、构建和安装程序时,必须提供要搜索的库列表。编程时和建设时,需告诉IDE和JVM在哪里寻找某些库
如果在源代码中引用了一个函数,但是开发人员没有明确地编写它,则搜索库列表以找到所需的函数。
找到函数后,将适当的目标文件复制到可执行程序中。
将库集成到可执行程序中的两种不同方法:
- 静态链接
- 动态链接
在静态链接中,库是单个对象文件的集合。
在构建过程中,当链接器工具确定需要一个函数时,它从库中提取适当的目标文件,并将其复制到可执行程序中
- 库被拷贝进入代码形成整体,执行的时候无需提供库文件
- 库的目标文件看起来与开发人员自己创建的任何目标文件相同。
静态链接发生在构造阶段
- 最终只有一个可执行程序加载到目标机器上。
- 在最终的可执行程序创建完成后,就不可能将该程序与其库分离。
2.4 构造时、阶段和构件级视图
各项软件实体随时间如何变化?
- SCI,配置项
- 版本
版本控制:
软件版本控制是为计算机软件的唯一状态分配唯一版本名或唯一版本号的过程。
–在给定的版本号类别(主要、次要)中,这些号通常以递增的顺序分配,并与软件的新发展相对应。
–在细粒度级别上,修订控制通常用于跟踪不同版本的电子信息,无论这些信息是否是计算机软件。