文 | 极客宇文氏
开发软件是一项工程可能稍微了解一些的知道,人家是有程序员小哥哥们制作出来的,但是你可曾记得程序员,另外的专属称号——“软件工程师”,人家可是工程师,并不是“农”啊,“猿”啊。
软件的制作过程,其实类似于盖房子,是一个工程项目,只不过盖楼房是在现实中,有土地承载着,由建筑师和建筑工人一同参与。而软件也是一个项目工程,电脑是土地,承载着一款款软件,而不同级别的软件工程师们,会有不同层次的分工,则是担任着设计和建造的不同角色。

Spring的一个过程
软件开发工程原来是这样的进行调研和需求确认
软件开发的过程建房子还真是有点异曲同工的味道。起初并不是工程师们马上一来就动工,建筑类工程师造房子也不是一上来就开始盖楼房。而是先进行调研,先研究这款软件的用户群体是什么样的,会用到这款软件的公司或者说是客户是具体为了解决什么数字化痛点。
有些企业级定制软件,他们还会研究市场竞品是什么样的,自己该拿个什么样的产品去竞争市场。这是一个蓝图的建立 是必不可少的,毕竟你的软件是为了盈利而不是闹着玩。
接下来,调研完成,需求陆续由调研的顾问以及行业专家们输出一系列文档。
起初会是需求规约,然后会有比较详细的需求文档,这一步是为了解决一个问题:我们的软件是用来做些什么事情。然后产品策划人员,会消化这些需求池,然后输出一套原型图,她们会根据复杂的业务进行梳理后,设计交互和功能方面的逻辑以及整合,便于技术设计人员进行代码骨架的设计。
设计阶段的草图
技术体系确立
当然,过程中会掺杂很重要的一步,就是我们做的这款软件,满足的这些功能需求,根据数据量以及增长量和并发量,需要用到什么技术体系?根据需求上的不同场景 ,会有很多技术层面的架构思路的建立。是用微服务呢还是传统方式?数据库是用MySQL呢还是Oracle呢?最重要的是现在一些中间件的选用。
这些都需要技术总监层面的资深软件工程师,他们根据蓝图和自己部门的现状进行合理规划和设计,这个过程其实一般在成熟的产品研发部门已经有一个大的框架,所以可能不是每次软件设计都进行这一步。
技术层面设计
然后呢,高级工程师,一般是指工作3到5年,具备足够的软件行业从事经验的开发者,,需要对这些需求进行技术确认以及开始进行数据库设计,概要设计,以及详细设计,这个过程耗时需要一到两个月,设计软件基于业务层面的整体的技术结构,就看这个步骤了,至关重要。
编码阶段
在在这些有资历的工程师设计完以后,码农可以开始领任务进行研发了,也就是传说中的“敲代码”。其实类似于工地上搬砖,只不过程序员用的砖是代码而已。
开发者编程过程就是用Java或者Python某种编程语言进行,耗时也是软件开发工程中最为长的部分。
质量监管
最后,功能在开发完成后,会丢给测试人员进行漏洞检测,这是确保软件质量的重要环节,没有哪一款软件是不需要测试人员的,否则出现拼多多那次优惠券bug的事件会越来越多。
测试人员会不断的测试新功能,再把问题反馈回开发人员,漏洞修复好测试又测,这样循环迭代下去,软件逐渐便成型。
软件开发靠的是团队
迭代
不同的软件公司会有不同的开发模式,有的是瀑布开发,有的是敏捷开发,现在用敏捷的公司越来越多,程序员压力随之越来越大了。一款软件并不一定是单纯按上文提到的步骤进行,而有可能会不断循环上面的步骤,这种经常被成为——迭代。
制作一款大型软件可能要几十个的团队,人力成本的投入也是相当巨大,一款软件系统投入千万的很多,而大部分钱就是用在这些工程师身上。
本文是我本人对软件开发过程的切身体会,希望让更多人了解软件的前世今生,了解软件的从零到一是什么样的一个发展过程。(纯属原创,转载请注明出处)
希望初入编程的朋友们可以了解软件开发过程,并且好好学习软件工程的那些课程,并不是没有用的,因为那什么U M L图是真真切切会被用上。