什么确定了“生产”?

17

像许多从事编程工作的人一样,我熟悉“生产代码”这个术语,并且大致知道它的意思。但是,有没有人能够提供一个半严谨的定义呢?因为似乎维基百科和谷歌都不能提供令人满意的答案。在什么情况下算是生产代码似乎存在许多灰色地带,比如只被小团体使用并且没有UI、文档等方面的正式规范的内部工具,以及功能齐备、相对无错的开源应用程序,但缺乏精细的UI和全面的测试。

9个回答

27

当你的代码在生产系统上运行,意味着它正在被预期的受众在实际情况下使用。

然而,生产代码并不一定意味着是健壮、可靠或稳定的代码。 The Daily WTF提供了大量相关证据。


这并不涵盖像内部工具这样的软件,其预期受众是公司内的一群人。我不确定是否会将其视为“生产代码”。 - Tim Frey
1
我认为内部工具应该算作生产代码,除非目标用户也是维护这些工具的人员。例如,如果企业依赖于内部工具的运行,则它就是生产代码。 - Eddie
3
我同意 Eddie 的说法:“内部工具”是没有意义的,重要的是意图。如果事情出了差错,导致损失金钱并阻碍了最终目标的实现,那么相关的流程和参与者根据定义就属于“生产过程”。 - Rob Williams

22

生产指的是任何需要可靠和一致工作的东西。

无论是构建脚本还是面向公众的Web服务器。

当他人依赖于你的代码时,特别是那些可能不理解它的人(即使是“聪明”的开发人员,但可能不在您的团队内,而是使用您编写的库),那么该代码就是生产代码。

这是生产代码,因为当生产代码失败时,“工作停止”并且“金钱损失”。


你能解释一下“工作停止”部分吗?开发人员不能只在出现问题时维护代码或修复错误吗?我认为这是软件开发周期的一部分。 - committedandroider
@committedandroider 我相信他的意思是那些依赖于该软件产品工作的人将无法继续工作。他们的工作会停止。 - Usagi

8
据我理解,生产代码是指安装或在实际非测试系统中使用的任何代码。如果公司内部使用的服务器是员工使用的实际系统,则它是生产系统。重点在于,在编写代码的公司内部运行的代码可以是生产代码。
通常,在查看内部代码时,一个好的区分方法是维护代码的组是否与使用代码的组不同。如果这些组是不同的,则很有可能代码是生产代码。如果业务运行依赖于代码,则无论它是在内部开发和维护,都是生产代码。

这个东西确切地说是圆形的吗?问题相当基础,所以我给了一个基本的答案。需要深入探讨什么吗? - Eddie
@Rob Williams:是的,我同意我的回答的第二句话完全是多余的。我会删除第二句话。这是一个公正的批评。 - Eddie
我删除了第二句话,并添加了一个澄清,以更明显地表达我的目标。 - Eddie

5
编辑:简短回答:如果你“押宝”在它上面,那么就是“生产环境”。
这是一个很好的问题——一个非常关键的区别,由于误解而经常让每个人陷入麻烦。什么是“生产环境”是相关问题“环境”中的一个子集。
所以现在我们必须定义“环境”(然后重新审视“生产环境”)。我们程序员经常使用术语“环境”来指计算机系统,包括执行软件的硬件。该软件是我们编写的代码加上它依赖的其他软件,这些软件是由其他人编写的。我们编写我们的代码并将其与其他软件集成,然后通常通过一系列逐步升级的测试(单元测试、集成测试、功能测试、验收测试、回归测试等)运行集成软件,直到我们最终以预期的完整方式运行集成软件。
当然,并不是所有的东西都是完全自动化的。通常有许多人参与其中,并且他们有手动过程要执行。我们程序员寻找尽可能多地自动化这些过程的方法,但是在我们工作的系统中总会存在“人/机界限”。在任何特定情况下,通常有许多这样的边界。
另一方面,可能根本没有任何重要的自动化。例如,我们在一个充满人员进行手工劳动的房间里谈论“生产”。因此,在我们的“生产环境”中不必存在任何自动化。还有一种中间地带,其中涉及的自动化不包括软件,例如在人运行织布机的情况下。
此外,可能不存在“产品”,因为我们已经适应了“生产环境”的语言,以包括无产品的服务提供商。
同样,测试可能不涉及软件,因为我们可能正在测试非软件驱动的机器(例如织布机)甚至是人(培训和评估)。
现在,我们已经涉及了“环境”的所有关键要素:
  • 有一个目的,即正在追求的意图
  • 意图需要一个意图者,因此必须有一个发起人(一个人或 组,但不是机器),指定意图
  • 意图通过各种由 各种参与者执行的过程来追求
  • 那些参与者可能是人,他们可能是在硬件上执行的软件,或者他们 可能是非软件驱动的机器,因此可能存在自动化也可能不存在

现在我们可以正确而完整地定义原始术语。

环境包括所有过程和其参与者,它们共同代表其发起人追求特定的意图。这意味着在硬件上执行的软件,这意味着非软件驱动的机器,这也意味着执行其各种职责的人。最重要的是意图,而不是其过程或其参与者,来定义环境

此外...

如果在特定的环境中追求的意图发起人的终极目标,通常涉及生产产品或 提供服务以换取金钱,则我们将该环境称为生产

现在我们可以更深入地了解。

如果在一种环境中追求的意图是验证过程及其参与者,以准备生产,则称之为测试 环境
如果这种测试涉及到重要过程和它们的参与者的初始连接,则我们进一步将其称为集成环境
如果这种准备涉及"编程"人类参与者来执行新的过程,或随后进行验证(评估),则称之为培训 环境
有了这些区分和定义,我们现在可以理解几个常见情况。
一个环境可能会被错误地命名,名称与其意图不匹配,例如将培训 环境用作测试环境可能会被严重误用,例如在生产环境中进行集成培训环境可能会被错误地描述,例如留下关键过程参与者未被识别(例如手动调解,甚至完全忽略人员)。 环境可以被重新任务化,通过将其过程参与者重新用于新的意图。对于一些组织来说,一个非常成功的技术是在每个发布时定期在生产测试培训集成之间“翻转”几组参与者(托管软件的服务器)。
在大多数情况下,单个演员(人或硬件)可以执行多个进程,这些进程可以参与多个环境。例如,单个计算机服务器可以托管执行生产事务的软件,同时还托管执行测试培训功能的其他软件。
通常,单个演员的一个实例应该一次只参与一个环境。在非常罕见的情况下,如果意图是相互兼容的,单个演员可以跨环境共享。大多数时候,尝试这样的共享是非常不明智的,因为意图实际上并不兼容。一个完美的例子是在支持生产进程的服务器上运行测试进程,导致停机,因为测试导致整个服务器崩溃。
因此,必须非常广泛地解释环境意图,包括可用性、可靠性、性能、灾难恢复、准确性、精度、可重复性、长寿等概念。这意味着演员进程通常必须被解释为包括提供电源、冷却、备份和冗余等事项。
最后,请注意情况可能变得非常复杂。例如,桌面计算机(演员)可能被开发团队(赞助商)指定为托管他们的源代码控制(进程),而该团队依赖于此进行其主要工作(生产)。然而,IT工作人员将同一台桌面计算机视为仅仅是开发人员工作站(开发,而不是生产),当它出现硬件问题时,对其看待充满了蔑视和漠不关心。但是开发人员正在生成生产代码,所以他们也是生产的一部分吗?视角很重要。

编辑:生产质量

一个可靠的验证(测试)方法应该将打包好的代码从开发环节中取出并通过一系列测试(集成、TQA、功能、回归、验收等)进行运行,直到它被"盖章"以供生产使用。然而,这使得软件包具有生产 质量,但实际上并不是生产。只有当赞助商将其部署到具有最终意图环境中时,该软件包才能成为生产

然而,如果您的组织仅仅为他人生产软件包(即其产品),那么这种发布方式就与该组织对于该产品所经历的生产非常接近,因此通常会将术语生产延伸以适用于此,而不是澄清它是生产 质量。实际上,该组织的生产环境包括参与其开发/发布工作并导致该产品演员过程

我说这可能变得非常复杂...


这是一份非常宝贵的信息收藏!结构清晰,定义明确等等。感谢您! - florien

1
任何将被其预期用户群使用的代码都符合我对“生产代码”的定义。
当然,这个定义中的灰色地带就在于明确定义谁是你的用户群。
G-Man

1
  • 生产软件能够在必要的工作负载下不中断或降低服务
  • 软件已经在不同的生产场景中成功测试
  • 将工作原型转化为运行在故障安全冗余架构上的生产软件需要时间、代码重构和对细节的关注
  • 生产代码具有可接受的可维护性,并且有合理的注释
  • 文档手册解释了功能、所有特性并便于维护
  • 如果生产软件是国际服务或应用程序,则必须进行本地化
  • 生产代码由最终用户使用,通常是根据服务条款协议描述的条件下的客户
  • 生产软件不一定意味着可靠的关键任务软件
  • 软件可以很好地完成其预期功能
  • 日志文件提供了运行时性能和软件可靠性指标的准确描述和报告,这有助于调试和软件可维护性

1
我认为最好的描述方式是,任何“导致”部署并“跟进”部署的代码。部署本身被定义为使软件系统可供使用的所有活动。如果您的代码已准备好供人们使用(内部或其他),那么它就是生产代码。

0
简单来说,“生产代码是由其预期受众使用的实际代码”。

-1

“生产代码”这个术语混合了两个不同的概念。一个是部署管理,另一个是发布生命周期

严格来说,当系统作为业务或服务操作的一部分时,它就处于生产状态。开发、测试、QA、演示和暂存系统都不在生产中。生产系统并不立即意味着质量。

从发布生命周期的角度来看,“生产”构建是发布给公众或客户的构建。这是在预阿尔法、阿尔法、测试版(功能完整、代码完整等)和发布候选版之后的阶段。对于无法轻松部署更新的收缩包产品,达到生产阶段可能意味着一系列的测试和错误修复。

alt text


这确实让人感到困惑。 “生产”发行包应该是从开发经过所有测试阶段的完全相同的包。但验证过程仅将该软件包确定为“生产质量”(适用于但未在使用中)。 - Rob Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接