2.1可行性分析
当确定要去开发一个软件项目时,首先需要做的工作是:确定开发此软件项目是否值得。也将此工作称为可行性分析。可行性分析的目的就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得开发。确定一个软件是否能够开发主要是从技术角度衡量能否达到项目的性能指标,以确定项目的可行。这就是常说的技术可行性分析。
确定一个项目是否值得开发,就是要求事先对开发该项目的成本加以估算,对项目所能产生的经济回报加以衡量,以确定该项目是否值得开发。这一过程就是常说的经济可行性分析。技术可行性分析要求系统分析员对整个系统的需求包括功能性需求,非功能性需求,以及系统各类可选的实现技术及平台的性能,有着全面的了解。很大程度上,这是经验的积累,没有一般的方法。经济可行性,是软件工程经济学中研究的一个主要内容,现在已经非常成熟。典型的成本效益分析模型也日趋完善,常见的效益估算技术有代码行技术,可行性分析要求最终一定要产生一份可行性分析报告。
2.2开发过程定义
虽然第1章已经了解了很多标准的软件过程,但事实上,这世界从来就没有不变的真理,对于不同的软件组织每一次开发的项目而言,从来就没有完美的教条,也不应该存在这样的教条。因而必须根据组织自身的实际,根据某一具体项目的实际要求,借鉴标准的软件过程,对组织已有的组织级别软件过程以及项目级别软件过程加以重新裁减组装,以制定最可能适合该组织该项目的软件过程。这样的过程就是过程定义。
在一个由不超过10人组成的中小型软件组织里,其软件开发过程:
①制定整个团队的整个过程目标。这里的目标可以是用户的需求,也可以是团队组织方面的一些目标。
②进行角色分配。对于每个项目应该有一个项目负责人,由他完成人员的召集,资源的分配。整个项目过程中还需文档管理员,由他完成文档的管理(这里的文档事实上就是一个软件配置项,所以这里的文档管理事实上就是一项软件配置管理)。在一个项目开发中,还需要系统分析员、程序设计员等各类角色。
③制定一些公共规则或者约束,如文档的提交方式、代码的提交频率、每周的开会时间等。这些工作都需要在项目开始之前加以确定。
④开发小组并行制定时间总体计划和质量保证目标,并以两者为依据,参考角色分配,完成下一阶段的各人任务分配。此任务是迭代的,即在软件开发过程中,不断反复的进行小组和个人时间计划的制定实施和评测,以及质量控制策略的制定、实施和评价,并根据此阶段个人时间控制评价和个人质量控制评价的结果,制定下一阶段的任务分配计划,并修改质量控制策略以及时间控制计划。
从需求开始,要进行项目的计划、设计、编码、编译和测试。这一过程和瀑布模型的过程比较接近。但要注意的一点是,在每个阶段结束时,都有一个检查(review)的过程,这里检查就是第1章所描述的V&;V策略的使用。测试完成后是Postmortem,这一步骤是PSP特有的,实质上是对个人过程效率的总结。从需求分析到软件产品提交的整个转换过程,都受到Script的指导。这里的Script事实上是一些分析设计编码标准,也可以是个人经验性的总结。如设计应该尽可能模块化,需求分析时必须考虑非功能性需求等,这些都可以是Script的内容。在项目过程中的一些度量数据,如个人缺陷的日志、个人工作日志等都应该加以记录。
2.3时间控制
在明确了要做某一件事后,一般都会对所要完成的任务做一个初步的计划。计划可以很简单,也可以很复杂,这主要取决于任务自身的复杂性,以及环境的多变性。此外,不同类型的任务,其所需计划的内容也不同。作为工程管理,人们一般是希望通过适当的管理过程来达到有效的时间控制和质量控制以及成本控制。时间控制的最终目的是保证项目在预期的时间内完成。通常时间控制包括进度计划的制定、计划的实施和计划的评价。
这里需要强调的是制定计划并非是形式上的过程。很多组织和个人,往往制定计划只是为了交付给客户查看,一旦计划制定好,就将其抛之脑后,计划的跟踪和评价也被完全忽视。事实上,计划的跟踪和评价对于组织或者个人持续的过程改进非常有益。因为每一次项目计划的制定都必须有一定的依据,而最好的依据就是该组织或个人的历史项目的完善计划数据。计划的制定、实施与评价在现代软件过程环境中日益趋于迭代化。由于软件开发环境日益复杂多变,为了适应不断变化的环境,时间的控制往往是个不断迭代的过程,以不断地调整整个项目的总体计划和若干策略,当一个阶段的时间计划评价完后,即进入下一个阶段的进度控制。由此周而复始地完成一个个迭代,直至整个项目完成。
时间控制的第一步就是进度计划的制定。按照软件工程的各个主要步骤,将其划分为几个主要的阶段,并初步预期所需的时间,这就是制定进度计划时的主要内容。对于项目总体时间计划常使用甘特图或者PERT图,图形的选用只是形式,关键只要能够描述清楚整个项目的规划即可,所以读者也可依据对于团队或者小组开发的实际,加以改进。
对于小组开发,不仅应该有整个团队的时间计划,小组成员还应该根据团队总的计划,制定个人在各个阶段的计划。个人的计划可能很细,可以是以天为单位,甚至可以是以小时、分钟为单位。在PSP(个人软件过程)和TSP(小组软件过程)中特别强调个人计划,因为它是项目时间控制的数据来源,给个人软件过程的改进提供第一手的数据。