一个软件从0到1的过程
创建一个系统有多么复杂,对于用户(使用的人)来说可能觉得很简单,就是一个左移,右移,按钮操作,删除,查询,放大,分享等等。
非软件研发行业,不会知道这个过程原来是这样的,一个原件和系统是这么诞生的。
但对于研发过程是一个很复杂的过程。
大概分这么几步:
0、立项
也就是这个事情可以开始干了,配备什么人员,从业务,项目经理,产品经理,设计,研发,测试,运营等,还有一大堆领导,好几十人。有的比较复杂的,还会涉及到招标,就是 我们公司想做一个app,但我们自己没有技术人员,老板说找一找,于是几个技术型的公司专门搞这个,大家竟标一下。看看哪个 性价比 高 ,用哪个。还有的是直接找一个小公司给外包做了。但现在很多的互联网公司都有自己庞大的技术团队。全部自己搞。
1、需求分析与整理
先要获取需求,也就是这个功能的初始状态,这个功能是怎么来的,就是跟客户跟用户,市场调查,然后一大堆人挤在一个会议室里你一句我一句的,商量出来的,这个过程是始费瓜子,又费茶水,还费唾沫星子,费时间。然后快要下班前的一刻,可能会有一个结果,但是相像的是很好,通常领导说大家休息一会,15分钟后,再进行一次最终的确认,就下班。这时什么星星啊,月亮啊,路灯啊,都都亮起来了。开会的小伙子,小姑娘们脸上油光满面了,从打鸡血到睁不开眼,从滔滔不绝,到 是,没错,挺好,可以。直到听到就这样了的话时,才会打起精神头来,收拾收拾下班。产品经理会把这个会议的记录进行整理出来,发出邮件,每个参会的小伙伴都会收到。
2、原型设计
这个阶段就是产品经理发挥的时候了,产品经理这个职位是从前没有的,是互联网公司硬生生的创造出来的一个职位,就是把app或系统做成什么样子,就设计 出来,这里就用到了Axure或 墨刀 软件,或其它的软件。产品经理开始加班加点的,几天之内就把原型设计出来。估计 是较劲脑汁了。
3、原型评审
产品经理设计,熬夜设计完了,就会组织一次会议,对原型进行评审,把研发人员,领导,业务方。这些人都横七竖八的提出一堆的问题,产品经理会是一种舌战群儒的情况,跟大家解释 为什么要这样设计 ,最后领导会说你这必须改(你跟其它app比较了么,你体验了其它的app了么,你这么设计就是反人类等等),产品经理 弱弱的回答,好,我记下了。
4、原型优化
产品经理只好,默默的回到工位,加班继续改改改,一个产品经理,会同时做一堆的原型。
5、原型终审
做好之后,再进行一次第三步,哈哈。这个过程,不好受。但为了做好,只能加油了。
6、与技术人员讨论
原型设计期间会与技术人员讨论其中的功能这样设计,是否可以实现,实现的过程 是否复杂。
7、技术画架构图
研发人员会出一个技术架构图,绞尽脑汁的那种图。
8、研发计划排期
功能开发的时候要有一个计划排期表,从什么时候开始做,到什么时候做完。要把功能排的尽量详情些,多加几天时间,通常按计划都不能按时完成任务,这期间会加杂其他的任务,工作。总会打断你现在的任务。比如说要你导一个今年的销售数据,要某某些字段,然后按什么分组,什么排序,什么条件。然后你写了一大堆sql(查询数据库数据的语句),费了大半天时间。然后还不体现工作量。
如果是app或网站,就要涉及到前端(做那些华丽效果的),也要排期。约时间,因为不是每个小技术团队都有前端开发人员。
8、数据库表设计
技术人员要设计 数据库的表结构(就是存储你下从网站上买东西的订单、支付记录的数据),可能会有几十张数据表。关系错综复杂的,你关联我,我关联他的。
9、数据库表结构评审
要进行一个次技术人员评审
10、数据库表结构优化
评审过程中发现在问题,要进行一次优化改进。
11、数据库表结构终审
再重复一次评审。
12、技术选型讨论。
关于技术选型,层出不穷的,什么都有。传统上的 spring mvc。spring boot +vue等,各式各样的,因为每一个小团队中都会有一个柱子哥,也就是牛X的,也就是架构师,他会给你提供不少的建议,让你这么搞,那么搞。程序员都有一个通病,就是自己写的代码,是最好的代码。别人的东西,只是永远在借鉴。不要重复造轮子,但却从来没停止过造轮子。说了一大堆,最后发现,还是用上一个项目工程的架构吧,挺好的。写着挺顺手的,还稳定,大家用着都不错。
13、技术架构搭建
这一步就这样被略过了……
14、按计划进行代码研发。
就开始写代码了,写数据访问层,业务层,控制层,页面展示。通常是第一个功能比较费时间,再做下一个功能就是copy 第一个功能的部分代码了。
15、研发出小功能后,进行 功能测试。
功能写完后,自己先要进行测试,不能让别人找出任何毛病来。得把代码格式化一下子,看起来能舒心,注释也加一下吧。要不三天后也不知道这代码做什么的了,因为一个写个几十个方法是正常的,上千行代码,轻轻飘的。
熬夜加班,写bug ,是程序员的宿命,有的公司是因为996,有的是因为研发计划就在这里摆着,你不干,明儿,领导就找你。有的是一个bug,导致延误了时间。
有的时,加班跟绩效挂钩。
16、提交测试人员进行测试。
功能搞出来后, 就要给测试人员,测一测了,通常能测出bug,没有问题的少,我们自己测试是正向模式测,我们按常理点,不会出问题,他们是以用户模式去测试。然后踢出几个bug ,让你改。
17、碰到陌生技术,进行学习。
这是经常的事儿,比如之前要用html做页面,现要vue 做页面,你就得从0开始学,边学边写。时间就浪费了不少。
18、功能研发。
每天铛铛铛的敲着键盘, 中午睡上一觉,下午继续敲,吃饭,遛会弯儿,继续敲,直到两眼花了,干了。时间也就来到了9点10了。一天基本活动的时间就是接水,上厕所。其它时间都是在工位对着电脑。
19、研发完毕,这是一个连续的过程,也是最耗时的过程。
代码进行上传git ,svn。
20、测试人员测试,黑盒、白盒,压力一系列的测试。
测试人员进行整体测试。
21、写测试报告
要出一份测试报告,就是列出本系统测试过程中,碰到多少bug,包括bug的级别等。
22、研发人员写功能文档。
这时就要写一份说明文档,把功能进行介绍,贴一些系统的图片,代码等。
23、部署预发布环境进行测试。
工程打包,进行预发布环境测试。这一步,小公司就是把工程包 copy 到 linux 中的tomcat 中,手动操作。大公司就会有自己的上线系统,因为每天有几百上千个系统会上线, 手动操作效率太低了,出错率也高。发布系统比较安全可靠。
24、数据库数据添加测试数据。
添加测试数据。
25、测试人员与研发人员测试。
预发布环境进行功能测试。
26、进行正式环境发布。
预发布环境测试没有发现问题,就会在正式的环境进行发布系统。
27、进行测试。
线上进行测试。
28、线上清理测试数据。
清理线上数据库的测试数据
29、用户使用。
用户就可以正常使用了。
30、监控功能bug
随时修复,再进行下一个版本发布。
31、跟随几个版本后,问题逐渐减少,功能稳定。
喘口大气儿。
32、准备下一个系统功能研发
再重复上一个循环从第1个到30个。往复的循环,一天一天又一天,一月一月又一月,一年一年又一年。做不完的功能,写不完的文档,修不完的bug。这就是一个程序员的生活。