您实际上有几个不同的问题需要解决:开发、测试、部署到生产中、监控生产。
通常,您希望使用数据和与生产类似的环境在与生产分离的设备上进行开发,但具有开发需要高效和有效的所有优点,例如测试工具、调试器、记录器、自动化单元测试等。数据需要类似于生产中的数据,但不是生产数据,因为在大多数情况下,生产数据必须得到保护。此外,由于开发拥有自己的制造数据,它允许将特定场景的测试作为设计人员测试的一部分。
我建议有一个标准的测试数据集,开发人员在对系统的源代码和功能进行更改时添加该数据集。测试数据的添加/修改是一种变化,需要某种正式或半正式的过程,背后有一些想法,否则你最终会一团糟。熵对于软件系统是真实的,就像对于趋于混乱和无序的物理系统一样。
测试环境需要与开发环境分离,并尽可能接近生产环境的表示。您可能需要两个版本的测试环境,一个用于测试功能并带有额外的数据捕获,用于第一次通过验证以捕获数据,开发需要修复发现的问题,第二个是尽可能接近地复制生产以按顺序进行了解效率问题。
不应允许开发人员将开发工具放到测试环境中。我见过一些情况,因为缺少开发环境提供的组件而导致系统崩溃。您想在测试环境中发现这类问题。
需要计划新系统版本的部署,以便在生产中出现问题时可以回滚更改。
最重要的是尽可能将生产与开发隔离,以便您准确了解生产服务器中的内容。当您更改生产服务器上的内容时,您可以很好地了解正在更改的内容以及更改的原因以及更改对生产环境的影响。
这是使用诸如 Mercurial 或 Subversion 之类的存储库的地方,它起到了质量控制的作用。这个想法是,存储库中的内容是作为一个完整包进行测试的内容。一旦对特定包装完成测试并且质量良好,则该包装将投入生产。
这也是您需要拥有黄金版生产环境的地方。为了稳定起见,您希望生产环境以受控和有条理的方式进行更改。每个人都看到了一个更新,它导致以前工作的应用程序和功能崩溃,因此您希望管理该更新过程。
因此,如果您有生产环境的黄金版本、某种图像,那么您可以使用它来复制其他服务器、测试环境和设计器测试环境。您的生产环境的其他变体将有自己的软件包,以及他们需要的生产环境的附加内容,例如开发环境将是生产环境加上开发环境及其工具、设计器测试数据等。
这就是虚拟机如此方便的地方。
这听起来既费力又低效,而且确实如此。然而,人们会犯错误,这种过程有助于减少错误将其投入生产的机会。