软件开发系列(1)—为什么要推到重来

来源:互联网 发布:sql面试 编辑:程序博客网 时间:2024/06/05 06:40

推到重来的重要原因

软件公司开发软件产品的时候,经常出现一种情况:软件被推倒重来。

新开发的一款软件,刚刚被开发完成,就被宣布死亡,然后重新开发了一款类似的软件。或者现有的一款软件,已经有非常丰富的功能,被广泛使用。但是在做新的一个版本的时候,还是被推倒重来。

推倒重来这是软件开发过程中,一再出现一种现象,在我们提出具体方案之前,应该全面分析一下产生这种行为的原因。下面是我分析的四大原因:

  • 没有什么原因,只为工作。
  • 现有技术落后,需要升级换代。
  • 问题量级或者方向发生改变,原有设计不能支撑。
  • 现有软件太庞大,不能继续升级。

没有什么原因,只为工作

第一种原因:没有什么原因,就是闲着没事找活做。这种原因看起来很可笑,但是却是一部分不了解其他原因的人给出的唯一理由。当然不能排除上面情况,但是软件开发中,据我所知还是比较少的。

举一个例子说明一下:

我身边发生真实情况:北京的XX最近在大规模的修路,将刚刚修改的路刨掉,然后铺设水泥管子,掩埋高压电线。重新规划过街的地下通道。

这种情况下,就有一种舆论,XX政府没事找事,为了政绩从而在拆路和修路。

实际情况是,原来公路建设是没有规划的,没有为后期升级做准备。在北京遭受大雨之后,全北京重新做了规划,因此才发生这种拆路和修路的行为。


现有技术落后,需要升级换代

第二种原因:迫于市场其他竞争对手的产品,现有的产品技术已经老旧,必须立即升级。

随着计算机技术的不断进步,CPU,内存,硬盘等硬件跟随者摩尔定律,18个月性能就提升一倍。相应的软件技术也在不断的进步。最开始,使用汇编语言编写程序以追求性能,到现在使用面向对象语言(例如Java,C#),追求更好开发效率和可扩展性。从原来的的C/S结构程序升级到了现在B/S结构,在到未来的Mobile/S结构和云计算等结构。

技术落后,就要挨打。激烈的市场竞争,会让软件厂商,不断提高自己人员能力,技术储备。不断增强自己产品技术水平,将具有强竞争力的产品推向市场。

第二种原因:迫于市场其他竞争对手的产品,现有的产品技术已经老旧,必须立即升级。

随着计算机技术的不断进步,CPU,内存,硬盘等硬件跟随者摩尔定律,18个月性能就提升一倍。相应的软件技术也在不断的进步。最开始,使用汇编语言编写程序以追求性能,到现在使用面向对象语言(例如Java,C#),追求更好开发效率和可扩展性。从原来的的C/S结构程序升级到了现在B/S结构,在到未来的Mobile/S结构和云计算等结构。

技术落后,就要挨打。激烈的市场竞争,会让软件厂商,不断提高自己人员能力,技术储备。不断增强自己产品技术水平,将具有强竞争力的产品推向市场。


问题量级或者方向发生改变,原有设计不能支撑

第三种原因:用户的数量发生质变,原有的开发设计满足不了这么大用户量,必须重新设计。软件的定位发生改变了,原来面向专业用户的产品,推广到面向一般用户,软件也需要相应的需要进行调整和重新设计。一个软件原型,在升级为产品的过程中,也需要重新设计和实现等。

第三种原因是软件开发推倒重来最主要原因,接下来具体解释一下原因。

  • 软件产品开发是有阶段性的,不同阶段软件来满足部分用户需求,从而降低软件开发成本与风险。例如,10W级别用户软件架构和1000W级别用户软件架构是完全不同的。
  •  软件的定位发生了改变,原来DOS环境下的文本办公软件,定位于专业文职人员。操作使用都需要培训。现阶段,微软的Office软件面向是大众消费者,易用性不断得到提升。
  •  软件开发用于验证用户需求的原型,都不能直接作为软件产品的基础,在其上面进行开发。因为它仅仅是验证方向性的产物,不具备可扩展性和可维护性。

举例说明:

美国著名的校园网站LiveJournal,经历过如下的快速增长:

  •  2004年4月份:280万注册用户。
  •  2005年4月份:680万注册用户。
  •  2005年8月份:790万注册用户。
  •  达到了每秒钟上千次的页面请求及处理。
  •  使用了大量MySQL服务器。
  •  使用了大量通用组件。

网站整体架构也在发生变化。

从一台计算机,到2台计算机,到4台计算机,到更多的服务器。相应为应付大量请求,网站的代码也被大量重写。


现有软件太庞大,不能继续升级

第四种原因:拥有强大功能的软件产品,不能再现有基础上继续升级了。

导致第四种原因出现的因素是多方面的,主要有四种因素:功能太多、代码混乱、设计文档缺失、关键人员流动。

  • 功能太多:软件功能越多,越不好维护。对软件可进行升级的余地越小。
  • 代码混乱:软件产品开发过程,是阶段性过程。通常是有多个团队,在不同时间段完成的。如果维护的团队,没有按照统一的方式实现编写代码,将会造成灾难性的的后果。其他人无法读懂这些代码,从而无法维护,导致不能进行升级。
  • 设计文档的缺失:当软件庞大到了一定程度,功能复杂,代码行数超过了100W行之后。没有清晰的设计文档,软件代码将很难被读懂,也不知道为什么这样设计和修改。
  • 关键人员流动:软件开发是连续的。关键人员流失会让没有很好管理软件项目进入死亡陷阱。人员流动也会降低软件代码的质量,从而降低了升级可能性。

第四种原因主要是因为软件开发过程没有按照规范流程操作,从而导致了必须推倒重来的后果。