就像几乎所有已经编程了一段时间的人一样,我对“生产代码”这个术语很熟悉,并且对它的含义有一个模糊的理解。但是,有人可以提供一个半严格的定义吗,因为维基百科和谷歌似乎不能?似乎在生产中存在很多灰色区域,例如一小群人使用的内部工具,因此在 UI、文档等方面没有“正式化”,以及开源应用程序是功能完整,无缺陷且工作正常,但缺乏润色、UI 和广泛的测试。
9 回答
当您的代码在生产系统上运行时,这意味着它正在被目标受众在现实世界中使用。
然而,生产代码并不一定意味着健壮、可靠或稳定的代码。 Daily WTF在这方面提供了大量证据。
生产意味着您需要可靠、一致地工作的任何东西。
无论是构建脚本,还是面向公众的 Web 服务器。
当其他人依赖您的代码时,尤其是那些可能不理解它的人(即即使是“聪明的”开发人员,但可能不在您的团队中,但使用您编写的库),该代码就是生产代码。
这是生产,因为当生产代码失败时“工作停止”和“金钱损失”。
据我了解,生产代码是在实时、非测试平台系统上安装或使用的任何代码。如果公司内部使用的服务器是公司员工使用的实时系统,那么它就是生产系统。这里的重点是,在编写代码的公司内部的服务器上运行的代码可以是生产代码。
通常,在查看内部代码时,一个很好的区别是维护代码的组是否与使用代码的组分开。如果这些组是分开的,则代码很可能是生产代码。如果运行业务依赖于代码,那么它肯定是生产代码,即使它是内部开发和维护的。
编辑:简短的回答:如果你“把农场赌在上面”,那就是“生产”。
这是一个很好的问题——一个绝对关键的区别,经常因为误解而让每个人都陷入困境。什么是“生产”的问题是什么是“环境”的相关问题的一个子集。
所以部分答案是,“生产”是最重要的“环境”,也是 最值得信赖的“真实”事物。
所以现在我们必须定义“环境”(然后重新访问“生产”)。 我们离满意的答案还很远。
我们程序员经常使用术语“环境”来指代由执行软件的硬件组成的计算机系统。该软件是我们编写的代码以及它所依赖的软件,这些软件是由其他人编写的。我们编写代码并将其与其他软件集成,然后我们通常通过一系列升级的测试(单元测试、集成测试、功能测试、验收测试、回归测试等)运行集成软件,直到我们最终运行以预期的完整方式集成软件。
当然,并非一切都是完全自动化的。通常涉及很多人,并且他们有手动流程要执行。我们程序员寻找使这些过程尽可能多的自动化的方法,但在我们工作的系统中总是存在“人/机边界”。通常,在任何特定情况下都有许多这样的界限。
另一方面,可能根本没有任何显着的自动化。例如,当我们有一个房间里挤满了生产产品的手工劳动的人时,我们谈到了“生产” 。因此,我们的“生产”“环境”中不必存在任何自动化。还有一个中间地带,其中涉及的自动化不包括软件,例如在一个人运行织布机织布的情况下。
此外,可能没有产品,因为我们已经调整了我们的“生产”“环境”语言以包括无产品服务提供商。
同样,测试可能不涉及软件,因为我们可能正在测试非软件驱动的机器(例如织布机)甚至人(培训和评估)。
现在我们已经触及了“环境”的所有关键要素:
- 有一个目的,一个
intent
,正在追求 - an
intent
需要一个意向者,因此必须有一个sponsor
(个人或团体,但不是机器)来指定intent
- 这是通过各种执行的各种
intent
追求的processes
actors
- 这些
actors
可能是人,可能是在硬件上执行的软件,也可能是非软件驱动的机器,因此可能存在也可能不存在自动化
现在我们可以正确且完整地定义我们的原始术语。
一个
environment
由所有代表其合作追求特定事物的processes
人和他们组成。这意味着软件在硬件上执行,这意味着非软件驱动的机器,这意味着人们执行他们的各种职责。它是主要定义 a 的,而不是它的或它的。actors
intent
sponsor
intent
environment
processes
actors
此外...
如果
intent
某个特定的追求environment
是sponsor's
最终目标,通常涉及生产aproduct
或提供aservice
以换取金钱,那么我们将其environment
称为production
。
现在我们可以走得更远一点。
如果
intent
在an中追求的environment
是对a的验证processes
和actors
准备production
,我们称之为a 。test
environment
我们进一步将其称为测试是否涉及重要个人或团体及其.
integration
environment
processes
actors
如果该准备工作涉及人类“编程”
actors
以执行 newprocesses
或随后的验证(评估),那么我们将其称为 a 。training
environment
有了这些区别和定义,我们现在可以理解几种常见的场景。
Anenvironment
可能被错误地标记为与其不匹配的名称intent
,例如当training
环境用作时test
。
Anenvironment
可能会被严重误用,例如 whenintegration
或training
is done in production
。
Anenvironment
可能会被歪曲,例如当 keyprocesses
或未actors
识别时(例如,手动核对,甚至完全忽略人员)。
可以environment
通过将其processes
和重新actors
分配给新的 来重新分配任务intent
。对于某些组织来说,一项非常成功的技术是在每个版本之间、、、 和之间定期“翻转”几组actors
(服务器托管软件) 。production
test
training
integration
在大多数情况下,单个actor
(人或硬件)可以执行多个processes
可以参与多个environments
. 例如,单个计算机服务器可以托管执行production
交易的软件,同时还托管其他执行test
或training
功能的软件。
通常,一个实例actor
应该一次只参与environment
一个。在极少数情况下,如果相互兼容,则actor
可以共享单个。大多数时候,尝试这样的共享是非常不明智的,因为它们并不真正兼容。一个完美的例子是在同样支持的服务器上运行,导致停机,因为这导致整个服务器出现故障。environments
intents
intents
test
process
production
processes
test
因此,intent
必须environment
以非常宽的范围来解释,以包括可用性、可靠性、性能、灾难恢复、准确性、精确度、可重复性、寿命等概念。这意味着actors
和processes
必须经常被解释为包括诸如提供电源、冷却、备份和冗余。
最后,请注意,情况可能会变得相当复杂。例如,开发actor
团队sponsor
(尽管如此,IT 人员仍将同一台台式计算机视为开发人员工作站(不是),并在它出现硬件问题时以轻蔑和冷漠的态度对待它。但是开发人员正在生成代码,所以他们不也是其中的一部分吗?观点很重要。process
production
development
production
production
production
编辑:生产质量
一个可靠的验证(testing
)方法应该从打包的代码中获取development
并运行它通过一系列tests
(集成、TQA、功能、回归、验收等),直到它出现在另一端“标记”以供production
使用。然而,这使得包装质量,但实际上并非如此。仅当 a将其实际部署到具有最终级别的.production
production
production
sponsor
environment
intent
但是,如果您的组织仅生产该软件包(其)以供其他人使用,那么此类发布与该组织将在该方面经历的product
一样接近,因此通常将术语延伸以适用而不是澄清这是质量。实际上,该组织的环境由.production
product
production
production
production
actors
processes
product
我说它可能会变得相当复杂......
其预期用户群将使用的任何代码都符合我对“生产代码”的定义。
当然,该定义中的灰色区域将清楚地定义您的用户群是谁。
G人
- 生产软件可以在必要的工作负载下执行,而不会中断或降级服务
- 软件已在不同生产场景中成功测试
- 将工作原型转化为生产软件,运行在故障安全冗余架构上,可以在实际业务(即生产环境)中运行,需要时间、代码重构和对细节的关注
- 生产代码具有可接受的可维护性水平,并得到合理的评论
- 文档手册解释了功能、所有特性并便于维护
- 如果生产软件是国际服务或应用程序,则必须本地化
- 最终用户(通常是在服务条款协议中所述条件下的客户)使用生产代码
- 生产软件并不一定意味着可靠的关键任务软件
- 该软件做得很好,它打算做什么
- 日志文件提供了对运行时性能和软件可靠性指标和报告的准确描述,这有助于调试和软件可维护性
我认为描述它的最佳方式是任何“导致”部署和“后续”部署的代码。部署本身被定义为使软件系统可供使用的所有活动。如果您的代码已准备好供人们在内部或其他地方使用,那么它就是生产代码。
简而言之,“目标受众正在使用和使用的生产代码”
术语“生产代码”混合了两个不同的概念。一是部署管理,二是发布生命周期。
从严格意义上讲,当系统被用作业务或服务操作的一部分时,它就处于生产状态。生产中没有的是开发、测试、QA、演示和登台系统。生产系统并不直接意味着质量。
从发布生命周期的角度来看,“生产”构建是发布给公众或客户的构建。它是pre-alpha、alpha、beta(功能完成、代码完成等)和候选发布之后的阶段。对于无法轻松部署更新的收缩包装产品,进入生产阶段可能意味着一系列测试和错误修复。