工程化
data: 2021-05-18 09:39:51
代码工程化
解决的痛点
项目性能问题
- 针对应用程序加载速度慢、性能不佳,性能评估工具可以帮助指引我们优化的方向,提高用户体验。
- 往往存在大量的冗余代码和无效代码,影响了应用程序的性能。模块化开发将代码拆分成多个模块或组件,每个模块或组件都是精简的,可以针对性地进行性能优化,提高了应用程序的性能和响应速度。
代码质量问题
- 开发过程中难免会出现一些代码质量问题,如潜在的 bug、代码可读性差、性能问题等。代码质量与规范工具可以帮助开发者及时发现和修复这些问题,提高代码的质量和可维护性。在团队开发中,不同开发者可能有不同的编码风格和习惯,导致代码风格不一致。代码质量与规范工具可以通过预定义的规则和规范,强制统一团队的代码风格,确保代码风格的一致性。
代码组织混乱
- 所有的代码通常都放在一个文件或者少数几个文件中,导致代码组织混乱,难以维护和理解。模块化开发将代码拆分成多个模块或组件,每个模块或组件都专注于一个特定的功能或责任,使得代码组织更加清晰明了。
代码复用困难
- 代码复用通常通过复制粘贴来实现,容易产生重复的代码和耦合性高的问题。模块化开发提倡代码的复用和组合,开发者可以将通用的功能封装成模块或组件,然后在不同的地方引用和复用,从而减少重复劳动,提高代码的可维护性和复用性。
协作开发困难
- 多人协作开发时往往存在代码冲突和覆盖的问题,导致团队协作效率低下。模块化开发将代码拆分成多个独立的模块或组件,每个模块或组件都有自己的接口和功能,可以独立开发和测试,降低了团队成员之间的依赖和冲突。
代码维护困难
- 随着项目规模的增大,代码的维护成本也会随之增加,因为代码之间的依赖关系复杂,难以理清和维护。模块化开发将代码拆分成多个模块或组件,每个模块或组件都是独立的,易于理解和维护,降低了代码的维护成本。
开发工具
IDEA
- IDEA 全称 IntelliJ IDEA;是Java开发人员最爱的集成开发环境。
DataGrip
- DataGrip全称 IntelliJ DataGrip;JetBrains DataGrip 是一款强大的数据库处理工具。
Visual Studio Code
- Visual Studio Code(简称 VS Code)是一款由微软开发且跨平台的免费源代码编辑器。
WindTerm
- WindTerm 是一个专业的跨平台SSH/Sftp/Shell/Telnet/Serial 开源终端。
版本管理
在开发过程中,代码会不断地进行修改、添加和删除,版本控制系统(如 Git)能够记录每次变更的历史,包括修改内容、修改人员、修改时间等,为团队成员提供了一个可追溯的代码版本历史。
Git
- 是目前最流行的分布式版本控制系统,由 Linus Torvalds 开发。它提供了强大的分支管理、版本回溯、代码合并等功能,适用于个人开发者和大型团队。
解决的痛点
代码备份与恢复
- 通过版本控制系统,开发团队可以轻松地备份代码,并在需要时恢复到历史版本,避免因为误操作或者代码丢失导致的灾难性后果。
并行开发与协作
- 多人协作开发时,不同团队成员可能会同时修改同一个文件,版本控制系统能够自动合并这些修改,并提供冲突解决机制,保证团队成员的协作顺利进行。
代码回滚与分支管理
- 在项目开发过程中,可能会出现不同的开发分支,版本控制系统能够方便地进行分支管理,并提供代码回滚功能,使得在不同分支间切换和代码回退变得简单易行。
代码审查与质量保障
- 版本控制系统提供了代码审查和评审的功能,团队成员可以通过审查工具对代码进行评审和反馈,提高代码质量、发现潜在问题并及时进行修复。
追踪问题与缺陷管理
- 版本控制系统能够帮助团队追踪和管理项目中的问题和缺陷,包括 bug 报告、任务分配、问题解决进度等,提高了团队的工作效率和项目质量。
接口管理
Apifox
- Apifox = Postman + Swagger + Mock + JMeter = API 文档 + API调试 + API Mock + API自动化测试
解决的痛点
- 加速开发周期:这些工具允许前端和后端团队并行开发,而不需要等待完整的后端 API 实现。前端团队可以使用 Postman、Swagger 和 Mock.js 等工具来模拟后端 API 的行为,从而加速开发周期。
- 降低沟通成本:使用这些工具可以帮助前端和后端团队更好地协作。通过提供明确的 API 接口文档(如 Swagger),前端和后端团队可以更容易地理解彼此的需求,减少沟通成本和误解。
- 减少依赖和提高灵活性:前端团队不再需要依赖于后端团队提供的真实 API,而是可以使用模拟数据(如 Mock.js)或者测试环境(如 Postman)来进行开发和测试。这提高了开发的灵活性,并降低了对后端的依赖。
CI&CD
持续集成(Continuous Integration,CI)
- 持续集成是指将团队成员对代码的修改频繁地集成到共享代码库中,并自动进行构建、测试和验证的过程。开发者提交代码到版本控制系统后,CI 系统会自动触发构建流程,编译代码、运行测试,并提供构建结果和测试报告。CI 的目标是尽早地发现和解决代码集成问题,确保团队开发的代码始终处于可用状态,并减少代码集成带来的风险。
持续部署/交付(Continuous Deployment/Delivery,CD)
- 持续部署/交付是指将经过测试的代码自动部署到生产环境(持续部署)或者发布到预备环境等待手动部署(持续交付)的过程。在持续部署模式下,通过自动化流程将代码从开发环境直接部署到生产环境,无需人工干预。在持续交付模式下,将经过测试的代码发布到预备环境,等待手动触发部署操作。
Jenkins
- Jenkins 是一款开源的持续集成/持续部署工具,具有丰富的插件生态系统和灵活的配置选项。它支持构建、测试和部署各种类型的项目,并可以与多种版本控制系统和工具集成。
解决的痛点
- 提高开发效率:自动化构建工具和CI/CD可以自动化执行繁琐的构建、测试和部署任务,减少了手动操作的时间和精力,提高了开发团队的工作效率。
- 减少人为错误:人为操作往往容易出错,而自动化流程可以大大减少人为错误的发生。自动化构建工具可以确保每次构建过程都是一致的,CI/CD 流程可以提前发现代码集成问题,减少了错误的传播和影响范围。
- 加速交付周期:自动化构建工具和 CI/CD 可以加速软件交付周期,通过自动化流程实现快速的构建、测试和部署,使新功能和变更更快地交付给用户,缩短了产品迭代周期。
开发模式
TDD
- TDD 是测试驱动开发 (Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD 的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。
后端
模块化开发
JPMS
- Java 9 Platform Module System (JPMS),它是自 Java 诞生以来极重要的新软件工程技术。模块化在包之上提供更高层次的聚合。关键的新语言元素是模块,它是一组专属命名、可重用的相关包、资源。
Maven
- Maven就是是专门为Java项目打造的管理和构建工具;提供了一套标准化的项目结构。提供了一套标准化的构建流程(编译,测试,打包,发布……)套依赖管理机制;
开发框架
Spring
- Spring是一个支持快速开发Java EE应用程序的框架。它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备。
Spring Cloud
- Spring Cloud 具备一个天生的优势,因为它是 Spring 家庭的一员,而 Spring 在 Java EE 开发领域的强大地位,给 Spring Cloud 起到很好的推动作用。同时,Spring Cloud 所基于的 Spring Boot,已经成为 Java EE 领域中最流行的开发框架,用来简化 Spring 应用程序的框架搭建和开发过程。
Spring Cloud Alibaba
- 相比 Spring Cloud 官方标准,Spring Cloud Alibaba 提供了更完整的功能、更好用的 API,同时在中文的加持下让复杂的微服务架构变得不再高不可攀,目前 Spring Cloud Alibaba 已经是事实上的国内微服务技术标准。
规范化工具
Alibaba Java Coding Guideline
- Java 代码规约扫描插件以阿里巴巴发布的《阿里巴巴 Java 开发规约》为标准,作为 Eclipse、IDEA 的插件形式存在,检测 JAVA代码中存在不规范得位置然后给予提示。该插件在扫描代码后,将不符合开发规约的代码按 Blocker / Critical / Major 三个等级显示在下方;提供了实时检测功能,编写代码的同时也能快速发现问题所在;对于历史代码,部分规则实现了批量一键修复的功能,提升代码质量,提高团队研发效能;支持中英双语,更接地气。
CheckStyle
- Checkstyle是一款能够规范Java代码的工具,主要关注代码风格的检查,默认提供了Sun/Google的代码风格规范配置文件。同时,Checkstyle也是高度可定制的,可以根据自己的需要进行配置。
JaCoCo
- 是 Java 社区常用的一个测试覆盖率工具,这个名字一看就是 Java Code Coverage 的缩写。
质量工具
JUnit5
- JUnit是用于 Java 开发项目的流行单元测试框架,它允许开发人员为 Java 8 及更高版本编写和运行单元测试。JUnit 使用简单而强大的断言语句测试代码的状态和行为。JUnit 很容易上手,并且它为更复杂的场景提供了使用注解的各种附加功能。
Mockito
- Mockito是最流行的Java Mock框架之一;Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。
JMH
- JMH(Java Microbenchmark Harness)是用于代码微基准测试的工具套件,主要是基于方法层面的基准测试,精度可以达到纳秒级。
Jemter
- Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试软件。用于对软件做压力测试。
前端
模块化开发
CommonJS
- CommonJS 是一种 JavaScript 模块化规范,最初被用于 Node.js 环境。它通过
require
和module.exports
来实现模块之间的引用和导出。
Vite
- Vite 是一个基于原生 ES 模块的快速开发工具。它利用浏览器原生支持 ES 模块的特性,不需要预先构建,因此具有快速的冷启动速度。Vite 适用于 Vue.js、React 和 Svelte 等框架的开发。
开发框架
Vue
- Vue.js 是一种流行的前端 JavaScript 框架,它采用了组件化开发的思想。Vue.js 组件可以被看作是一种模块,可以被灵活地组合和复用,使得应用程序的开发更加模块化和可维护。
规范化工具
ESLint
- ESLint 是 JavaScript 的静态代码分析工具,可以帮助开发团队发现和修复代码中的问题,并确保代码符合制定的编码规范。ESLint 提供了丰富的配置选项和插件生态系统,可以满足不同项目的需求。
Prettier
- Prettier 是一个代码格式化工具,可以帮助开发者自动格式化代码,使其符合统一的风格和规范。Prettier 支持多种编程语言,并提供了可定制的配置选项。
Stylelint
- Stylelint 是用于检查 CSS、SCSS、Less 等样式文件的代码质量和规范的工具。它类似于 ESLint,可以帮助开发者发现和修复样式文件中的问题,并确保样式代码符合指定的规范。
Husky 和 lint-staged
- Husky 和 lint-staged 是两个常用的工具,用于在代码提交前进行代码质量和规范检查。Husky 可以在 Git 钩子事件触发时执行预定义的脚本,而 lint-staged 可以在提交的文件上运行指定的 linter。
CommitLint
- CommitLint 是一个用于检查提交消息是否符合规范的工具。它可以帮助开发者编写清晰、一致的提交消息,并规范提交日志的格式。
Codecov 和 Coveralls
- Codecov 和 Coveralls 是两个常用的代码覆盖率检查工具,用于帮助开发团队检查测试覆盖率,并发现测试用例中的盲点和遗漏。
质量工具
TypeScript
- 在一定程度上也可以算作代码质量与规范工具的一部分,尽管它更多地被视为一种编程语言。它解决了以下问题
- 类型检查:TypeScript提供了静态类型检查功能,可以在编译时发现代码中的类型错误,避免在运行时出现意外的类型错误,提高代码的稳定性和可靠性。
- 代码提示和自动补全:TypeScript 能够根据变量和函数的类型信息提供更准确的代码提示和自动补全,减少开发过程中的错误和拼写错误,提高开发效率。
- 接口和类型定义:TypeScript 支持接口和类型别名的定义,可以帮助开发者明确地定义数据结构和接口,提高代码的可读性和可维护性。
- 代码重构:TypeScript 提供了强大的重构功能,包括重命名、提取函数、提取类型等,可以帮助开发者快速地对代码进行重构,改善代码结构和质量。
Jest
- Jest 是一个基于 JavaScript 的测试框架,由 Facebook 开发,广泛应用于前端和后端的单元测试、集成测试和端到端测试等场景。Jest 支持异步测试、快照测试、覆盖率报告等功能,并提供了易于使用的 API 和丰富的插件生态系统。
Sentry
- Sentry 是一款开源的实时错误监控和报告工具,旨在帮助开发团队发现、诊断和解决应用程序中的错误和异常。Sentry 提供了丰富的功能,包括实时错误报告、错误分析、错误趋势分析、性能监控、用户反馈收集等,可用于监控 Web、移动和后端应用程序。
Lighthouse
- Lighthouse 是一个由 Google Chrome 提供的开源工具,用于评估网站的性能、可访问性、最佳实践等方面。它可以在 Chrome 浏览器中作为插件运行,也可以通过命令行工具进行批量测试。
Webpack Bundle Analyzer
- Webpack Bundle Analyzer 是一个 Webpack 插件,可以帮助开发者分析和优化 Webpack 打包生成的资源文件,识别并优化打包过程中的性能瓶颈。