软件构造的多维度视图和质量指标课程总结

本文详细介绍了软件构造中的八种视图,从Build-time到Run-time,再到Code-level和Component-level,涵盖了源代码、代码变化、部署状态等多个层次。同时,文章还讨论了软件质量的十个关键指标,包括正确性、健壮性、可扩展性等,并强调了在开发过程中对这些因素的权衡和应用。
摘要由CSDN通过智能技术生成

软件构造的多维度视图和质量指标课程总结

多维度视图

通过对软件按阶段,按动态性,按构造对象层次的划分,我们可以将软件分为八个不同的视图,在本课堂中简称八视图。如下图所示。

在这里插入图片描述

下面我们将对该图中的八个视图依次分析

Build-time && Moment && Code-level

在这一视图中,我们关注编写的源代码层面,即词汇层面,语法层面,语义层面。老师在课上曾说,我们从大一到现在所学习的课程都停留在这一阶段。是的,我们在先前的学习中只关注怎么写对代码,怎么写好代码,怎么用代码解决一个问题,而未考虑如何管理代码的变化,如何设置合理的文件结构等这些系统化的事情。

Build-time && Period && Code-level

在这一视图中,我们关注代码的变化。在实际编程中,会有新想法却又不能保证是否可行,或者写完一段代码后发现写错了需要改回来,这都需要关注代码的变化,版本控制系统是个很好的例子。

Build-time && Moment && Component-level

在这一视图中,我们关注当前的源文件目录。在实际编程中,一个好的文件组织形式是重要的,特别是在Java项目中,我们会遇到应用于不同地方但却命名相同的类,这时我们就要用到包来组织它们。除此之外,为了增加项目的功能,我们还会使用到外部库,那么如何合理方便地组织这些库也是一个重要的问题。

Build-time && Period && Component-level

在这一视图中,我们关注文件的变化。这与先前提过代码的变化是相关的,毕竟代码变了文件自然变,但文件的变化更为宏观,在git中,文件的变化以类似于继承树的形式被记录,并对应不同版本,例如V2.1.5,2是主要版本,1是次要版本,5是分支版本。

Run-time && Moment && Code-level

这一视图主要关注逻辑实体在内存中如何呈现。代码快照图是个很好的展示,即描述程序运行时内存里变量层面的状态。我们会有疑问,程序在内存的状态和我有什么关系?我只需要关注我写的代码是否正确。举个Java的例子,我们让变量a指向一个对象,现在又想让它指向另一个对象,这于代码本身没有任何错误,但是我的前对象基本上是找不回来了,以为我们失去了他在内存中的地址。

Run-time && Period && Code-level

这一视图关注程序运行时执行的操作。时序图和运行日志是个很好的例子,特别是当我们出现报错时,通过对程序执行的调用次序的分析,我们会很快锁定问题所在。

Run-time && Moment && Component-level

这一视图关注组件的部署状态。UML的部署图是一个例子,在程序运行时,我们需要关注我们所依赖的服务器,数据库,网络等是否正常启动。

Run-time && Period && Component-level

这一视图关注程序运行时系统层面的操作及状态。系统层面的事件日志是一个很好的例子,它与代码层面的事件日志很相似,但它更关注高级信息,并减少重复事件,且有标准的输出格式。

软件构造的质量指标

外部质量因素

1. 正确性

正确性是最重要的质量指标,表示程序必须按照事先定义的specification执行。

实现它有很多方式,如测试和调试,防御式编程,形式化方法。

2. 健壮性

健壮性是对正确性的补充,主要针对异常情况,即"abnormal case"的处理。

这里需要确认"normal"和"abnormal"是主观而非客观,即这个界限是由specification的范畴确定的,我的理解是:如果我的specification定义了对一个错误的输入的处理,那么这个错误的输入也可叫做"normal case"。

3. 可扩展性

在设计软件是,我们要考虑到后续的更新迭代,使得其易于变化。

有两种设计模式对于可扩展性来说是必要的:简约主义设计,分离主义设计。

4. 可复用性

发现问题共性,构造可重复使用的软件元素,避免重新造轮子。

5. 兼容性

不同软件系统之间相互可容易的集成。

6. 性能

对性能的关注要与其他质量属性折中,并且过早的优化,考虑性能问题可能会导致软件不具备泛性,缺少适应变化和复用的能力。

7. 可移植性

软件需要在不同的技术环境,操作系统下运行,因此它需要有可移植性。

8. 易用性

软件是给用户使用的,因此要尽可能提升用户使用体验。

9. 功能

我们要权衡在软件中功能的添加,过多的增添功能会占用太多资源,并且降低用户体验,过少的功能增添则会忽视一些必要功能及整体品质。

10. 及时性

软件要与时俱进,随着技术的发展和用户对体验的更高追求,及时性是决定软件是否能经久不衰的重要因素。

内部质量因素

源代码方面:代码行数,循环复杂度等

体系架构方面:耦合,内聚等

质量因素间的权衡关系

在软件开发过程中,面对不同的开发环境,项目大小,资金筹备,我们要综合考虑各种不同的因素,从而挑选出最符合自己的方案,但是在这些要素中,正确性是坚决不可撼动的。

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值