软件构造的多维度视图和质量指标课程总结
多维度视图
通过对软件按阶段,按动态性,按构造对象层次的划分,我们可以将软件分为八个不同的视图,在本课堂中简称八视图。如下图所示。
下面我们将对该图中的八个视图依次分析
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. 及时性
软件要与时俱进,随着技术的发展和用户对体验的更高追求,及时性是决定软件是否能经久不衰的重要因素。
内部质量因素
源代码方面:代码行数,循环复杂度等
体系架构方面:耦合,内聚等
质量因素间的权衡关系
在软件开发过程中,面对不同的开发环境,项目大小,资金筹备,我们要综合考虑各种不同的因素,从而挑选出最符合自己的方案,但是在这些要素中,正确性是坚决不可撼动的。