环境是开发工作的核心步骤之一,对研发的开发测试是有影响的。研发与环境之间的关系是非常重要的,研发环境的质量直接影响研发人员的工作效率和代码质量。这里的“环境”只是研发环境的一部分,特指开发使用的机器环境,包括开发机器的获取、网络配置、基本工具以及代码的获取和配置。
影响开发效率的环境问题
开发人员电脑配置低,本地编译项目、调试运行项目时需要很长时间(不仅影响效率,还影响开发的心情)
测试环境不够,多人共用一套测试环境,可能会导致多个问题。
测试数据污染: 如果多个人同时在环境中进行测试, 测试数据可能会被污染, 导致测试结果不可靠。
代码冲突: 当多个人在同一环境中进行开发时, 代码可能会冲突, 导致代码合并困难。
环境管理困难: 当多个人共用一套环境时, 环境管理可能会变得困难, 导致环境维护和部署困难。例如A研发正在测试功能,B研发因为修复bug频繁提交代码进行部署,导致A研发在部署的时候被阻塞,导致原有排期可能被延期。
环境不稳定: 由于多人共用一套环境, 可能会导致环境不稳定,不能保证所有人都能够顺利完成测试.
环境设置参差不齐,有个别开发人员环境配置得比较好,效率比较高,但有的开发并不需要那么高的配置。
这些问题,实际上都可以归结为研发环境不够高效。就像低劣的空气质量和食物质量会影响我们的身体健康一样,不理想的研发环境会严重降低研发效能。
研发需要的环境
为了提供高效研发环境,应该遵循以下原则
可重现性:研发环境应该可重现,以便研发人员能够方便地复现问题并调试。
可协作性:研发环境应该可协作,以便多人协作开发,避免冲突。
与生产环境相似性:研发环境应与生产环境尽量相似,以便减少环境带来的问题。
自动化环境管理: 使用自动化工具来管理和配置研发环境,可以提高研发效率,减少人为出错。
测试覆盖率: 研发环境应该提供测试覆盖率,确保研发出的软件符合预期。
灵活性: 研发环境应该灵活,应该能够随时更新和
环境隔离性:研发环境应该隔离,以避免研发人员之间的环境干扰。
可用性:研发环境应该高度可用,保证研发人员能够高效地进行工作。
可维护性:研发环境应该可维护,以便能够随时更新和维护。
开发机器:开发机器需要具备足够的性能来运行开发工具和模拟环境,以便研发人员能够高效地开发和测试应用程序。
IDE:IDE (Integrated Development Environment) 是一种集成开发环境, 它集成了常用的开发工具, 如编辑器, 编译器, 调试器, 项目管理器等。使用 IDE 可以提高开发效率, 因为开发人员可以在同一环境中完成所有开发任务。
开发过程中使用的各种工具、数据和配置:
编译器和解释器: 研发人员使用编译器或解释器来将代码转换为可执行文件。常见的编译器和解释器包括 GCC, Clang, MSVC, Java Compiler, Python Interpreter等
调试器: 研发人员使用调试器来查找和修复代码中的错误。常见的调试器包括 GDB, LLDB, Visual Studio Debugger, Chrome DevTools等
开发过程中研发可能需要用到一些插件来提升工作效率,如代码快速补全、代码检查、代码格式化、快速定位到特定的代码位置、代码重构、单元测试等
也可能需要使用到一些数据来支持业务测试,如使用数据库来存储和管理数据。常见的数据库包括 MySQL, PostgreSQL, SQL Server, MongoDB, Redis等
业务可能需要一些配置管理平台来管理内外配置,如Apollo阿波罗配置管理平台、Spring Cloud Config、Etcd、ZooKeeper
亦或者是使用项目管理工具来管理项目进度和任务。常见的项目管理工具包括 Jira, Trello, Asana, Microsoft Project等
本地环境、联调环境
本地环境:本地环境是研发人员在自己的电脑上运行的开发环境,研发人员可以在这里完成代码编写、调试、测试等工作。本地环境通常由开发人员自行配置和维护。
联调环境: 联调环境是在研发过程中用于集成测试的环境,它通常由测试人员或运维人员维护。联调环境模拟了生产环境,研发人员可以在这里测试集成各个模块的代码和组件的兼容性,验证系统的可靠性和性能。一般联调环境使用的是测试环境。
测试环境、预发布环境、生产环境
测试环境: 测试环境是用于测试代码的功能和性能的环境。它通常是在开发完成后,在这里进行单元测试、集成测试、系统测试等。
预发布环境: 预发布环境是在代码通过测试后,在这里进行功能和性能测试以及模拟生产环境的环境。预发布环境为生产环境提供一个更加真实的环境。
生产环境: 生产环境是真正用于生产的环境,它是最终用户使用的环境。在生产环境中,系统要求高可用性,高性能,高安全性。
环境的演变
研发环境在过去几年中发生了很大的变化。
传统环境:过去研发人员通常使用独立的开发机器进行开发和测试。每个研发人员都有自己的开发机器,研发人员需要自己维护自己的开发环境。
虚拟化环境:虚拟化技术的出现,使得研发人员能够使用虚拟机来模拟不同的环境,避免了环境带来的问题。
容器化环境: 近年来容器技术的发展,使得研发人员能够使用容器来进行开发和测试,更加轻量级和可移植。
云原生环境:随着云计算的普及,研发人员能够使用云原生技术来进
测试单体环境到多环境的演变
研发环境从单体环境演变到多环境,是为了更好地满足研发人员的需求和提高研发效率。
单体环境:过去,测试人员通常使用单一环境进行测试,这个环境通常与生产环境相同。在这种情况下,测试环境称为单体环境。多环境:随着软件的复杂性增加,测试人员需要在不同的环境中进行测试以确保软件的可靠性和稳定性。这样可以发现问题并且确保软件在生产环境中正常运行。单体环境上线流程
下述图示中是部分单体环境的测试到上线的流程,可以看出测试环境只有一套
多环境上线流程
下述图示中是部分单体环境的测试到上线的流程,在下面图是中我们可以看到,测试环境分为多套,如测试基准环境,测试多环境。
测试基准环境:此环境一般部署应用的master分支,用于提供一个稳定的测试环境。测试基准环境是一种特殊的测试环境,用于对系统进行性能和可靠性测试。测试基准环境通常模拟生产环境的负载和环境条件。
测试多环境:为了满足各种诉求,不同研发可以创建自己的测试环境,以达到环境隔离,各个多环境之间互不影响,可以使用一些标示来访问到各自的多环境。
⚠️注意:测试基准环境一般不允许部署master之外的分支,除非有特殊诉求。
提供高效研发环境
为了提供高效研发环境,应该遵循以下原则
可重现性:研发环境应该可重现,以便研发人员能够方便地复现问题并调试。
可协作性:研发环境应该可协作,以便多人协作开发,避免冲突。
与生产环境相似性:研发环境应与生产环境尽量相似,以便减少环境带来的问题。
自动化环境管理: 使用自动化工具来管理和配置研发环境,可以提高研发效率,减少人为出错。
测试覆盖率: 研发环境应该提供测试覆盖率,确保研发出的软件符合预期。
灵活性: 研发环境应该灵活,应该能够随时更新和
环境隔离性:研发环境应该隔离,以避免研发人员之间的环境干扰。
可用性:研发环境应该高度可用,保证研发人员能够高效地进行工作。
可维护性:研发环境应该可维护,以便能够随时更新和维护。