一个并没有写过项目的菜鸟谈一下 项目的研发流程

2020-12-08 10:24:30 浏览数 (1)

作为一个在读大学僧,还没有过正式的公司实习的经历,偶然看到一篇鹅厂大佬的博文 鹅厂大佬给的 30个提升团队研发效能建议,详细介绍了大厂项目的研发流程,感觉很受启发,那我现在结合自身所学,谈一下自己对这三十个步骤的理解

项目的研发流程

  1. 需求分析
  2. 方案设计
  3. 项目搭建
  4. 本地开发
  5. 单元测试
  6. 集成测试
  7. 代码提交
  8. 打包构建
  9. 资源分配
  10. 发布上线
  11. 监控运维
  12. 技术沉底

在我看来这整个步骤很完整了,很多相关的技术我仍未接触过,只有部分了解过,说明还有很多需要学习的内容需要自己掌握

这一部分 作者给了一个图片,并没有做过多介绍,不过我对图片里的每一个模块,都想结合我现在浅薄的理解简单的谈一下。

1. 需求分析

在学校的学习中,比如 C 语言程序设计课程 Java面向对象程序设计 数据库与安全 这些课程中,都会有相应的大作业进行设计,所有的需求一般都是学校的老师分析好的,所以这方面我并没有完整的参与过

不过从我简单的几次编写代码的过程中,认为需求分析是一件很重要的过程,这关系到了后续的开发,所有的过程是否正确,如果需求会临时改变,后续的开发过程大多都要推倒了重来。

2. 方案设计

个人理解,方案设计是在提供了需求分析后,从非技术,跨越到技术进行连接沟通的一步

设计一个实现方案,满足上一步提出的需求。

需要考虑到软件开发人员的知识积累,以及技术选型对于需求实现的难易程度,方案设计需要一个有软件开发经验丰富的人来负责更合适。

需要能够提前能预测到设计的方案会遇到的各种问题,这是一门大学问。考虑的东西肯定很多很多。

在我之前的课程设计中,技术选择一般都被课程限制,比如 C 语言 Java等,数据库用 MySQL 也没有机会用别的

我曾经开发过一个简单的前后端分离的博客系统,后端基本上都是最基础的增删改查,基本上需求分析可以很容易的过渡到方案设计。

但是想一下,比如购物网站,购买火车票,还有各种小工具 等等逻辑复杂,用户量可能巨大的软件,可能方案设计起来就麻烦很多。

3. 项目搭建

项目搭建结合 idea 这样的超级好用 集成开发环境,new 一个就好了,配合上 maven 仓库 下载依赖和打包 基本上都方便的很, 大家都在使用的 springbootspring.io 官网就能初始化一个项目。 前端 我用过 Vue 官方的 初始化器 用命令行 就能 init 一个 也很方便吧

其实并没有~ npm 的安装 我可卡了很久很久,最开始也用不惯 终端

4. 本地开发

个人开发的时候 我就自己开发自己的,也没有打过架。

软件开发实训的时候,因为要和队友合作,大家一起用 Git ,这个时候就出现了各种各样的问题

分支整错了,合并有问题,有队友写了 Bug 也交到服务器上了

等等 各种各样的小问题,只有自己 真正 遇到了 才知道。

5. 单元测试

单元测试,我个人觉得挺重要的,但是我一直没有学过这个,写代码也没有写过测试程序

学习使用 java 的单元测试,加入我的学习代办吧

单元测试做的好,就可以提前发现问题,我在自己写博客的时候,因为没有写单元测试,所以数据库查询等地方写错了,也不会测试,也没熟悉 单步调试,只能自己不停的 重复运行整个大项目,然后不停的复现 bug 一个小时 也调不了两三次,能被气死

所以还是学起来吧 单元测试 可太重要了。

6. 集成测试

单元测试,是基础,

集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。

实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。一些局部反映不出来的问题,在全局上很可能暴露出来。

单元测试 写完了一个小方法 就可以测一测,

集成测试,写完一个小模块 也需要测试一下

感觉集成测试更重要,单个方法的问题还容易发现和挑错,感觉结合在一起,不能测试,就乱成了一锅粥

测试太重要了

7. 代码提交

一般都是交到 Git 或者 SVN 上 这样可以团队合作 也可以备份 回滚

一开始学习的时候 就很难受用起来,后面用熟了,写项目真的离不开 Git 太好用了吧

  1. 查看目前代码的修改状态
  2. 查看代码修改内容
  3. 暂存需要提交的文件
  4. 提交已暂存的文件
  5. 同步到服务器

我用的 Github 官方 给的 Github Desktop

有颜值,还很好用,不过导致我学的懒了,一直点点点,也不太会怎么用命令行了

现在还能记住的也就这几句

  • git clone 地址
    • 把项目 克隆下来
  • git pull
    • 把服务器的代码拉下来,写代码之前也要拉一下最新的代码
  • git add .
    • 我直接把所有的代码加进暂存区了,太懒了太懒了,应该看一看的
  • git commit -m "备注"
    • 把暂存区的代码提交了
  • git push
    • 把本地改好的代码 扔到服务器上去吧~

回滚也很重要,我也没找到 Github Desktop 咋回滚

所以都是 用命令行整这个

git reset 版本号

还分 软的 硬的

  • 软滚
    • git reset --soft 版本号
  • 硬滚 -git reset --hard 版本号

8. 打包构建

把源代码 编译成可执行程序,把零碎的文件打成安装包 ,部署到服务器上就 方便很多 很多。

Vue 写的前端 可以 buildHTML css js静态文件 Javaspringboot 后端 可以借助 maven 打成jar 包或 war

war包和项目的文件结构保持一致,jar包则不一样。

jar包里没有静态资源的文件(index.jsp

部署普通的spring项目用war包就可以,部署springboot项目用jar包就可以,因为springboot内置tomcat

9. 资源分配

这个环节 已经进入 我的知识盲区了

资源分配 我望文生义 的认为 是 服务器资源 Nginx HTTP和反向代理web服务器TomCat Web 应用服务器 以及 MySql数据库系统这些服务资源吧 服务器上根据 用户访问量 如何配置资源大小。

多半我写的是错的,加到学习内容里,后面赶紧学上这个。

10. 发布上线

发布上线 手动的,就把打包好的 前后端放在服务器上 然后运行

数据库 搭建好,建好表

不过现在大家都用自动部署了,自动构建多集群等等,挺高级的感觉。

伸缩扩容动态构建 K8S 虚拟化容器 docker 等等应该都是比较时髦的技术了吧

11. 监控运维

项目搭建好了,需要运维进行监控服务的运行情况,卡不卡,是不是宕机了,访问量有多少,等等

都需要监控起来,服务器运维也是一个职业,这里面学问也多了去了

12. 技术沉底

技术沉淀 总结开发 遇到的问题 解决的方式 各种心得体会

都需要 复盘,总结

吸取经验,让自己成长,然后能够更好的投入下一个开发项目中去。

30 个开发效率建议

十分推荐 看一下这篇文章的原文 鹅厂大佬给的 30个提升团队研发效能建议

看完之后我有很多的想法针对许多提到的建议都想说两句吧

作者介绍了很多,学了一下,仿佛一下把自己之前学过的许多零零散散的知识,连成了线,

由于时间和篇幅的原因,这三十个开发相关的知识,我后面再谈及相关内容。

需要学习的知识总是越学习,越多~

1. 技术选型

2. 开发工具

3. 代码规范

4. 脚手架

5. 低代码构建

6. 内部依赖仓库

7. 本地开发热更新

8. Serverless

9. 代码托管

10. 本地代码检查

11. 代码提交规范

12. 代码审查

13. CI/CD 流水线

14. 监控告警

15. 日志平台

16. 接口文档平台

17. 接口测试平台

18. 即时协作

19. 团队知识库

20. 进程监控

21. 前端监控统计

22. 任务调度平台

23. 配置中心

24. 链路追踪

25. 容器管理平台

26. 中台

27. 脚本管理

28. 可视化数据管理

29. 项目管理

30. 企业通讯

参考博客

  • 鹅厂大佬给的 30个提升团队研发效能建议

0 人点赞