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

1.  多维度软件视角

三个维度:

按阶段划分:构造时/运行时视图

按动态性划分:时刻/阶段视图

按构造对象的层次划分:代码/构件视图

1.1构造时维度

代码层面:代码的逻辑组织

构件层面:代码的物理组织

时刻层面:特定时刻的软件形态

阶段层面:软件形态随时间的变化

(1)  Build-time, moment, and code-level view(构造/时刻/代码)

词汇层面:

半结构化:近乎自然语言的风格+遵循特定的编程语法

前者:方便程序员

后者:方便编译器

语法层面:

AST(Abstract Syntax Tree抽象语法树):彻底结构化,将源代码变为一棵树,对树做各种操作==对源代码的修改

语义层面:

用于表达“需求”和“设计”思想,再转化成code

(2)  Build-time, period, and code-level view(构造/阶段/代码)

代码改动(Code Chorn):

代码改动定义为添加、修改或修改的行从一个版本到另一个版本的已删除文件。

(3)  Build-time, moment, and component-level view(构造/时刻/构件)

源代码(source code)被物理地组织成文件(file),这些文件进一步按目录(dictionary)组织

文件(file)被封装到包(package),组件(component)子系统(sub-system)

可重用模块以库(libraries)的形式存在

库:

存储在磁盘中,开发者像使用编程语言指令一样使用库中的功能

来源:操作系统提供的库,编程语言提供的库,第三方公司提供的库,你自己积累的库

链接库:

编程时和build时,需告诉IDE和JVM在哪里寻找某些库

静态链接:库被拷贝进入代码形成整体,执行的时候无需提供库文件,静态链接发生在构造阶段

动态链接:见1.2

(4)  Build-time, period, and component-level view(构造/阶段/构件)

各项软件实体随时间如何变化

Software Configuration Item (SCI,配置项)

Version (版本)

1.2运行时维度

       代码层面:逻辑实体在内存中如何呈现

构件层面:物理实体在物理硬件环境中如何呈现

时刻层面:逻辑/物理实体在内存/硬件环境中特定时刻的形态如何

阶段层面:逻辑/物理实体在内存/硬件环境中的形态随时间如何变化

运行时软件的高级概念:

可执行程序:机器可读的顺序CPU 执行的指令以及相关数据值。

库:常用目标代码的集合,可以是由不同的程序重用。

配置和数据文件:这些不是可执行文件;他们提供程序的有用数据和配置信息可以从磁盘加载。

分布式程序:这种类型的软件由多个组成通过网络或简单地作为在同一个进程上运行的多个进程机器。

JVM(Java Virtual Machine)

动态链接:

库文件不会在build阶段被加入可执行软件,仅仅做出标记

程序运行时,根据标记装载库至内存

发布软件时,记得将程序所依赖的所有动态库都复制给用户

分布式程序的运行态:需要多个运行程序,分别部署于多个计算机物理环境。

(5)  Run-time, moment, and code-level view(运行/时刻/代码)

代码快照图:描述程序运行时内存里变量层面的状态

Memory dump (内存信息转储)

(6)  Run-time, period and code-level view(运行/阶段/代码)

Execution tracing 执行跟踪:用日志方式记录程序执行的调用次序

(7)  Run-time, moment, and component-level view(运行/时刻/构件)

UML(统一建模语言)中的部署图

(8)  Run-time, period, and component-level view(运行/阶段/构件)

事件日志:系统层面

2.  软件构造:不同层面维度的转换

3.  软件系统的质量

外部质量因素 影响 用户;内部质量因素 影响 软件本身和它的开发者;外部质量取决于内部质量

3.1外部质量因素

(1)  Correctness(正确性)

正确性:最重要的质量指标

按照预先定义的“规约(spec/specification)”执行

实现正确性的方法:

测试和调试:发现不正确、消除不正确 Robustness

防御式编程:在写程序的时候就确保正确性

形式化方法:通过形式化验证发现问题

(2)  Robustness(鲁棒性/健壮性)

健壮性:

针对异常情况的处理,健壮性是对正确性的补充,正确性要求软件的行为要严格的符合规约中定义的行为,健壮性要求出现规约定义之外的情形的时候,软件要做出恰当的反应。

出现异常时不要“崩溃”

“normal”和“abnormal”是主观而非客观

未被specification覆盖的情况即为“异常情况”, 所谓的“异常”,取决于spec的范畴

      

(3)  Extendibility (可扩展性)为什么要扩展:应对变化

(4)  Reusability (可复用性)一次开发,多次使用,发现共性

(5)  Compatibility(兼容性)不同的软件系统之间相互可容易的集成,保持设计的同构性

(6)  Efficiency(性能)

性能毫无意义,除非有足够的正确性

对性能的关注 要与 其他质量属性进行折中

过度的优化导致软件不再适应变化和复用

(7)  Portability(可移植性)

软件可方便的在不同的技术环境之间移植

硬件、操作系统

(8)  Ease of use(易用性)

容易学、安装、操作、监控

给用户提供详细的指南

(9)  Functionality

(10)  Timeliness(及时性)

(11)  Other qualities

Verifiability (可验证性),Integrity(完整性),Repairability(可修复性),Economy(经济性)

3.2内部质量因素

源代码相关因素,如代码行数(LOC)、环形复杂性等

Readability(可读性),Understandability(可理解性),Clearness(清晰),Size

复杂性是几乎所有外部因素的敌人。

内部质量因素通常用作外部质量因素的部分测量

3.3质量属性之间的权衡

正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来

最重要的几个质量因素:

正确性和稳健性:可靠性

可扩展性和可复用性:模块化

4.  软件构造的五大质量目标

Easy to understand: elegant and beautiful code / understandability

Ready for change: maintainability and adaptability

Cheap for develop: design for/with reuse: reusability

Safe from bugs: robustness

Efficient to run: performance

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值