像许多从事编程工作的人一样,我熟悉“生产代码”这个术语,并且大致知道它的意思。但是,有没有人能够提供一个半严谨的定义呢?因为似乎维基百科和谷歌都不能提供令人满意的答案。在什么情况下算是生产代码似乎存在许多灰色地带,比如只被小团体使用并且没有UI、文档等方面的正式规范的内部工具,以及功能齐备、相对无错的开源应用程序,但缺乏精细的UI和全面的测试。
像许多从事编程工作的人一样,我熟悉“生产代码”这个术语,并且大致知道它的意思。但是,有没有人能够提供一个半严谨的定义呢?因为似乎维基百科和谷歌都不能提供令人满意的答案。在什么情况下算是生产代码似乎存在许多灰色地带,比如只被小团体使用并且没有UI、文档等方面的正式规范的内部工具,以及功能齐备、相对无错的开源应用程序,但缺乏精细的UI和全面的测试。
当你的代码在生产系统上运行,意味着它正在被预期的受众在实际情况下使用。
然而,生产代码并不一定意味着是健壮、可靠或稳定的代码。 The Daily WTF提供了大量相关证据。
生产指的是任何需要可靠和一致工作的东西。
无论是构建脚本还是面向公众的Web服务器。
当他人依赖于你的代码时,特别是那些可能不理解它的人(即使是“聪明”的开发人员,但可能不在您的团队内,而是使用您编写的库),那么该代码就是生产代码。
这是生产代码,因为当生产代码失败时,“工作停止”并且“金钱损失”。
意图
意图
需要一个意图者,因此必须有一个发起人
(一个人或
组,但不是机器),指定意图
意图
通过各种由
各种参与者
执行的过程
来追求参与者
可能是人,他们可能是在硬件上执行的软件,或者他们
可能是非软件驱动的机器,因此可能存在自动化也可能不存在现在我们可以正确而完整地定义原始术语。
环境
包括所有过程
和其参与者
,它们共同代表其发起人
追求特定的意图
。这意味着在硬件上执行的软件,这意味着非软件驱动的机器,这也意味着执行其各种职责的人。最重要的是意图
,而不是其过程
或其参与者
,来定义环境
。
此外...
如果在特定的
环境
中追求的意图
是发起人
的终极目标,通常涉及生产产品
或 提供服务
以换取金钱,则我们将该环境
称为生产
。
现在我们可以更深入地了解。
如果在一种环境
中追求的意图
是验证过程
及其参与者
,以准备生产
,则称之为测试
环境
。过程
和它们的参与者
的初始连接,则我们进一步将其称为集成
环境
。参与者
来执行新的过程
,或随后进行验证
(评估),则称之为培训
环境
。环境
可能会被错误地命名,名称与其意图
不匹配,例如将培训
环境
用作测试
。
环境
可能会被严重误用,例如在生产
环境中进行集成
或培训
。
环境
可能会被错误地描述,例如留下关键过程
或参与者
未被识别(例如手动调解,甚至完全忽略人员)。
环境
可以被重新任务化,通过将其过程
和参与者
重新用于新的意图
。对于一些组织来说,一个非常成功的技术是在每个发布时定期在生产
、测试
、培训
和集成
之间“翻转”几组参与者
(托管软件的服务器)。演员
(人或硬件)可以执行多个进程
,这些进程可以参与多个环境
。例如,单个计算机服务器可以托管执行生产
事务的软件,同时还托管执行测试
或培训
功能的其他软件。演员
的一个实例应该一次只参与一个环境
。在非常罕见的情况下,如果意图
是相互兼容的,单个演员
可以跨环境
共享。大多数时候,尝试这样的共享是非常不明智的,因为意图
实际上并不兼容。一个完美的例子是在支持生产
进程
的服务器上运行测试
进程
,导致停机,因为测试
导致整个服务器崩溃。环境
的意图
,包括可用性、可靠性、性能、灾难恢复、准确性、精度、可重复性、长寿等概念。这意味着演员
和进程
通常必须被解释为包括提供电源、冷却、备份和冗余等事项。演员
)可能被开发团队(赞助商
)指定为托管他们的源代码控制(进程
),而该团队依赖于此进行其主要工作(生产
)。然而,IT工作人员将同一台桌面计算机视为仅仅是开发人员工作站(开发
,而不是生产
),当它出现硬件问题时,对其看待充满了蔑视和漠不关心。但是开发人员正在生成生产
代码,所以他们也是生产
的一部分吗?视角很重要。
编辑:生产质量
一个可靠的验证(测试
)方法应该将打包好的代码从开发
环节中取出并通过一系列测试
(集成、TQA、功能、回归、验收等)进行运行,直到它被"盖章"以供生产
使用。然而,这使得软件包具有生产
质量,但实际上并不是生产
。只有当赞助商
将其部署到具有最终意图
的环境
中时,该软件包才能成为生产
。
然而,如果您的组织仅仅为他人生产软件包(即其产品
),那么这种发布方式就与该组织对于该产品
所经历的生产
非常接近,因此通常会将术语生产
延伸以适用于此,而不是澄清它是生产
质量。实际上,该组织的生产
环境包括参与其开发/发布工作并导致该产品
的演员
和过程
。
我说这可能变得非常复杂...
“生产代码”这个术语混合了两个不同的概念。一个是部署管理,另一个是发布生命周期。
严格来说,当系统作为业务或服务操作的一部分时,它就处于生产状态。开发、测试、QA、演示和暂存系统都不在生产中。生产系统并不立即意味着质量。
从发布生命周期的角度来看,“生产”构建是发布给公众或客户的构建。这是在预阿尔法、阿尔法、测试版(功能完整、代码完整等)和发布候选版之后的阶段。对于无法轻松部署更新的收缩包产品,达到生产阶段可能意味着一系列的测试和错误修复。