软件工程的完整生命周期
生命周期大体上分为11个步骤,如下图:
第一步:概念/创意/需求 产生,这个环节一般是项目发起人完成,也有可能由产品经理或收到反馈后发起,很多时候是会带有这个项目的期望或者说一个愿景,就像这样:
所有的软件都是有被需要的地方才会诞生,要么解决用户痛点(如:膜拜单车,滴滴),要么提高工作效率(如:office,vs,idea等),或是节约成本(淘宝,拼多多,自动售货机)等,一定是会产生一定效果才会被需要。
第二步:概要设计,一般由产品经理完成,和项目发起人一起商讨,设计一个大概的模型、绘制相关流程等,分析一下这个项目的可行性如何,是否会有使用难度而导致得不偿失等,对整个项目有一个大体的把握,确定是可行的,才会进入下一步。
第三步:需求编写,一般由产品经理完成。有了概要设计和可行性分析以后,这个时候就可以开始写具体的实施方案和实施步骤了,一般需求写完后会跟项目发起人或相关人核对/修改几轮后,才可最终确认,因为这一步与后面的步骤关系紧密,涉及到最终实现,所以不可随意,尽量慎重。
第四步:详细设计,一般由产品经理和UI共同完成。有了详细的需求文档或产品原型,经过几轮的讨论修改以后,相关的细则,流程也已经理得很清楚了,那么这个时候就要开始出最终面向用户的设计图了,这个环节也是很重要的,项目发起人也是特别重视这一步的成果,因为是面向最终的用户的效果图。这轮完了之后可能项目的预想就会变成这样:
第五步:编码+UT ,这一步一般由程序猿和测试人员完成。有了产品原型和详细设计了,蓝图和设计稿咱们都有了,接下来该干嘛很容易想到吧,那就是实线这些。这个环节主要是由程序猿完成,测试人员需要提供测试用例,程序猿就开始根据测试用例来编写单元测试。通常这块的程序猿也分为两端,前端和后端,分别由2猿完成(也有1个人同时编写前端和后端的情况),前端主要是把详细设计图的整体元素拆分成小的细节图片(有的是UI人员提供),然后开始前端的界面布局编码,把图片或一些元素按照设计图的要求实现在程序(页面)中,并且需求中的动画效果等也在这一步编写完成。说完前端了,那么后端人员干嘛呢?后端就可以开始做对应的数据库设计,代码框架搭建(这一步根据具体情况而言),业务逻辑代码编写,单元测试编写(这一步主要是增加程序猿的业务代码最终实现的完整性和降低后期维护对整个项目的影响)。
第六步:CT,组件测试,这个严格来说是白盒测试的一部分,但是很多公司不见得有白盒测试人员(要求高,需同时懂测试+开发的知识),那么这部通常是由程序猿本着自己的责任心自己来完成,毕竟自己写的组件是要给其他人使用,如果问题太多可是会降低自己对他人的好印象。有的公司或者项目没有采用组件(前端和后端都会有组件)开发可以跳过这步。
第七步:SIT,系统集成测试,一般由程序猿+测试人员完成。好了,后端和前端的工作都做完了,并且前后端的对接也完成了,那么这个时候就会有一个可以看到的项目,一个可以让测试人员把玩的东西。有的公司有这么个情况,就是测试人员要和程序猿保持对立面,那么这个环节最容易体现这一点。测试人员会按照测试用例和UI设计图 跟此时上线的程序挨个对比,如果这个程序产生的效果不是按照预期的设想来的话,就会提出bug(修改意见)让程序猿去修改,修改完以后继续核实,测试。测试人员会严格要求开发人员开发的东西要跟测试人员预想的一样,如果达不到这点,是不会让项目流程进入下一步。
第八步:UAT,用户验收测试,一般由产品经理+程序猿+测试人员共同完成。在完成了SIT以后,该项目大体效果应该是没问题了,毕竟是经历了很多轮的 测试+修复的过程,测试组的兄弟姐妹们也花了很多时间和精力在上面了,那么这一步相当于说是上线前的一步,也就是最后的一道门,这个时候产品经理会从自己的视角来实际体验这个项目,好不好用啊,体验完以后,会不会达到当初设想的效果啊,有没有当初没有想好的地方啊,有没有改进的空间啊,等等方面,会提出一些修改意见出来(这个时候,如果修改意见不是bug,不是紧急的任务,通常会放到下一轮开发中进行否则就会在这一轮提出给测试,让测试盯着程序猿完成该需求,开发测试完成后,再提交给产品经理看)。在产品经理从他的视角体验完以后,基本没有问题以后才可以进行下一步。
这个时候有人说话了:“有必要搞那么多轮测试吗?那多消耗时间和精力啊,项目要求的就是快,我可能没那么多时间弄测试。”
那么我就要问了,如果没有CT,没有SIT,没有UT,你怎么保证你写的代码是绝对没有问题的?你怎么保证你写的代码最终上线效果不是像这样的:
这个时候不可能有程序猿敢这样保证。(因为程序猿开发自己的需求会有一个思维定势,我这么开发的,我就这么自行测试,很少有跳出自己的定式思维来全面测试。)
第九步:上线,一般由程序猿完成。完成了UAT之后,这个项目基本上是没有问题,可以正常使用的,那么程序猿这个时候就要把这个时期开发的项目放到正式服务器上面运行了,如果支持热更新项目的话,那可以找个空闲的时间把这期开发内容发布到服务器上即可,如果不支持热更新,那么就得找个用户使用少的时间来更新到服务器上(比如凌晨12,这个时候就哭了程序猿了),因为更新会导致项目在2分钟左右的时间不能正常使用,这个环节如果公司实力允许,可以有多台服务器部署的话,可以采取灰度发布的策略来完成(先发布到小范围使用的正式服务器上,测试没有问题后,再同步到其他服务器),这样上线效果更好,更稳定。
第十步:维护,一般由项目发起人或项目经理决定是否继续开发该项目或终止或开发新的项目。
第十一步:报废,由项目发起人决定。有的老项目诞生以后,因为架构不完善,项目没有达到预期效果,或者公司运营等等问题,需要停止项目运作,此时老项目有可能会报废掉,但是数据或代码、域名等资产可以保留,或转移或封存或在新项目部分地方使用等,此时该老系统有可能到达生命周期的终点。
至此,软件的生命周期中的所有步骤都已经历完毕。
如有不足的地方欢迎大家指正。
转载请注明出处:https://www.jianshu.com/p/45b5bb21b560
谢谢。