浅谈工程设计在软件开发过程中的应用
日期:2007-02-23 荐:
人类从事的各种有目的活动,都离不开设计。关于设计,其最初含意是:将符号、记号、图形之类记下。我国《辞海》把设计解释为“在正式做某项工作之前,根据一定目的要求,预先制订方法、图样等”。可以认为,广义上的设计是指人们为达到一定的目标,事先为它寻找几种实现形式或模式的活动这种活动主要表现为,人围绕目标进构思,创造出一种模式、模型或观念建构,并把这记录下来。
设计类型很多,最常见之一是工程设计,好为工业生产或工程建设进行的设计它的目标是通过设计建立新的具有特定功能的技术系统,如房屋、道路、桥梁、车辆、机器设备、生活用品,等等,以满足人们的生活和生产需要。工程设计的实质让是从了解现实入手,运用各种科学知识和经验,改造自然资源使之向人所需要的形式转化。就程序而言,它是在技术原理基础上的再创造过程,是技术原理和技术思想的具体化、现实化,是技术创造观念建构过程的最后一环,也是这种观念物化过程的起点。就作用来说,它是人类生产活动的一个重要环节,是技术原理物化为技术创造物的桥梁,是组织生产施工的重要依据。
早期的软件开发采用个体工作方式,开发工作主要依赖于开发人员的个人技能和程序设计技巧。当时的软件通常缺少与程序有关的文档,软件开发的实际成本和进度往往与预计的相差甚远,软件的质量得不到保证,开发出来的软件常常不能使用户满意。随着计算机应用的需求不断增长,软件的规模也越来越大,然而软件开发的生产率远跟不上计算机应用的增长速率。上述问题严重的阻碍了软件的发展,60年代中期,人们把上述软件开发和维护中的各种问题称为“软件危机”。
1968年在德国召开的NATO会议上,首次提出了“软件工程”一词,希望用工程化的原则和方法来克服软件危机。在此以后,人们开展了软件开发模型、开发方法、工具与环境的研究,提出了瀑布模型、演化模型、螺旋模型、喷泉模型等开发模型,出现了面向数据流方法、面向数据结构的方法、面向对象方法等开发方法,以及一批CASE(computer aided software engineering)工具和环境。
自从1968年首次提出“软件工程”一词以来,“软件工程”已成为计算机软件的一个重要分支和研究方向。“软件工程”是指应用计算机科学,数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程。其目的是提高软件生产率,提高软件质量,降低软件成本。软件工程涉及到软件开发以、维护、管理等多方面的原理、方法、工具与环境。
工程设计的一个特点就是目标明确性。工程设计一开始具有明解的目标,即满足人们各种各样的具体物质需求。其任务是在产品投产或工程实施之前,提供关于诸如这项产品或工程的构造、性能、工艺、制造施工程序等的图纸、文件或诸如此类的东西。在软件工程中这一特点则表现为“需求分析”的过程。在这一阶段,通过开发人员与用户之间的广泛交流,不断澄清一些模糊的概念,最终形成一个完整的、清晰的、一致的需求说明。可以说,需求分析的好坏将直接影响到所开发的软件的成败。
工程设计的另一个特点就是综合性。工程设计的对象往往是复杂、具体的实际问题,目标要求多,有时甚至互相矛盾,而客观条件又有限。所以,要达到设计要求,除从技术上考虑工程技术的合理性和现实可能以外,还要综合考虑其他现实因素,如投资额、成本效益、管理水平、市场状况、公众心理以及与环境的协调性等。对方案的分析和评价,也要从技术、经济、社会影响等方面综合考虑,满足科学、适用性、经济性、安全、美观性,甚至时间性、地域性等特殊要求。由于涉及问题多,工程设计往往需要综合运用许多专业的知识并结合个人经验。因此,对于实际工程问题,要求提出多个方案,并从总体和各有关因素进行深入考虑,综合分析、权衡各方面要求和条件,进行优或折衷,得到满意方案。而在“软件工程”中,“可行性分析”阶段对这一特性有淋漓尽致的体现。
可行性分析的任务是从技术、经济、使用上、法律上分析需解决的问题是否存在可行的解。其目的是在尽可能短的时间内用尽可能小的价来确定问题是否有解。在进行可行性分析时,通常要先研究目前正在使用的系统,然后根据待开发系统的要求导出新系高层逻辑模型。有时可提出几个供选择的方案,并对每个方案从技术上、经济上、法律上进行可行性分析,在对各方案进行比较后,选择其中的一个作为推荐方案,有时可能也要在几个方案中进行折衷,最后推荐方案给出一个明确的结论,如“可行”、“不可行”,可“等某某条件成熟后可行”。
规范性也是工程设计中一个很重要的特征。工程设计中一般都有一定的程序和规则。如产品的质量标准就有国际标准、国家标准和行业标准等,在设计中必须加以考虑。只有符合一定的设计规则,才能基本保证设计质量,设计方案才具有可比的评价指标,也便于方案间的比较优化、选择。设计方案具有规范性,才便于生产中的操作和根据工程实际对方案进行变更和修改。在软件开发过程中,由于是一个团队同时进行开发的,要保证各个部门并行不悖得工作就要有统一的规范,一般的在公司的内部有一个通用的技术规范,包含名称、文档规范、界面、性能、异常处理、接口等方面的标准,有了这些标准,能有效地减少系统分析员、软件设计师、程序员之间的勾通障碍,同时也利于后期软件的维护。
工程设计的另一个特点就是创新性。设计本身就是一个根据不断变化的要求和条件不断创新的过程。 工程设计同样应体现历史的、发展的创新的观点,以用户和市场需求为出发,在不断满足人类日益进步的需求中,随科技和工程技术实践不断创新。创新是技术进步的灵魂。工程设计的创新主要体现在新材料、新设备以及其他新技术段和方法的应用,结构的改进和新功能的开发,艺术形式的创新和认同等方面。在系统分析阶段,系统分析员就应该对用户的需求进行全面的了解,提出一个可行的方案和客户交流,在得到用户的反馈后,再改进方案,如此反复直到比较全面的了解了客户的需求为止。因为客户的需求是不断变化的,即使到了项目的后期(维护阶段),客户的需求还可能会发生变化,或是发现原有系统的设计缺陷,这个时候还应对系统进行修改,修改的过程又是一个二次开发的过程。
通过上面的论述,我们了解了工程设计在软件开发过程中的具体应用,工程设计的特性还有很多,这里不一一举例。任何事物都有它的两面性,“软件工程”解决了“软件危机”,但是它同时也带来了其他问题,如对一个较小的项目实施“软件工程”常常反而降低了生产率,原因很明显,团队成员的勾通耗费了很多的时间,同时因为用工程学的隐喻来形容软件开发,从而我们可能会一叶障目不见泰山,看不到其他的开发方式的存在,犯了教条主义的错误。
标签: