||
[敬请读者注意] 本人保留本文的全部著作权利。如果哪位读者使用本文所描述内容,请务必如实引用并明白注明本文出处。如果本人发现任何人擅自使用本文任何部分内容而不明白注明出处,恕本人在网上广泛公布侵权者姓名。敬请各位读者注意,谢谢!
David Hooker 的着眼于整个软件工程实践的七项基本原则
程京德
“软件工程”是为了保证大规模软件系统的高可靠性,研究以系统化的、规范化的、可量化的、过程化的工程方法去定义、设计、开发和维护软件系统,以及如何将这些方法应用到工程实践的工程专业学科[1]。
软件工程界归纳总结的软件开发实践中的经验原则,在工程实践中相当有效。
在一个调查研究中显示,从1970年到2003年,软件工程界归纳总结的软件开发实践中的经验原则有313项之多[2,3]。这还是一个不完全的统计,比如,本文下面要介绍的 David Hooker 的着眼于整个软件工程实践的七项基本原则,就没有被统计到上述313项之中。
David Hooker 于1996年提出了着眼于整个软件工程实践的七项基本原则,被 Roger S. Pressman 收录于其名著[4]之中。Pressman 指出,“如果每个软件工程师和每个软件团队都简单地遵循 David Hooker 的七项原则,我们在构建复杂的计算机系统时遇到的许多困难都会被消除。”[4]。
本文以下部分为笔者对 David Hooker 的着眼于整个软件工程实践的七项基本原则的编译,是笔者历年给国内大学讲授“软件工程”课程的教学材料之一,现提供给有兴趣的读者参考。
David Hooker 的着眼于整个软件工程实践的七项基本原则
第一原则:所有一切存在的理由
一个软件系统存在的理由仅有一个:为其用户提供价值。所有决策都应牢记这一点。在规定系统要求、注意系统功能、确定硬件平台或开发过程之前,请问你自己以下问题:“这是否为系统增加了真正的价值?”如果答案是否定的,那么就请不要这样做。所有其他原则都支持这一原则。
第二条原则:KISS(Keep It Simple, Stupid! 保持简单,傻瓜!)
软件设计不是一个随意的过程。在任何设计工作中都需要考虑许多因素。所有的设计都应尽可能简单,但不能过于简单。这有助于建立更易于理解和更易于维护的系统。这并不是说以简单为名应该放弃功能,甚至内部功能。事实上,越是优雅的设计通常就越简单。简单也不意味着“快速而粗糙”。事实上,简单化通常需要经过多次迭代,花费大量心思和精力。这样做的回报是软件更易于维护,更不容易出错。
[笔者注:伟大的物理学家爱因斯坦在1938年曾经说过如下名言:“Everything should be made as simple as possible, but not simpler.”]
第三项原则:保持愿景
一个清晰的愿景对于一个软件项目的成功至关重要。如果没有愿景,一个项目几乎肯定会无穷尽地陷入对其自身抱有“二心(或多心)”的境地。没有概念完整性,一个系统就有可能变成由不兼容设计拼凑而成的杂物,由错误的螺丝钉强行连接在一起……。损害一个软件系统的架构愿景会削弱甚至最终破坏精心设计的系统。拥有一位能够保持愿景并强制执行合规性的授权架构师有助于确保一个获得巨大成功的软件项目。
第四项原则:你生产的产品,其他人会使用
产业级软件系统很少是在真空中构建和使用的。其他人会基于对你的系统的可理解而以某种方式使用、维护、记录你的系统。因此,在规格定义、设计和实现时,务必要知道其他人必须理解你正在做的事情。任何软件开发产品的受众都可能很大。规格定义时要着眼于用户。设计时要牢记实现者。编码时要考虑那些必须维护和扩展系统的人。有人可能需要调试你编写的代码,这使他们成为你代码的用户。使他们的工作更轻松会为系统增加价值。
第五项原则:面向未来
一个寿命较长的系统更有价值。在当今的计算环境中,规格随时都在变化,硬件平台几个月前就过时了,软件寿命通常以月而不是年来衡量。然而,真正的“产业强度”软件系统必须经久耐用。要成功做到这一点,这些系统必须准备好适应这些和其他变化。成功做到这一点的系统是从一开始就以这种方式设计的系统。永远不要把自己设计得走投无路。总是问“如果…那么该怎么办”,并通过创建解决一般问题而不仅仅是特定问题的系统来为所有可能的答案做好准备。这很可能会导致整个系统的重用。
第六项原则:提前规划重用
重用可节省时间和精力。实现一个高水平的重用可以说是开发一个软件系统时最难实现的目标。代码和设计的重用已被宣称为使用面向对象技术的主要好处。但是,这种投资的回报并非自动产生的。要利用面向对象 [或传统] 编程提供的重用可能性,需要深思熟虑和规划。在系统开发过程的每个级别都有许多实现重用的技术……。提前规划重用可降低成本,并提高可重用组件及包含它们的系统的价值。
第七项原则:思考!
这最后一项原则可能是最容易被忽视的。在行动之前进行清晰、完整的思考几乎总能产生更好的结果。当你思考某件事时,你更有可能做对。你也会获得如何再次正确做这件事的知识。如果你确实思考了某件事但仍然做错了,那它就变成了一次宝贵的经验。思考的一个副作用是学会识别你不知道的事情,此时你可以研究答案。当清晰的思考进入到一个系统时,其价值就会显现出来。应用前六项原则需要深入思考,而潜在的回报是巨大的。
参考文献
[1] 程京德,“201条软件开发经验原则”,微信公众号“数理逻辑与哲学逻辑”,科学网博客,2024年8月12日。
[2] A. Abran, N. Séguin, P. Bourque, and R. Dupuis, “The search for software engineering principles: An overview of results,” Proc. of PRISE 2004 (Conference on Principles of Software Engineering), pp. 51-60, 2004.
[3] N. Séguin, A. Abran, R.Dupuis, “Software Engineering Principles - A Survey and an Analysis,” Proc. of C3S2E 2010 (Canadian Conference on Computer Science & Software Engineering), pp. 59-65, 2010.
[4] R. S. Pressman and B. R. Maxim, “Software Engineering: A Practitioner’s Approach, 8th Edition,” McGraw-Hill, 2014.
微信公众号“数理逻辑与哲学逻辑”
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-8-20 10:17
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社