作为计算机专业的研究生,参加实际项目无论对于我们将来找工作,还是从事科学研究,都有着非常重要的意义。这个过程不仅可以提高我们的软件开发能力,同时也是对我们多年所学专业知识和能力的有效检验,让我们这些涉世未深、经验尚浅、知识结构不够清晰、但同时有些自负或迷茫的研究生们对自己的知识水平和技术有一个更加清楚和认识。下面是本人在一次不成功的项目开发后的一点点心得:
一、项目与用户需求脱节,或需求分析不充分,对需求变化的适应能力差。对于成功的软件开发而言,技术本身并不是最重要的,而是对用户需求的理解程度。大多数时候,用户需求无法在需求阶段就能完全搞清楚,而且用户也弄不清楚他们到底需要什么,即使一开始确定了用户需求,但到后来,比如维护阶段,用户的需求也可能发生变化。可以这么说,需求的变化本身也是一种需求,这可能是隐藏在软件开发中最具挑战性的需求,这要求我们对软件进行更具弹性的设计,使之尽可能地适应或最大限度地适应要求的变化,从而使后期修改及维护的成本更低(对于公司而言,高成本意味着更多资金的投入;对于我们从事软件开发的工作者而言,则是时间和精力的过多消耗,甚至在项目期限压力下心理力的更多支出,比如,排除错误或修改功能时的那种焦头烂额的状态)。也就是说,我们要能构造出可进化的,平滑地适应需求变化的系统,使得当用户提出新的需求时,少修改或不修改原来的代码,而仅仅是新功能的添加。这是我们的理想,也是我们努力的目标。由于我们一直以来太过专注于技术细节和功能的实现,以至于这方面的能力太差了。
二、编程陷阱多,动手须谨慎。每写一行代码,特别是编码和设计同时进行的情况(我们大多使用这种编程方法),我们都要想到,新增的代码既可以完成某个功能或解决某个问题,也可能带来BUG。虽然BUG在所难免,但要尽量减少它。单元测试在项目开发过程中不能忽视,并尽可能使用断言,这样会大大减少代码中隐藏的BUG。不要以为这样会浪费时间,会影响项目的按期交付,这些看起来附加的步骤所花费的时间比起将来在测试阶段排除错误所花费的时间,简直