技术开发 频道

软件工程的若干探讨

    第三章 怎样培养软件工程的思维与方法

    作为软件开发人员的一个通病是在项目初期的时候,就喜欢谈论实现的细节,并且乐此不疲。我们更喜欢讨论如何用灵活而简短的代码来实现一个特定的功能,而忽略了对整个系统架构的考虑。所以作为一个开发人员,尤其是一个有经验的开发人员,应该把自己从代码中解脱出来,更多的时候在我们的脑子里甚至暂时要放弃去考虑如何实现的问题,而从项目或产品的总体去考虑一个软件产品。

  以下是我个人的一些经验:

  1.考虑整个项目或者产品的市场前景。作为一个真正的系统分析人员,不仅要从技术的角度来考虑问题,而且还要从市场的角度去考虑问题。也就是说我们同时需要考虑我们产品的用户群是谁,当我们产品投放到市场上的时候,是否具有生命力。比如即使我们采用最好的技术实现了一个单进程的操作系统,其市场前景也一定是不容乐观的。

  2.从用户的角度来考虑问题。比如一些操作对于开发人员来讲是非常显而易见的问题。但是对于一般的用户来说可能就非常难于掌握,也就是说,有时候,我们不得不在灵活性和易用性方面进行折中。另外,在功能实现上,我们也需要进行综合考虑,尽管一些功能十分强大,但是如果用户几乎不怎么使用它的话,就不一定在产品的第一版的时候就推出。从用户的角度考虑,也就是说用户认可的才是好的,并不是开发人员觉的好才好。

  3.从技术的角度考虑问题。虽然技术绝对不是唯一重要的,但是技术一定是非常重要的,是成功的必要环节。在产品设计的时候,必须考虑采用先进的技术和先进的体系结构。比如,如果可以采用多线程进行程序中各个部分并行处理的话,就最好采用多线程处理。在Windows下开发的时候,能够把功能封装成一个单独的COM构件就不作成一个简单的DLL或者是以源代码存在的函数库或者是对象。比如能够在B/S结构下运行并且不影响系统功能的话就不一定要在C/S下实现。

    4.合理进行模块的分割。从多层模型角度来讲,一般系统可以分成用户层、业务层和数据库层三部分。当然每以部分都还可以进行细分。所以在系统实现设计的时候,尽量进行各个部分的分割并建立各个部分之间进行交互的标准。并且在实际开发的时候,确实有需要的话再进行重新调整。这样就可以保证各个部分齐头并进,开发人员也可以各施其职。

  5.人员的组织和调度。这里很重要的一点是到考虑人员的特长,有的人喜欢做界面,有的人喜欢做核心。如果有可能要根据人员的具体的情况进行具体的配置。同时要保证每一个开发人员在开发的时候首先完成需要和其他人员进行交互的部分,并且对自己的项目进度以及其他开发人员的进度有一个清晰的了解,保证不同部分的开发人员能够经常进行交流。

  6.开发过程中文档的编写。在开发过程中会碰到各种各样的问题和困难,当然还有各种各样的创意和新的思路。应该把这些东西都记录下来并进行及时整理,对于困难和问题,如果不能短时间解决的,可以考虑采用其他的技术替代,并在事后做专门的研究。对于各种创意,可以根据进度计划安排考虑是在本版本中实现还是在下一版本中实现。

  7.充分考虑实施时可能遇到的问题。开发是一回事情,用户真正能够使用好它又是另外一回事情。比如在MIS系统开发中,最简单的一个问题就是用户如果数据输入错误的时候,如何进行操作。在以流程方式工作的时候,如何让用户理解自己在流程中的位置和作用,如何让用户真正利用计算机进行协作也是成败的关键。

  以上是我个人的一点体会,实际上,作为一个软件开发人员,我也喜欢看到问题就坐在计算机前面直接编码,但是我确实认为软件工程对于我们系统开发的指导作用是巨大的。作为软件工程的拥戴者,下面我简单结合自己的开发经历介绍基于软件工程的开发方法、编程规范和工具使用等方面的问题。 

    第四章 软件开发的发展变化

    国外很多项目的开发都是基于一些图形化的东西来做的,他们的目的是尽量少写代码甚至不写代码。代码能够通过图形化的方式自动生成,这样的一个好处就是如果用户的需求变化或者业务逻辑发生变化,我们需要做的就是对图形表示的调整,然后重新自动生成代码,这也就是国外开发很注重对项目的概念和逻辑分析的原因。

  他们的重点是把业务规则和需求用图形化的方式表现出来,然后通过CASE工具自动生成代码。所以当国人还在不停的开发一个又一个的MIS工具的时候,国外已经把很多精力放到了CASE工具的制作上。

  我们很多公司人员忙着写具体业务过程的相关代码,而国外很多都把精力放到对不同应用,不同行业的模型的建立和共性的提取上。所以,他们做出来的东西就相对具有很强的灵活性和扩展性,而我们是用户的需求稍微有一点变化,就要忙着改代码,甚至改体系结构。

  另外,因为他们注重模型的建立,所以在建立其他应用的时候,能够借鉴原先的模型,在高层次上做调整和优化,同时能够有效的提取原有系统中可以被使用的部分。所以我们应该从以代码为核心的软件开发模式转化到以模型为中心的、基于CASE的开发上来。

  关于协作与"个人英雄主义"

  社会进步的一个很明显的现象就是社会分工越来越细,软件的开发也不例外。为什么在软件开发的今天已经不能出现象裘伯君这样的软件英雄的原因也在这里,单凭个人之力,我们也许穷尽有生之年也开发不出象Windows这样的操作系统。

    因为,当前软件行业的壁垒无非就是两个,一个就是以技术创新取胜,你模仿的了其中的界面,但是你没有办法实现其中的核心功能。结果是你只能购买其技术核心,而你作一些边角工作。不举别的例子,比如VB这样的开发工具,其核心部分是它和第三方提供的COM控件或者是DLL函数库,你所做的就是一个整合的工作。

  第二个就是以细致取胜,也就是说功能很多而且做的很精致,即使技术本身不是很复杂,你真要想做出一个这样的东西来没有一两年的工夫是不可能的。而真等你做出来了,它的新版本也早已经推出。真正能够在市面上叫得想、经得起考验得产品都是具有这两方面的特点。

  这两方面的特点决定了你一个人绝对是不可能胜任的,也许你可以独立的完成技术创新,但是你绝对不可能一个人实现所有这些纷繁复杂的功能。所以,这个时代需要创新的英雄,也更需要人与人之间的协作。

    当今的软件发展已经不是一个人可以包打天下的年代。软件开发的管理、系统体系结构的设计、模块之间的衔接、核心算法的实现、灵活界面的制定、软件再开发接口的实现都需要专门的人来做。而把这些有效的集成显然就需要有效的利用软件工程的思想和方法。所以,真正的软件英雄绝对不再是写着别人看不懂代码的程序员,而是整个体系结构的分析、设计、标准制定、协调人员。

0
相关文章