软件项目前期工作的重要性

  前期工作对软件项目能否如期达标地完成具有决定性作用。

  软件开发可分为四个阶段:需求分析、架构设计、编码及测试。前期工作包含需求分析和架构设计这里两个阶段内容。需求分析任务是确定目标,主要问题是产品要做成什么样子,才能满足用户需求?这部分工作是由具有较强洞察力和同理心的人完成。架构设计就是根据需求设计软件的骨架,包含主要层级模块的划分及其功能职责、技术选型、数据存储方案、接口约束及错误处理等。架构设计阶段需要对每个项技术主要特性了如指掌,才能设计出一个高效、高可扩展、高可靠性的结构。好比建筑设计师,需要对建筑材料韧性、强度、隔音、抗腐蚀等性能烂熟于胸,才能设计出一个结实、美观、舒适的大厦。

  编码就是敲代码阶段了,为软件大厦添砖加瓦,让大厦一点点从图纸变成实体,这个阶段软件工程师也会进行小规模单元测试。测试阶段就是检验,可以是按模块验收或整体验收或兼而有之,确定软件功能性能是否满足最初的目标需求。

  前期工作还没有正真的代码产出,其产出包含需求文档、原型、架构规范文档等。对于微小型项目来说前期工作是可有可无的,因为微小型项目具有的功能块、逻辑点都很少,复杂度自然也不高,一个人就很容易记住所有的逻辑关系,即使记不住重新回顾的开销也不会大。而任何人都是从微小型项目开始的,如果没有参与过大型项目的开发,并且没有接受过软件工程的知识输入,那么很容易产生软件开发不需要前期工作的错误认识。没有进行预先设计的大型软件项目,到了项目中后期很容易变成无法控制的局面。

  古话说“凡事预则立,不预则废”,凡事有计划和准备就能成功,没有计划就会失败。这句话用在说明前期工作的重要性非常恰当,项目的失败指无法如期完成或软件功能及质量不达标。前期工作重要性对软件项目有三个方面的体现。

  第一,需求准确性可决定项目成败。准确的意思就是该需求是否是用户需要的。准确的需求可能来自用户,也可能来自专业的产品经理。针对不恰当的需求进行开发,就会往错误的或者有偏差的方向跑,结果就是项目越到后期,回头或修正的代价就越大,甚至会导致项目失败。

  第二,需求稳定性决定后期开发效率。稳定的需求是保证效率的第一要素,理想情况是需求确定后不改变,这可以让我们按照预期的方向前近,节省转向带来的能量损耗。但在实际的项目中需求都不可避免会有变动,有调查显示,平均有25%的需求会变动。需求分析是为了尽可能接近最终需求,尽量减少在后期的改动。有研究表明,一个需求缺陷在测试阶段修正所付出的代价,是在需求阶段修正的代价的10~100倍。

  第三,架构合理性决定开发效率及性能瓶颈。架构定义了系统的顶层结构,与每个部分之间如何相互配合,还包括了技术选型、数据存储方案等内容。比如数据交换格式的选择,可以是文本格式的json或者xml,也可以是二进制流的序列化对象或自定义定义格式。前者可读性高但效率低,后者可读性低但效率高。如果在一个CPU和内存资源不敏感的系统里选择了二进制流交换格式,那么就得为后期调试的不便付出更多的时间。如果是一个资源不充裕的系统选择了文本交换,那么就得接受更低信息交换效率的结果。如果选择了一个不恰当的方式,后期改动通常是庞大而费时的。

  上面提到的三种影响都可能是致命性的问题,这些影响在代码产出之前就产生的,却对编码具有深远影响。根据项目的大小及类型,前期工作可投入整个项目10%~30%的时间。为了产生积极有益的作用,需求分析和架构工作需要慎重考虑,分析不同方案带来的利弊择优选取。

文中数据引用自《代码大全2》

你可能感兴趣的:(软件项目管理)