本文是加拿大蒙特利尔大学(University of Montreal)Foutse Khomh和Yann-Ga?l
Guéhéneuc开展的一项经验性软件研究的成果,他们已在此基础上发表了相关论文。
为了让国内开发人员也能够了解这项研究并能够参与其中,我将几篇相关论文的核心部分翻译并整理为本文,以供参考!
很多人都宣称设计模式的使用会给一些软件质量属性带来正面的影响,将改善软件质量,特别是改善软件的扩展性(Expandability)、可重用性(Reusability)和易理解性(Understandability),,但是也有一些人持怀疑态度。为了回答设计模式能否改善软件质量这个问题,最直接的方法就是询问软件开发人员的意见,大家根据实际开发和使用经验如何来评价每一个设计模式,听听大家的声音
为此,Foutse Khomh和Yann-Ga?l Guéhéneuc选取了10个常用的软件质量属性,有些质量属性与设计相关、有些与实现相关、有些与运行相关,并为此设计了一个调查问卷,要求开发人员结合这些质量属性对GoF
23种模式进行一个主观的评价,评价分为A、B、C、D、E五个等级:
A表示某个模式对某个质量属性有很大的正影响,(Very positive)
B表示某个模式对某个质量属性有一定的正影响,(Positive)
C表示某个模式对某个质量属性没有影响;(Not significant)
D表示某个模式对某个质量属性有一定的负影响,(Negative)
E示某个模式对某个质量属性有很大的负影响。(Very negative)
还提供一个特殊选项F: "I don't know",无法判断。(Not
applicable)
研究方法
(1) 模式选择
GoF 23种设计模式
(2) 软件质量属性选择
与设计(Design)相关的属性:扩展性(Expandability)、简洁性(Simplicity)、可重用性(Reusability)
与实现(Implementation)相关的属性:易学性(Learnability)、易理解性(Understandability)、模块性(Modularity)
与运行(Runtime)相关的属性:普遍性(Generality)、运行时模块性(Modularity
at runtime)、可伸缩性(Scalability)、健壮性(Robustness)
质量属性描述:
扩展性:一个系统设计方案能够被扩展的程度。(Expandability:
The degree to which the design of a system can be extended.)
简洁性:一个系统设计方案易于理解的程度。(Simplicity: The
degree to which the design of a system can be understood
easily.)
可重用性:一个设计片段能够在另一个设计方案中被重用的程度。(Reusability:
The degree to which a piece of design can be reused
in an other design.)
易学性:系统源代码易于学习的程度。(Learnability: The
degree to which the code source of a system is easy
to learn.)
易理解性:系统源代码易于理解的程度。(Understandability:
The degree to which the code source can be understood
easily.)
模块性:系统所实现的功能与其他功能之间保持独立的程度(静态耦合度)。(Modularity:
The degree to which the implementation of the functions
of a system are independent from one another.)
普遍性:系统在运行时能提供的功能范围(数量)的程度(多少)。(Generality:
The degree to which a system provides a wide range of
functions at runtime.)
运行时模块性:系统在运行时功能与功能之间保持独立的程度(动态耦合度)。(Modularity
at runtime: The degree to which the functions of a system
are independent from one another at runtime.)
可伸缩性:系统在运行时能够处理大规模数据和计算的程度。(Scalability:
The degree to which the system can cope with large amount
of data and computation at runtime.)
健壮性:系统在异常情况或环境下功能能够继续正常运行的程度。(Robustness:
The degree to which a system continues to function properly
under abnormal conditions or circumstances.)
(3) 调查问卷格式(Sample)
|
Quality Attributes 1 |
Quality Attributes 2 |
…… |
Design Pattern 1 |
A/B/C/D/E/F |
A/B/C/D/E/F |
|
Design Pattern 2 |
A/B/C/D/E/F |
A/B/C/D/E/F |
|
…… |
|
|
|
数据收集与处理
将调查问卷发送给30位具有较为丰富的设计模式理论知识和使用经验的开发人员(2007年1月-5月),最后收集到有效答卷数20份(有效答卷率貌似不太高,呵呵!),其中全部填写完整的有18份,填写90%的有2份。
Positive = A and B
Neutral = C
Negative = D and E
将选A和B定为正影响(Positive, G),选C定为中立(Neutral,
N),选D和E定为负影响(Negative, B),统计结果如下:
选取三个知名的设计模式:组合模式、抽象工厂模式、享元模式
(1) 组合模式
结论:组合模式对大部分质量属性都有正影响,可伸缩性(Scalability)和健壮性(Robustness)除外。
(2) 抽象工厂模式
结论:总体上来说,抽象工厂模式对软件质量属性的影响为中等,扩展性、普遍性和模块性不错,但是健壮性的结果令人吃惊。
(3) 享元模式
结论:总体上来说享元模式对软件质量属性有负影响,只有可伸缩性还不错。
选取三个GoF提及的质量属性:可重用性、扩展性、易理解性
(1) 可重用性
结论:10个模式对可重用性有正影响,6个无影响,7个有负影响。
(2) 扩展性
结论:19个模式对可扩展性有正影响,3个无影响,1个有负影响。
(3) 易理解性
结论:15个模式对易理解性有正影响,3个无影响,5个有负影响。
整体分析:
总的来说,设计模式对软件质量属性的正影响大于负影响,因此,恰当使用设计模式可以在一定程度上提高软件质量。
设计模式对质量属性的影响并不总是正的,有些模式会对某些质量属性产生负面影响,因此需要慎重选择和使用设计模式(They
should be used with caution)。
个人认为,本工作需要参与者对这些设计模式要有较深的理解,此外对于这些软件质量属性要有统一的理解和认识,为此,需要对这些软件质量属性提供一个较为标准的定义。(我计划写专门的文章来对这些软件质量属性进行详细的说明,)
由于本研究工作主观性较强,我在此不多加分析,不同的人会有不同的评价结果。
同志们,如果要你来填写这个表,答案是什么呢?偶也想在国内组织一次类似的调查,呵呵!
主要参考资料:
[1] Foutse Khomh and Yann-Ga?l Guéhéneuc.
Do Design Patterns Impact Software Quality Positively?.
In Christos Tjortjis and Andreas Winter, editors, Proceedings
of the 12th Conference on Software Maintenance and Reengineering
(CSMR), April 2008. IEEE Computer Society Press.
[2] Yann-Ga?l Guéhéneuc. Design Patterns:
Empirical Studies on the Impact of Design Patterns on
Quality. Encyclopedia of Software Engineering (ESE),
September 2010.
[3] Yann-Ga?l Guéhéneuc, Jean-Yves Guyomarc'h,
Khashayar Khosravi, and Houari Sahraoui. Design Patterns
as Laws of Quality, chapter 5, pages 105--142. Idea
Group, January 2006.
[4] Khashayar Khosravi and Yann-Ga?l
Guéhéneuc. On Issues with Software Quality Models, chapter
11, pages 218--235. ICFAI University Press, January
2008. |