这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
软件工程没有绝对对错标准,只有是否适合当下场景(需求复杂度、团队规模、基础设施完备程度等),是否能够真正提升交付效率与质量之分。多数团队也不是一上来就能推导最优流程模型的,而是日常工作中不断发现问题解决问题,不断迭代优化流程最终得到一个最合适的流程框架。
跨职能研发流程
- 整体上遵循:需求分析=>方案设计=>开发=>测试=>验收=>发布 流程
- 这只是主流程,并不适用于所有场景(例如: Hotfix、npm 发包),重在理解各职能分工
- 产品:决定做什么、验收方案、验证方案有效性
- 研发:开发、自测、承担部分运维职能等
- 测试:质量检测把关
- 大量节点与“开发”无关;
- 复杂功能开发流程会复杂许多(集中在开发节点),后面展开
- 实际场景中可能出现无数状况(风险管理)
- 需求变更
- 上下游依赖发生问题(比如需求延期)
- 疫情、天灾、人祸等不可抗力因素
前端工程化
- 初始化项目
- 功能开发
- 集成 & 测试
- 发布
- 线上监控
初始化项目
假如是已有仓库,初始化过程很简单,不外乎git clone/git rebase(or merge)两个命令。 假如是新项目,那么你需要做很多技术选型:
- 代码组织:polyrepo vs monorepo
- 决定采用设计技术栈(React or Vue? Node or Java? AntD or ArcoDesign? CSR or SSR?),要做许多技术决策
- 搭建工程化环境:构建工具、Lint工作流(ESLint/styleLintlPrettierILint-Staged/huscky)、UT 工具、CI/CD等
- 资源部署:物理服务器、云服务器、faas、CDN(托管静态资源)等
工欲善其事,必先利其器!这些逻辑,通常会被沉淀为脚手架工具(vue-cli/CRA等),下次更迅速创建项目
功能开发
- 工具效率:
- IDE效率:设计适当的配置&插件环境,有助于减少手动操作次数,提升团队研发效率
- 单测效率:按需单测 单测覆盖率
- 构建效率:按需构建 构建逻辑优化 构建
- 确保不犯错:
- 接入Typescript,ESLint、StyleLint、CommitLint、lint-staged、prettier等,解决代码风格和类型安全问题
- UT(jest/vitest等)确保代码运行效果
- 这两类工具都有一定上手成本,但能做到吹毛求疵,确保不会发生小错误,保证长期可维护
- 安全性:
- 如何避免混入有问题的npm模块
- 如何确保产物不出现敏感信息(如github token)
集成&测试
Code Review,重在准入规则:经过谁、多少人的 approve后,可以合入代码
配合CR,通常还可以设置许多自动检测的准入条件(所谓的CI):
- 构建命令必须成功
- Lint必须通过
- 单测必须通过;单测覆盖率不能降低,且整体覆盖率必须大于阈值(或增量代码的覆盖率大于阈值)
- E2E 测试必须通过
- 性能 diff 检查
- 各类代码安全检查