在一个软件产品发布并使用之后,其中肯定有许多地方不如意和值得改进的地方。客户在使用的过程中会发现一些问题,提出更高的需求,市场也在发生变化,我们的竞争对手也在发展,新的技术不断地产生,这些因素推动着我们的产品不断地向前发展,使软件版本不停地往上增长。这些发展的需求不是一下子提出来的,在客户使用的过程中发现某些不如意不方便的地方,他们会向我们提出宝贵的意见,而技术人员会把这些需求记录下来,以便修改或成为下一个版本的新特性或需求。
一个软件的开发主要分为需求、设计、编码、测试、维护几个重要的阶段,下面每个阶段的一些管理措施提点愚见:
1. 需求管理
在进入正式开发之前,必须先从用户处获取准确的需求。在这上面花费相当时间是很必要的。在软件项目的开发过程中,需求变更贯穿了软件项目的整个生命周期,从软件的项目立项,研发,维护,用户的经验在增加,对使用软件的感受有变化,以及整个行业的新动态,都为软件带来不断完善功能 ,优化性能,提高用户友好性的要求。在软件项目管理过程中,项目经理经常面对用户的需求变更。如果不能有效处理这些需求变更,项目计划会一再调整,软件交付日期一再拖延,项目研发人员的士气将越来越低落,将直接导致项目成本增加、质量下降及项目交付日期推后。这决定了项目组必须拥有需求管理策略。
在整个开发周期中期望用户的需求一直保持不变是不大可能的,因为用户对于如何应用计算机软件并没有一个成熟的经验。需求变化的原因很多,如:
一开始没有调研全,需要增加需求;
客户需求发生了变化,需求必须变化;
需求错误;
需求不清楚。
基于上述的问题,必须对需求进行管理,使需求能够真正成为软件工程和管理的基线。 一种比较明智的方法是在签定开发合同(协议)时把用户需求的改动和经济利益挂钩,如果用户增加或改动了需求,那么软件的交付日期可以推迟,费用也应增加。
需求是一项复杂的工作,使用的方法也很多,不同的开发方式有不同的方法,这里简单介绍一些相关的方法:
可行性分析:在允许的成本、性能要求下,分析每项需求实施的可行性,提出需求实现相关风险,包括与其它需求的冲突,对外界因素的依赖和技术障碍。
快速原型:当用户自身对有的需求不十分清楚时,我们可以建立一个系统原型,用户通过评价原型更好地理解所要解决的问题。
图形分析模型:绘制图形分析模型是编制软件需求规格说明重要手段。它们能帮助分析人员理清数据、业务模式、工作流程以及他们之间的关系,找出遗漏、冗余和不一致的需求。这样的模型包括数据流图、实体关系图、状态变换图、对话框图、对象类及交互作用图。
数据字典:数据字典是对系统用到的所有数据项和结构的定义,以确保开发人员使用统一的数据定义。在需求阶段,数据字典至少应定义客户数据项,确保客户与开发小组是使用一致的定义和术语。
2. 设计管理
项目经理把功能模块分配给每个开发人员,每个开发人员把自己相关的功能模块收集起来,同时预估时间,其中主要包括写文档的时间、开发时间和单元测试的时间,一般要求精确到工作日。这些信息返回给项目经理,项目经理再把本小组人员的任务和预估时间发送给管理层,由管理层对此任务及进度进行评估审核,管理层会根据产品发布时间及客户需求、市场因素等方面作出选择,可能某些功能由于时间紧急会被推迟到下一个版本中去。若预估出来的时间同预计的产品发布时间有较大冲突,而且此功能是本版本中必须得做的,则开发小组会被要求重新预估时间,加快开发速度来达到这个要求。
虽然这个开发进度时间是一个大概的估计时间,但我们要尽力按照这个开发进度来执行。作为开发人员每个星期写一篇周记,描述自己本周所做的工作,根据自己的描述来评估我们自己的工作,每个人手上的工作是否按照这个进度在走,是否有人延后了,是否延误了别人的工作。在周记里每个人都要报告自己的进度,同时还要报告上个星期做了什么,正在做什么,以及下个星期打算做什么。通过这个周记,会让你觉得有人在监督你,无形之中迫使你不断地督促自己不要使任务延后,如果有延后的迹象也会尽早发现而赶上。若某些经过努力不能赶上,那也没有办法,只能修改原先的进度表,因为那是我们的估计与现实发生了偏差,我们必须使我们的进度表符合实际情况。
3. 编码管理
进入编码工作之后,可能会发现前面分析或设计阶段的某些错误,这时应返回到前面的阶段进行必要的修改。由于我们用asp.net(c#)语言进行开发,因此我们借助了VS2005工具。关于代码风格,我们基本上套用VS2005中自动的代码格式编排。良好的编码习惯有利于我们提高整个团对的开发效率,比如变量的命名、写代码时要对类及函数提供详细的注释及说明等,基本做到看它们的说明能知道这个变量、类或函数的功能以及主要算法的实现原理。在开发过程中对主要的模块要编写单元测试,同时要单元测试先行,当所有的单元测试代码通过时,此功能也基本上完成了。
我们采用VSS进行代码管理控制,其中存放了此产品的所有源代码,各个部分存放在不同的目录中。每天早上要求开发人员从VSS中获取新的源代码,然后进行编译并开始的工作。在下班之前理论上要求员工签入所有当天修改的代码,在签入之前要保证编译是能通过的。若有谁签入的代码导致运行失败则会被要求某些惩罚措施或警告。有时我们编写的代码涉及到多个文件,而且此改动是比较复杂需要花费多天的工作量,如果现在签入进去可能会导致项目测试通不过,因为有些代码没有完全完成,而之前的代码能测试通过,而且这些代码基本上不会涉及到他人,在这种情况下可以不签入进去,直到全部代码完成能提交测试时再一起签入进去。