HIT软件构造1---软件的三维视角与质量

1.三维视角

1.按照软件的阶段划分:build-time and run-time(构造时与运行时)

2.按照动态性划分:moment and period(时刻与阶段)

3.按照构造对象的层次划分:code-level and component-level(代码层级与构件层级)

如何理解:

(1)build-time与run-time:

build-time就是要在软件的代码编写与编译阶段观察软件,在这一视角下,我们可以观察软件的代码,语法,整体逻辑结构以及软件的物理结构等

run-time就是要在软件的运行阶段观察软件,在这一视角下,我们可以看到物理内存的变化,软件的输出结果是否正确,以及对程序调用的栈帧的追踪,事件的记录等。

(2)moment与period:

moment意指观察软件某一时刻的状态,体现出软件在某一个时刻固定的状态。我们平时在检验软件代码逻辑是否正确其实就是观察软件的该时刻固定状态。

period意指观察软件在一段时间下的变化,这个变化小到某个语句、某个变量的改动,大到软件的版本变迁。通过观察变化,我们能够更清晰的认识到软件的应用价值与不足之处,为接下来的变化做出更好的准备。

(3)code-level与component-level

这两种视角的对比其实就是程序设计模块化的过程。code-level更关注具体的实现,包括语法树的结构,某条语句的使用等,而component-level则关注组成软件的各个模块的状态,包结构,静态链接,文件结构的设计等。

下面将通过具体实例继续深化理解三维视角。

 

2.三维视角下软件的具体成分

1.build-time view

在build-time view下,软件停留在编码阶段,其中code-level主要指代码的逻辑组织,而component-level主要指代码的物理组织。

(1)build-time && code-level && moment

在这一维度下,软件的code主要被分为三个部分:

a.词汇层面:指直接看源代码  source code

b.语法层面:程序的语法结构  AST(抽象语法树)

c.语义层面:程序内部类和接口的定义与实现  Class Diagram

(2)build-time && code-level && period

在这一维度下,主要查看的是代码变化 code churn

(3)build-time && component-level && moment

在这一维度下,我们具体查看软件的物理组成部分,如文件结构,静态链接与链接库,测试用例(这也是软件的组成部分之一)

下面简要介绍一下相关概念

a.库(Library)

库文件内部存储着常用的代码片段,可以是一些函数,也可以是宏定义等。当程序员在编写程序时需要用到这些库内的代码片段,就要将库引入编写的程序文件内。(如C的#include,Java的import)一般常用的库分为以下几种:操作系统库,编程语言库,第三方库和自定义库。

b.静态链接

系统将代码编译时,会直接通过链接器直接将库拷贝进源代码形成一个整体,生成的可执行文件运行不需要提供库文件。

(4)build-time && component-level && period

在这一视角下,我们观察软件的各个物理结构如何随时间变化,主要包括SCI与Version。用于管理检测该变化的系统称为Version Control System(VCS)将在后续章节详细讲述。

2.run-time view

在run-time view下,软件程序被载入机器内存,并开始执行。其中,code-level主要指代码的逻辑实体在内存中是如何呈现的,而component-level主要指物理实体在硬件环境中如何呈现。

(1)run-time && code-level && moment

a.程序快照图  sanpshot diagram:以图表的形式表示当前各个变量内部存储的实际内容以及相互关系

b.memory dump:程序运行到某一时刻,内存中存储的具体内容,可通过debugger或转储文件查看。

(2)run-time && code-level && period

查看当前程序的执行跟踪文件与栈帧情况以及当前的线程。

(3)run-time && component-level  && moment

需要特殊记忆的是在该维度下包含软件的动态链接过程。动态链接的特点是推迟了静态链接的链接过程,在程序运行到需要调用库中内容时再进行链接。

(4)run-time && component-level && period

该部分不作为本课程研究内容,记住有哪些即可。

3.软件的质量指标

软件的质量指标包括外部质量与内部质量。外部质量影响其用户,而内部质量影响软件本身与其开发者。外部质量取决于内部质量。

1.外部质量 external quality factors

(1)正确性 correctness

(2)鲁棒性 robustness

(3)可扩展性 extendibility:指对软件内规约的修改是否容易

(4)可复用性 reusability:一次开发是否能满足多种不同应用

(5)兼容性 compatibility:是否易与其他不同软件的元素进行集成

(6)效率性 efficiency

(7)可移植性 protability

(8)易用性 ease of use

(9)功能性 functionability

(10)及时性 timeless:软件的版本更新是否能跟上用户需求

...........

2.内部质量 internal quality factors

(1)LOC(lines of code)与 cyclomatic complexity(圈复杂度)

(2)模块耦合性:coupling,cohesion

(3)可读性 readability

(4)可理解性 understandability

(5)简洁性 clearness

(6)软件大小 size

 

要明确对软件质量的把控是一个权衡的过程,对某一个质量指标做出提升,较大概率会导致另一个或几个质量的下降。但对于软件来说,有四种重要的外部质量应该被优先考虑:

1.correctness与robustness:这两种质量决定了软件的可靠度

2.extendibility与reusability:这两种质量决定了软件的模块化是否到位

3.在软件构造过程中需要注意的五个核心指标

(1)understandability

(2)reusability

(3)maintainability与adaptability

(4)robustness

(5)performance

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值