16

就像几乎所有已经编程了一段时间的人一样,我对“生产代码”这个术语很熟悉,并且对它的含义有一个模糊的理解。但是,有人可以提供一个半严格的定义吗,因为维基百科和谷歌似乎不能?似乎在生产中存在很多灰色区域,例如一小群人使用的内部工具,因此在 UI、文档等方面没有“正式化”,以及开源应用程序是功能完整,无缺陷且工作正常,但缺乏润色、UI 和广泛的测试。

4

9 回答 9

25

当您的代码在生产系统上运行时,这意味着它正在被目标受众在现实世界中使用。

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

于 2009-01-29T02:33:42.540 回答
20

生产意味着您需要可靠、一致地工作的任何东西。

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

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

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

于 2009-01-29T02:26:33.863 回答
8

据我了解,生产代码是在实时、非测试平台系统上安装或使用的任何代码。如果公司内部使用的服务器是公司员工使用的实时系统,那么它就是生产系统。这里的重点是,在编写代码的公司内部的服务器上运行的代码可以是生产代码。

通常,在查看内部代码时,一个很好的区别是维护代码的组是否与使用代码的组分开。如果这些组是分开的,则代码很可能是生产代码。如果运行业务依赖于代码,那么它肯定是生产代码,即使它是内部开发和维护的。

于 2009-01-29T02:25:57.203 回答
3

编辑:简短的回答:如果你“把农场赌在上面”,那就是“生产”

这是一个很好的问题——一个绝对关键的区别,经常因为误解而让每个人都陷入困境。什么是“生产”的问题是什么是“环境”的相关问题的一个子集。

所以部分答案是,“生产”是最重要的“环境”,也是 最值得信赖的“真实”事物。

所以现在我们必须定义“环境”(然后重新访问“生产”)。 我们离满意的答案还很远。

我们程序员经常使用术语“环境”来指代由执行软件的硬件组成的计算机系统。该软件是我们编写的代码以及它所依赖的软件,这些软件是由其他人编写的。我们编写代码并将其与其他软件集成,然后我们通常通过一系列升级的测试(单元测试、集成测试、功能测试、验收测试、回归测试等)运行集成软件,直到我们最终运行以预期的完整方式集成软件。

当然,并非一切都是完全自动化的。通常涉及很多人,并且他们有手动流程要执行。我们程序员寻找使这些过程尽可能多的自动化的方法,但在我们工作的系统中总是存在“人/机边界”。通常,在任何特定情况下都有许多这样的界限。

另一方面,可能根本没有任何显着的自动化。例如,当我们有一个房间里挤满了生产产品的手工劳动的人时,我们谈到了“生产” 。因此,我们的“生产”“环境”中不必存在任何自动化。还有一个中间地带,其中涉及的自动化不包括软件,例如在一个人运行织布机织布的情况下。

此外,可能没有产品,因为我们已经调整了我们的“生产”“环境”语言以包括无产品服务提供商。

同样,测试可能不涉及软件,因为我们可能正在测试非软件驱动的机器(例如织布机)甚至人(培训和评估)。

现在我们已经触及了“环境”的所有关键要素:

  • 有一个目的,一个intent,正在追求
  • anintent需要一个意向者,因此必须有一个sponsor(个人或团体,但不是机器)来指定intent
  • 这是通过各种执行的各种intent追求的processesactors
  • 这些actors可能是人,可能是在硬件上执行的软件,也可能是非软件驱动的机器,因此可能存在也可能不存在自动化

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

一个environment由所有代表其合作追求特定事物的processes人和他们组成。这意味着软件在硬件上执行,这意味着非软件驱动的机器,这意味着人们执行他们的各种职责。它是主要定义 a 的,而不是它的或它的。actorsintentsponsorintentenvironmentprocessesactors

此外...

如果intent某个特定的追求environmentsponsor's最终目标,通常涉及生产aproduct或提供aservice以换取金钱,那么我们将其 environment称为production

现在我们可以走得更远一点。

如果intent在an中追求的environment是对a的验证 processesactors准备production,我们称之为a 。test environment

我们进一步将其称为测试是否涉及重要个人或团体及其.integration environmentprocessesactors

如果该准备工作涉及人类“编程”actors以执行 new processes或随后的验证(评估),那么我们将其称为 a 。training environment

有了这些区别和定义,我们现在可以理解几种常见的场景。

Anenvironment可能被错误地标记为与其不匹配的名称intent,例如当training环境用作时test

Anenvironment可能会被严重误用,例如 whenintegrationtrainingis done in production

Anenvironment可能会被歪曲,例如当 keyprocesses或未actors识别时(例如,手动核对,甚至完全忽略人员)。

可以environment通过将其processes和重新actors分配给新的 来重新分配任务intent。对于某些组织来说,一项非常成功的技术是在每个版本之间、、、 和之间定期“翻转”几组actors(服务器托管软件) 。productiontesttrainingintegration

在大多数情况下,单个actor(人或硬件)可以执行多个processes可以参与多个environments. 例如,单个计算机服务器可以托管执行production交易的软件,同时还托管其他执行testtraining功能的软件。

通常,一个实例actor应该一次只参与environment一个。在极少数情况下,如果相互兼容,则actor可以共享单个。大多数时候,尝试这样的共享是非常不明智的,因为它们并不真正兼容。一个完美的例子是在同样支持的服务器上运行,导致停机,因为这导致整个服务器出现故障。environmentsintentsintentstest processproduction processestest

因此,intent必须environment以非常宽的范围来解释,以包括可用性可靠性性能灾难恢复准确性精确度可重复性寿命等概念。这意味着actorsprocesses必须经常被解释为包括诸如提供电源冷却备份冗余

最后,请注意,情况可能会变得相当复杂。例如,开发actor团队sponsor(尽管如此,IT 人员仍将同一台台式计算机视为开发人员工作站(不是),并在它出现硬件问题时以轻蔑和冷漠的态度对待它。但是开发人员正在生成代码,所以他们不也是其中的一部分吗?观点很重要。processproductiondevelopmentproductionproductionproduction

编辑:生产质量

一个可靠的验证(testing)方法应该从打包的代码中获取development并运行它通过一系列tests(集成、TQA、功能、回归、验收等),直到它出现在另一端“标记”以供production使用。然而,这使得包装质量,但实际上并非如此。仅当 a将其实际部署到具有最终级别的.production productionproductionsponsorenvironmentintent

但是,如果您的组织仅生产该软件包(其)以供其他人使用,那么此类发布与该组织将在该方面经历的product一样接近,因此通常将术语延伸以适用而不是澄清这是质量。实际上,该组织的环境由.productionproductproductionproduction productionactorsprocessesproduct

我说它可能会变得相当复杂......

于 2009-01-29T06:22:05.777 回答
1

其预期用户群将使用的任何代码都符合我对“生产代码”的定义。

当然,该定义中的灰色区域将清楚地定义您的用户群是谁。

G人

于 2009-01-29T03:26:01.203 回答
1
  • 生产软件可以在必要的工作负载下执行,而不会中断或降级服务
  • 软件已在不同生产场景中成功测试
  • 将工作原型转化为生产软件,运行在故障安全冗余架构上,可以在实际业务(即生产环境)中运行,需要时间、代码重构和对细节的关注
  • 生产代码具有可接受的可维护性水平,并得到合理的评论
  • 文档手册解释了功能、所有特性并便于维护
  • 如果生产软件是国际服务或应用程序,则必须本地化
  • 最终用户(通常是在服务条款协议中所述条件下的客户)使用生产代码
  • 生产软件并不一定意味着可靠的关键任务软件
  • 该软件做得很好,它打算做什么
  • 日志文件提供了对运行时性能和软件可靠性指标和报告的准确描述,这有助于调试和软件可维护性
于 2014-12-30T22:12:27.413 回答
1

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

于 2017-09-26T22:14:03.650 回答
0

简而言之,“目标受众正在使用和使用的生产代码”

于 2009-01-29T07:20:59.090 回答
-1

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

从严格意义上讲,当系统被用作业务或服务操作的一部分时,它就处于生产状态。生产中没有的是开发、测试、QA、演示和登台系统。生产系统并不直接意味着质量。

从发布生命周期的角度来看,“生产”构建是发布给公众或客户的构建。它是pre-alpha、alpha、beta(功能完成、代码完成等)和候选发布之后的阶段。对于无法轻松部署更新的收缩包装产品,进入生产阶段可能意味着一系列测试和错误修复。

替代文字

于 2009-01-29T07:17:14.120 回答