1.前期准备的重要性
项目分为前中后期,其中前期工作对于整个成功与否占比相当大,前期的充足准备能给整体项目的正常推行保驾护航,能将风险降低到最小。
准备不充分,就开始编码这是极其不负责任的做法,因为你的靶心错了,你怎么可能到达得了目的地呢。或许老板让你立刻马上就必须进行编码,那么我觉得你可以教育你的老板,让他明白需求的重要性.或许你可以增加世界上脱盲的老板的人数也说不定。
构建之前,必须做前期准备,有以下论据:
诉诸逻辑:
进入有效编程的要领之一:准备工作很重要,再开始一个大项目之前,应该为这个项目制定计划,这是很有意义的。做计划能防止浪费钱建造错误的东西。有时候用户自身也不清楚想要的是什么,但是值得花费比理想情况下更多的力气,找出他们真正想要的东西,这比做一个错误的东西,重头开始的成本来的要低廉得多。
诉诸类比:
好比建造房子,房子地基打错了,肯定危险系数极大,甚至崩塌。所以软件项目也是如此,确定好前期要做的工作,并花费力气去做好,项目至少不会全盘皆输。
诉诸数据:
惠普,IBM,休斯飞机公司,TRW的研究人员发现,在开始编码之前清除一个错误,那么返工的成本会随着项目的推进成反比的趋势。
数据表明前期工作的充分性,预示着你是否能更轻松的完成这个项目。
2.辨明你所从事的软件类型
一般软件系统类型分为三个大部分:(1) 商业系统 (2)使命相关的系统(3)性命攸关的嵌入式系统
这些软件的生命周期有以下6点:
1.计划与管理 2.需求的调研 3.设计 4.构建 5.测试与QA 6.部署
而三种系统之间又有着微妙的差距:
(1)商业系统更加适合于高速迭代开发的模式,毕竟需求变更较快,版本发布的节奏较快,还是以速度为王。
(2)使命攸关和性命攸关更适合于需求稳定,超高等级的可靠性,此种开发方法引申出序列式开发方法
前期准备在迭代开发和序列化开发之间的表现.
不论在迭代开发还是序列化开发之间,前期准备都能有效降低后期弥补错误的成本。实际我们平时开发系统用到的大多数开发模式还是迭代开发,因为现实生活中的需求总是不确定的。
问题定义的先决条件
问题定义就是对这个系统要解决的问题做出清楚的陈述,这有时称为"产品设想","设想陈述","任务陈述"或者"产品定义"。问题定义一般在具体的需求分析工作之前,而需求分析是对所定义的问题的深入调查。问题定义要以客户的角度去描述。如果没有好的问题定义,你努力解决的可能是一个错误的问题。
需求的先决条件
需求是软件系统应该做什么,达成解决方案的第一步。需求活动分为以下:需求开发,需求分析,分析,需求定义,软件需求,规格书,功能规格书,规格
一套明确的需求,是软件系统的指南针,不会让你跑偏,同时也可以在内部有效解决意见不一致的问题,可以查看书面的需求,以解决分歧,不用因为一个确定的问题和别人进行费口舌。
在构建期间处理需求变更,使用需求核对表来评估你的需求的质量,确保每一个人都知道需求变更的代价,建立一套变更控制程序,使用能适应变更的开发方法,放弃这个项目,注意项目的商业案例。
架构的先决条件
这里只用一句话进行概括即可:离开了良好的软件架构,你可能瞄准了正确的问题,但却使用了错误的解决方案,也许完全不可能有成功的构建。足以证明架构对于整个项目的支撑所达成的重要性。
架构={
程序组织(Program organization)
+主要的类(Major Classes)
+数据设计(Data Design)
+业务规则(Busines Rules)
+用户界面设计(User Interface Design)
+资源管理(Resource Management)
+安全性(Security)
+性能(Performance)
+可伸缩性(Scalability)
+互用性(Interoperability)
+国际化(Localization)
+输入输出
+错误的处理
+容错性
}