1.可行性分析
主要是对一个项目是否进行做出决定,一般由公司高层来决定,这种决策对公司尤其是创业公司至关重要。方向搞错了,执行力再强也没用。想创业的同学,这个问题定要多多思考哦。 可行性分析可能包括但不限于以下几个步骤:市场调研、技术难度、盈利能力等诸多方面。 a. 市场调研:对市场做一些具体的调查,主要对一些问题做出回答,比如市场是否有对项目的切实需求、市场中是否已经有公司或组织在做、是否符合法律法规。 b. 技术难度:公司是否有技术实现这个项目,其中技术人才是一个重要因素。
c. 盈利能力:能给公司或者组织带来多大的收入。
有的时候,是不需要考虑盈利能力的,比如第一次给其它公司做项目,只要成功了,今后自然还有项目再做。或者,这是一个公司内部的项目,主要是为了减少成本的。(我们也可称之为盈利的) 思考:很多时候,探讨一个项目是否值得做,价值不大。因为你只有去做了,可能是做了3年, 才发现这个项目有前景或者不值得做。不过Fans同学仍然认为,思考是有必要的。
2.需求分析
可行性分析中探讨市场需求时,这时的需求很可能是一个比较大而抽象的需求,需要在需求分析阶段细化需求。需求往往是很多的,而不是一个原子需求。
需求分类:功能需求、界面需求、性能需求。 a.功能需求:描述系统的功能,一般来说会细化成一个个的小功能,小到开发人员能够实现。 每一个小功能通常都有一个编号,比如F000001. b.界面需求:打个比喻,系统的功能好比人的内涵,需要一些时间才能理解。 系统的界面好比人的外貌,长得美帅很可能立即吸引一批人。 举几个界面需求的小例子,整体界面布局,色彩,字体大小。 这类需求往往会有一个解决方案:系统皮肤。 c.性能需求:描述系统的性能,比如页面的响应时间,同时响应的请求数等。 d.稳定性需求:724365不停运作,商业重要项目中会有此要求; 每个月有一次或几次维护,在网游行业非常常见。 e.安全性需求: 保护系统内部数据不外泄等安全方面的需求,比如用户的帐号和密码,个人其它隐私信息。 f.其它需求:… 思考:时间或者进度是需求么?
3.架构设计
架构设计是从技术角度对系统进行一个全方位的规划,通常着眼于全局,而非局部细节。 没有最好的架构,架构都是根据需求来做的。架构通常都会有架构师参与。
包括但不限于以下几种事项: a.选择项目开发所使用的技术,可能包括编程语言,数据库,框架或类库或平台。 b.定义系统技术基础,比如分布式平台的规划和部署、数据的流转等。 c.将系统划分为不同的模块,定义模块与系统技术基础之间的关系。 d.定义模块之间的接口或通信或者交互。一个系统通常会包含很多个模块,分模块开发体现了一种 分而治之的思想方法。定义模块之间的接口方便后期不同模块的整合。
4.详细设计
详细设计是将架构设计进一步细化,通常会比较细致,一方面方便开发人员具体开发, 另一方便于项目经理跟踪项目进度。
详细设计通常由开发人员来制定,可能会有以下任务: a.模块内部的设计,大概怎么做得有个全局的思考,可能会书写详细设计文档。 b.完成自己的模块功能,通常会严格参照需求文档或者功能列表文档。
c.与其它模块的交互。
5.编码实现
一般来说,初级程序员编程时,对需求、架构、设计没有深入的考虑,也不是很有必要。老师布置了 一个任务,或者自己想要做个小项目,通常在内心都有一些考虑,然后就开始敲代码了。 生产环境下开发,急于编码是个大忌,有经验的人通常会认可此种观点。 原因分析: a.需求变化的概率是非常大的,根据确定的需求编码往往不能适应变化。 b.即使需求不变,急于编码很容易考虑不周,结果往往是只实现了功能,却导致了性能差、逻辑不清、冗余代码多等种种问题。 比如,同一个功能,为了用户的方便,可能会有好几种操作界面,后台的功能实现既相似又有不同,急于编码非常容易导致代码冗余和混乱,维护起来非常费劲。尤其是在这次实习做项目中。o(︶︿︶)o c.一旦编码有了一定的进展,对大多数人来说,就失去了重新开始的勇气。 有的时候,重新开始写优于重构,尤其是在需求或者设计发生变化时。
6.测试
根据需求和功能列表,写测试用例,然后测试系统。 根据Fans现在的经验来看,人工测试占了很大一部分。比如为了测试用户名和密码,手动输入 用户名和密码,且考虑到正确性和合法性等诸多情况,这样为了测试一个功能,往往会有很多个测试用例。时间久了,会让人感到厌烦和疲惫。
对于想在测试道路走下去的人,做个测试开发工程师、测试经理还是有挑战的。
7.验收
根据当初的项目计划或者产品计划,也可能是结合需求文档,来检查当前项目是否完全完成了当初的计划。 验收过程可能会和前面几个流程有些重复的地方,我的理解是9个流程之间存在一条主线:项目开发和维护。 验收的过程会涉及到很多事项,具体有哪些事项,可以"身临其境"来想。
8.部署
项目计划是振奋人心的, 需求分析是细致入微的, 架构设计是运筹帷幄的, 详细设计是指导方针的, 编码过程是艰苦卓绝的, 测试过程是精挑细选的, 验收过程是中规中矩的, 部署过程是春种秋收的, 维护过程是精心呵护的。
9.维护
a.保证现有软件持续正常运行 常见例子: ①服务器由于负荷太大,挂掉了,需要立即重启; ②网游为了保证系统稳定运行,每过一段有几个小时的维护时间。 ③系统越来越慢,需要诊断原因,网络带宽问题还是内存泄漏还是CPU不够用。 b.二次开发 常见例子: ①百度有海量的搜索请求,分析下搜索请求,挖掘一些信息,比如浏览器的市场份额情况、统计热搜词。 (侧重于数据) ②使用系统API,做一些其它方面的功能。(侧重于功能) c.系统升级 常见例子: ①QQ空间由5.0升级到6.0,公司内部做好开发,普通用户没有多大的影响。 如果想升级,点击一下按钮-升级到6.0,就可以了。 ②天龙八部由2.0升级到3.0,客户端需要下载很多新的组件,然后更新,最后重新启动。 以上介绍的只是一些概念上的流程,很多地方都是自己的个人揣摩和猜测。 实际过程中的开发流程,各式各样,按照自己所在公司的流程来开发才是最合适的。