工欲善其事,必先利其器。而对于一个软件开发项目,重要的器是方法,工具和技术。而这三要素中重要的又是方法论,方法是基础,工具和技术更多是我们根据方法论选择的实现手段,是辅助要素。

  知己知彼,百战百胜。一个软件项目也一样,从项目一开始应该分析清楚项目自身的特点,因地制宜,因时制宜的采用不同的方法论和工具技术来实现。如果这个地方出现了决策性错误,小一点是影响项目的质量和团队效率,大一点是直接导致项目的失败。

  方法论-项目的灯塔。

  方法论是我们针对一个行业或领域提出的分析和解决问题的方法,是我们在总结和实践过程中高度抽象出来的理论,是经过实践检验和验证的具有科学依据的原理。你的成功是因为你站在前人的肩膀上,我们不应该凭空的去发明和创造,而应该根据项目特点,借鉴前人的经验和教训,选择合适的方法论去指导我们的项目运作。让我们来分析下软件项目管理中常使用到的方法论:

  软件过程改进-CMM/CMMI,TSP,PSP

  过程改进方法论是软件项目管理中宏观的方法论,大中型的组织或机构可以实施CMM,而对于小型组织或个人可以采用小组软件过程或个体软件过程。软件过程成熟度指针对软件过程进行明确定义、管理、度量、控制的程度。它表明软件过程能力的有效性和增长的潜力,表明组织软件过程的丰富性及其应用于项目的一致性。

  软件过程改进方法论类似于我们在项目中采用PDCA循环的方法,其重点在于分析和实践以及持续的改进。CMM只是告诉你要做哪些事情,但采用何种方法来做并没有明确的定义,所以CMM更像是高屋建瓴的一个东西。

  生命周期模型-瀑布,原型,增量,迭代,螺旋

  选择什么样的生命周期模型是根据项目自身特点来确定的。每种生命周期模型都有自身的优缺点。对于大中型的复杂系统,前面的需求和系统分析没有搞清楚,后面的设计和实现根本无法进行,所以这种系统还是适合用瀑布模型按部班的进行。对于需求多变,项目进度要求紧张,人员配置相对固定,这种情况更适宜于采用增量和迭代的方法进行。

  分析和实现方法论-结构化分析,面向对象,面向方面,特征驱动

  分析和实现的方法论归根到底现在常用的是结构化分析设计和面向对象分析设计,结构化方法强调以实体关系图和数据流图分析为核心,通过数据流图的精华和变换事务映射,进行模块和单元划分,接口分析和设计。而面向对象分析和设计强调是对象和类,关注类的属性和行为和相互协作。通过用例建模,对象的结构建模,对象的行为建模,充分考虑封装,继承等面向对象关键特征进行分析和设计。

  技术+过程方法论-RUP,MSF

  把RUP和MSF提到这么高的地位主要还是这两个方法论是既强调过程,也强调方法的。通过过程去约束方法,同时又根据方法去改进过程。RUP既体现了用例驱动,架构为核心和增量迭代的过程核心,同时又给出了如何结合UML工具进行面向对象分析和设计的基本方法,给出了用例建模,架构建模,结构建模型和行为建模的实践思路。而MSF则是微软多年解决方案的结晶,包括了团队模型,过程模型和应用模型三方面的内容,在每一方面都有很多微软的佳实践可以借鉴和参考,如风险管理,角色责任矩阵,每日构建等。

  工具和技术-提升效率的关键所在。

  如果你不知道去哪里?给你张地图也没有用,所以方法论更多的是让我们走正确的路。但如何在正确的路上走的更快则要借助相关的工具和技术来提高我们的生产率。现在谁用汇编语言去实现MIS系统估计不能尊为天才,而只能尊为傻子了。现在相关的工具和技术很多,主要从软件开发生命周期模型的各个阶段来谈下相关的工具和技术的使用。

  需求阶段工具:

  需求阶段主要分为需求收集,需求开发和需求管理三个方面的内容。需求收集主要是如何捕获和描述清楚用户需求,可以用Excel来完成需求的收集;需求开发对于面向对象一般采用使用ROSE工具采用UML用例建模的方式进行,用例建模一般又分为用例建模,行为建模和界面建模三个层次的内容。需求管理一般采用RP工具进行需求的追踪,采用CQ等工具进行需求变更的控制。

  设计开发阶段工具:

  设计开发阶段工具主要是前台应用和架构的设计以及后台数据库的设计。数据库设计一般采用PowerDesigner或ERWin进行数据库的建模,采用Rose,Together或XDE等工具进行架构和功能模块的设计。采用相关高效的IDE环境进行编码,或者引入一些第三方的组件或应用程序开发框架提高开发效率。同时项目也可以使用Nunit,Nant,NLog等开源项目借鉴其相关的架构和模式。

  测试工具:

  对于测试管理一般可以用TestManager进行,对于性能测试一般采用LoadRunner或WinRunner,WAS等进行。而对于系统测试一定要注意边界和异常条件的测试,相关业务流程分支的分析和覆盖。开发人员可以用Nunit进行单元测试,可以采用PureCoverage检验自己的测试代码覆盖率情况。(简略)

  辅助工具:

  项目还要配置管理,变更管理,知识库,即时通讯,MindManager,CMMI过程控制和管理等相关工具进行辅助。保证流程的规范性和可控性。(简略)