在软件开发中贯彻简化原则的措施
2010-08-15郑雪松
郑雪松
(哈尔滨学院 软件学院 2006级软件工程专业,黑龙江 哈尔滨 150000)
目前,软件开发行业正在大力倡导规范软件开发。规范就是要约束自己、约束参与软件开发过程的各方,目的是要消除软件开发中的种种不良做法和习惯,采用符合软件规律、事半功倍的方法,降低风险,以使软件开发项目能获得可重复、可以预期的满意结果。
规范软件开发过程必须做好“三化”、同时避免踏入两个误区。所谓做好“三化”、避免踏入两个误区,就是指要坚持固化、简化、标准化,避免踏入僵化、随意化两个误区。
第一,要“固化”。
软件过程又称“软件生存周期过程”,是软件生存期内为达到一定目标而必须实施的一系列相关过程的集合。说白了,就是软件开发中一系列最佳实践的集合。所谓“固化”,其本质就是把软件开发过程中已被实践反复证明的、符合软件规律的正确做法(最佳实践)沉淀在开发管理流程之中,供后人实践时借鉴、使用。
第二,要“简化”。
“固化”只是规范软件开发过程的“静态基础”,而“动态管理”对于规范软件开发过程更为重要。
回顾20世纪70年代,软件开发很简单,因此很容易规范。随着软件项目规模越来越大,软件开发过程越来越复杂,涉及的人、财、物资源也越来越庞大。复杂导致多变,多变带来随意,随意容易使软件开发误入歧途,使开发过程难以规范。所以说规范软件开发过程还必须简化软件开发过程。
说到简化,也有企业走进了“随意化”的误区。自由主义、经验主义随心所欲地发挥,口头协议满天飞,时间紧、人手不足是他们抛弃规范、拒绝监督的最佳接口。其实,简化绝不意味着随意化。
如何简化呢?我认为采用基于构件的软件开发方法就是一种有效手段。通过对应用领域的研究(领域工程),提炼领域需求的共性和变化性,刻画领域模型,设计面向领域的体系结构,开发各种构件,从而使应用软件的开发过程更接近于工业化生产流水线,基于体系结构,用各种构件进行组装。简化了的软件开发过程,变化因素更少,更容易规范管理。
第三,要“标准化”。
前面所说的固化、简化都只是单个企业内部的实践行为,而“标准化”则是整个社会范围内的固化和简化行为。技术标准化、管理过程标准化、度量标准化、应用领域内业务的标准化,都是推动整个软件行业内、软件产业链上各个企业规范软件开发过程的前提基础和有力保障。标准,凝聚着众多企业、科研院所的智慧,同时,又大大简化了标准所规范的领域内软件开发过程。当然,标准化也是规范软件开发过程的征途上最漫长、最困难而又最具意义的一步。
总之,失败的软件项目各有其失败,而成功的软件项目都一样:离不开规范的软件开发过程管理。固化、简化、标准化正是规范软件开发过程重要的三个方面。下面,理论结合实际,重点阐述在软件开发中如何贯彻简化原则。
同样功能和性能的软件,不同的开发者用的工作量和花费的代价却相差很大,其中的一个原因,就是在开发过程中是否贯彻了简化原则。所谓简化原则就是在满足用户对软件的功能和性能要求的前提下,尽可能化简软件及其开发过程。软件及其开发过程的适度简化,软件出错的可能性会减小,开发工作量和代价也会变小,可以收到少花钱、少干活、少出错的效果。那么如何在开发过程贯彻简化原则?笔者通过学习研究,结合自己在软件开发过程中的体会,谈谈自己的认识。
1 需求分析过程的简化
开发软件首先要弄清用户对要开发的软件在功能、性能、使用、用户界面等方面的要求,通常由于用户对软件需求的描述不全面、不精确、有二义性甚至有错误,软件开发人员对用户需求的理解与用户的真实愿望有差异等原因,使得精确地、全面地把握用户需求成为一个难题,简化问题的有效办法为:
1.1 首先让用户的相关人员通过开“诸葛亮会”等形式,全面、深入、细致地考虑清楚,他们需要的软件应具有什么功能,怎样的性能,什么样的使用界面等要求,将要求写成详细的书面材料;
1.2 开发者取得书面材料并进行认真推敲,然后听取用户的详尽说明,弄清弄准用户的需求;
1.3 听取用户对软件功能所对应业务流程的全面、深入、细致的介绍并作以详细记载;
1.4 到用户现场熟悉软件功能对应的业务流程和业务内容并作以详细记载,对所涉及的各种问题搞懂弄通;
1.5 弄清完成软件的功能必需哪些输入和输出,中间必需进行怎样的处理;
1.6 写出软件需求说明书,然后听取用户的意见,根据用户意见进行修改完善,最终形成软件设计所需的软件需求说明书。
2 开发人员的简化
软件开发是特殊的有组织的智力活动,开非人员越多越好,软件开发人员越多,信息交流路径越多,复杂性越大,常会造成事倍功半的效果,因此要本着简化的原则将开发人员减少到适当的数量。
3 软件总体设计的简化
软件总体设计是确定软件的总体结构,确定一个软件是由哪些层次、哪些模块组成,哪些模块之间存在控制关系,在这一过程的简化应尽量减少软件的层次,减少模块的数量,化减模块之间的控制关系,使软件总体结构看上去既简明清晰,又能完成所需的功能。
4 模块设计的简化
模块设计简化的目标是各模块的功能单一独立,应使每个模块只完成一个单一的相对独立的特定的功能,模块的接口要尽可能减化,仅仅交换那些为完成系统功能必须交换的信息。应采用信息隐蔽原理指导模块的设计,提高内聚度,降低耦合度,以减化模块。
5 数据结构和算法的简化
数据结构描述各数据元素之间的逻辑关系,数据结构一经确定,数据的组织形式、访问方法、组合程度及处理策略基本上也就确定了,数据结构对程序的结构和过程的复杂性有直接的影响,因此,在数据设计时应根据要进行的数据处理的要求,将可用的几种数据结构进行对比,选择能够简化软件的数据逻辑结构和数据存储结构。
解决同样的问题可以有多种算法,但不同的算法其复杂性可能差别很大,在确定算法时应进行算法复杂性分析,从中选择复杂性最小的。
6 过程设计的简化
过程设计是模块内部的处理活动的设计,结构化程序设计方法将模块内部的处理活动分为“顺序”、“分支”和“循环”三种基本的控制结构。由于这三种控制结构复杂程度不同,在选择时应本着简化的原则,尽量少选循环结构,必须选择时尽可能用单循环,必须用多重循环时,尽量减少循环的层次。在使用变量时应尽可能使用内部变量,尽量不使用外部变量,尽可能用动态变量,尽量不使用静态变量。
7 输入和输出的简化
为了实现软件的功能,必然要有数据的输入和输出,在设计输入和输出时,要尽可能简化,输入的数据项应是完成软件的功能所必需的,输出的数据项应是软件用户必需的,非必需的数据一概不要设计在输入和输出中。
8 尽可能采用软件重用技术
软件重用是指在再次或多次开发不同的软件过程中重复使用相同或相似软件元素。为了能有软部件可重用,软件开发组织应建立并逐步积累自己的软部件库,为软件重用打下基础。在面向对象的设计中就尽量利用“类库”,在开发新的软件过程中应善于使用软部件库或者类库中的现成部件,凡在库里有的就尽可能重用,即使要作些改动,如果比重新搞容易,还是要选择重用。
9 用户界面的简化
软件是供用户使用而不是供观赏的,用户希望界面简捷明了,一看界面就能基本理解作用和功能,就知道该怎样用。因此在设计软件的用户第一界面和各个使用窗口时,应只设置必要的元素,没必需的元素一个也不放。
[1]王海.关于在软件开发中贯彻简化原则的探讨.
[2]齐治昌等.软件工程[M].北京:高等教育出版社,2001,8.