软件构造学习笔记【一】(第1章)

目录链接

  • 一、软件构造的多维度视图和质量目标
    • 1.1软件的多维视图(Multi-dimensional software views)
      • 1.1.1软件的概念及结构
    • 1.2 软件的多维视图(重点)
      • 1.2.1 软件的构造时视图
        • 1.2.1.1 目录
        • 1.2.1.2 静态链接
        • 1.2.1.3 代码变化
        • 1.2.1.4 版本控制
      • 1.2.2 软件的运行时视图
        • 1.2.2.1 动态链接
        • 1.2.2.2 分布式程序
        • 1.2.2.3 代码快照图(Code snapshot)
        • 1.2.2.4 内存信息转储
        • 1.2.2.5 执行跟踪
        • 1.2.2.6 事件日志
    • 1.3视图转换
    • 1.4 软件质量
      • 1.4.1 外部质量
        • 1.4.1.1 正确性
        • 1.4.1.2 健壮性(鲁棒性)
        • 1.4.3.1 其他重要性能
      • 1.4.2 内部质量
    • 1.5 总结

这次笔记我们学习一下软件构造课程的第一部分,代表着软件构造的基础内容。

一、软件构造的多维度视图和质量目标

1.1软件的多维视图(Multi-dimensional software views)

1.1.1软件的概念及结构

软件是由计算机之父艾伦·图灵(Alan·Turing)提出的概念。国标中对软件的定义为:与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。
对于软件的概念定义经历了如下演变:

软件构造学习笔记【一】(第1章)

图1.2 软件的结构

软件的结构包括了用户端、软件、技术环境、硬件网络、社交网络等等,其中用户端是商业目标的执行者,而软件的执行结果就是商业目标的实现。从图中可以看出,软件就像一个黑盒一样,里面的程序可见但数据与文件不可见。
软件又有其SDLC,即生命周期。生命周期内容如下图所示:

软件构造学习笔记【一】(第1章)

图1.4 软件的多维视图,其中重要部分已标记

这张图就是软件的多维视图。可以看到,它将软件分成了两个阶段:构造阶段和运行阶段,并将其中内容分为四类,它们分别是代码级视图(Code-level view),组件级视图(Component-level view),瞬时视图(Moment view)和阶段视图(Period view)。其中阶段视图和瞬时视图是一对,代码级视图和组件级视图是一对。

1.2.1 软件的构造时视图

软件的构造时视图内容如下:
代码级视图:代码的逻辑组织,如函数、类、方法、接口等;
组件级视图:代码的物理组织,如文件、目录、包、库等;
瞬时视图特定时刻的软件形态,如源码、类结构等;
阶段视图:软件形态随时间的变化,如代码变化等。

1.2.1.1 目录

目录属于组件级视图和瞬时视图,内容如下:
源代码被物理组织成文件,进一步按目录组织;
文件被封装到包中,并且在逻辑上封装到组件中和子系统。
可重用模块以库的形式出现。
库存储在磁盘文件中,可以在各种程序中重用的函数。
库就是在编辑java语言时的package,其中涉及到的方法可以直接由开发者调用。库的种类也有很多,如外部库、操作系统库、自己编写的库等。
这些东西就是我们在编写java程序时的目录界面。

软件构造学习笔记【一】(第1章)

图1.6 静态链接

1.2.1.3 代码变化

代码变化(code churn)属于阶段视图和代码级视图,指的是从一个版本到另一个版本的文件中添加、修改或删除的行。

软件构造学习笔记【一】(第1章)

图1.8 版本控制

版本控制是给计算机软件的不同状态分配唯一的名字或者编号的过程,这个过程我们在之后会说到,此处不再赘述。

1.2.2 软件的运行时视图

软件的运行时视图是程序被载入目标机器,开始执行的过程,其内容如下:
代码级视图逻辑实体在内存中如何呈现,如代码快照、内存转储等;
组件级视图物理实体在物理硬件环境中如何呈现,如包、库、动态链接、数据库、网络、硬件等;
瞬时视图: 逻辑/物理实体在内存/硬件环境中特定时刻的形态如何,如代码快照、内存转储等;
阶段视图:逻辑/物理实体在内存/硬件环境中的形态随时间如何变化,如堆栈轨迹、并发线程等。

1.2.2.1 动态链接

在运行时发生的链接叫做动态链接(Dynamic linking)。动态库文件不会在build阶段被加入可执行软件中,仅仅做出标记,而在程序运行时,根据标记装载库至内存,因此我们在发布软件时,要将将程序所依赖的所有动态库都复制给用户,而这也正是我们向git提交作业时要提交外部库的原因。

软件构造学习笔记【一】(第1章)

1.10 分布式程序

这时候我们就需要采用分布式程序的运行态:不同节点上可运行同样的程序或者不同的程序(C/S),需要不同的build策略。

1.2.2.3 代码快照图(Code snapshot)

代码快照图属于代码级视图和瞬时视图,它可以描述程序运行时,某时刻内存里变量层面的状态。

软件构造学习笔记【一】(第1章)

图1.12 对内存转储文件的分析

1.2.2.5 执行跟踪

执行跟踪属于代码级视图和阶段视图,它能用日志方式记录程序执行的调用次序,如图所示:

软件构造学习笔记【一】(第1章)

图1.14 事件日志

1.3视图转换

软件构造学习笔记【一】(第1章)

图1.16 质量的五大核心因素

其分别设计的部分如下:

软件构造学习笔记【一】(第1章)

图1.18 可复用性

软件构造学习笔记【一】(第1章)

图1.20 健壮性

软件构造学习笔记【一】(第1章)

图1.21 表现的内容

来源:希私

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月6日
下一篇 2022年5月6日

相关推荐