像几乎任何人谁是被编程了一段时间,我熟悉的术语“生产代码”,并有意味着什么模糊的感觉。然而,有人可以提供一个半严格的定义,因为它似乎维基百科和谷歌不能?好像有作为生产什么罪名,如使用由一小群人在UI,文档等方面和开源应用程序,因此不是“正式”内部工具有很多灰色地带完整的功能,合理的缺陷及工作,但缺乏光泽,用户界面和广泛的测试。

有帮助吗?

解决方案

生产意味着什么,你需要可靠地工作,并一致。

无论是构建脚本,或一个面向公众的web服务器。

当别人靠你的代码,特别是人谁也看不明白(即甚至是“聪明”的开发商,但也许不是你的组,但使用你写了一个库),该代码是产品代码。

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

其他提示

当您的代码在生产系统中运行,这意味着它正在使用预期的观众在真实世界的情况。

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

我理解的是,生产代码的定义是所安装的任何代码或在使用活的,非测试床系统上。内部使用到公司的服务器是一个生产系统,如果它是由公司的员工使用的生活系统。这里的要点是公司内部编写的代码可以是产品代码的服务器上运行的代码。

通常,在内部代码看时良好的区别是保持代码的组是否是从使用的代码的组分开。如果组是独立的,赔率是,代码是产品代码。如果运行的业务依赖于代码,那么它肯定是生产代码,即使是开发和维护内部。

EDIT: The short answer: If you are "betting the farm on it", it is "production".

This is a great question--an absolutely critical distinction that routinely gets everyone in trouble due to misunderstandings. The question of what is "production" is a subset of the related question of what is an "environment".

So part of the answer is that "production" is THE "environment" that is most important and is most trusted as THE "real" thing.

So now we must define "environment" (and then revisit "production"). We are still far from a satisfactory answer.

We programmers use the term "environment" constantly to refer to computer systems consisting of hardware that is executing software. That software is the code that we wrote plus software that it depends upon, which was written by others. We write our code and integrate it with the other software, then we typically run the integrated software through an escalating series of tests (unit tests, integration tests, functional tests, acceptance tests, regression tests, etc.), until we finally run the integrated software in the full manner in which it was intended.

Of course, not everything is fully automated. There are usually numerous people involved, and they have manual processes to perform. We programmers look for ways to automate as many of these processes as possible, but there is always a "man/machine boundary" in the systems we work on. Often, there are many such boundaries in any particular case.

On the other hand, there may not be any significant automation at all. For example, we spoke of "production" way back when we had a room full of people performing manual labor which produced a product. So, there doesn't have to be any automation present in our "production" "environment". There is also a middle ground, where the automation involved does not include software, such as in the case of a person running a loom to weave cloth.

Also, there may not be a product, since we have adapted our language of "production" "environment" to include product-less service providers.

Likewise, the testing may not involve software, since we may be testing a non-software-driven machine (e.g., the loom) or even the people (training and evaluation).

Now we have touched on all the crucial elements of an "environment":

  • there is a purpose, an intent, being pursued
  • an intent requires an intender, so there must be a sponsor (a person or group, but not a machine) that specifies the intent
  • that intent is pursued through various processes that are performed by various actors
  • those actors may be people, they may be software executing on hardware, or they may be non-software-driven machines, so there may or may not be automation present

Now we can properly and fully define our original terms.

An environment consists of all the processes and their actors that collaborate to pursue a particular intent on behalf of its sponsor. That means software executing on hardware, that means non-software-driven machines, and that means people performing their various duties. It is the intent that primarily defines an environment, not its processes or its actors.

Furthermore...

If the intent being pursued in a particular environment is the sponsor's ultimate goal, which usually involves producing a product or providing a service in exchange for money, then we refer to that environment as production.

Now we can go a bit further.

If the intent being pursued in an environment is the verification of processes and their actors in preparation for production, we call that a test environment.

We further call it an integration environment if that testing involves the initial joining together of significant individuals or groups of processes and their actors.

If that preparation involves the "programming" of human actors to perform new processes, or the subsequent verification (evaluation), then we call that a training environment.

Armed with these distinctions and definitions, we can now understand several common scenarios.

An environment can be mislabeled with a name that does not match its intent, such as when a training environment is used as test.

An environment can be grossly misused, such as when integration or training is done in production.

An environment can be misrepresented, such as when key processes or actors are left unidentified (e.g., manual reconciliations, or even by ignoring the people altogether).

An environment can be retasked, by repurposing its processes and actors to a new intent. A very successful technique for some organizations is to routinely "flip" several sets of actors (servers hosting software) between production, test, training, and integration upon each release.

In most cases, a single actor (person or hardware) can execute multiple processes which can participate in multiple environments. For example, a single computer server can host software that performs production transactions while also hosting other software that performs test or training functions.

Normally, a single instance of an actor should participate in only one environment at a time. On very rare occasion, a single actor can be shared across environments if the intents are mutually compatible. Most of the time, it is very unwise to attempt such sharing because the intents are not really compatible. A perfect example is running a test process on a server that also supports production processes, resulting in downtime because the test caused the entire server to fail.

Therefore, the intent of an environment must be construed with very wide latitude, to include concepts such as availability, reliability, performance, disaster recovery, accuracy, precision, repeatability, longevity, etc. This means that the actors and processes must often be construed to include things like providing power, cooling, backups, and redundancy.

Finally, note that the situation can get quite complex. For example, a desktop computer (actor) may be tasked by the development team (sponsor) to host their source control (process), which the team relies upon for their primary jobs (production). Nevertheless, the IT staff sees that same desktop computer as simply a developer workstation (development, not production) and treats it with contempt and nonchalance when it develops a hardware problem. But the developers are producing production code, so aren't they also part of production? Perspective matters.

EDIT: Production quality

A solid verification (testing) methodology should take packaged code from development and run it through a series of tests (integration, TQA, functional, regression, acceptance, etc.) until it comes out the other side "stamped" for production use. However, that makes the package production quality, but not actually production. The package only becomes production when a sponsor actually deploys it into an environment with that ultimate level of intent.

However, if your organization merely produces that package (its product) for the consumption of others, then such a release comes as close to production as that organization will experience with respect to that product, so it is common to stretch the term production to apply rather than clarify that it is production quality. In reality, that organization's production environment consists of the actors and processes involved in its development/release efforts that result in that product.

I said it could get quite complex...

Any code that will be used by it's intended userbase would fit into my definition of 'production code'.

Of course, the grey area in that definition would be clearly defining who your userbase is.

G-Man

  • The production software can perform at the necessary workload without disruption or degradation of the service
  • Software has been successfully tested in different production scenarios
  • Transforming working prototype into production software which runs on fail-safe redundant architecture that can work in real business, i.e. production environment, needs time, code refactoring, and attention to details
  • The production code has acceptable level of maintainability and is reasonably well commented
  • The documentation manual explains functionality, all features and facilitates maintenance
  • If the production software is an international service or application, it must be localized
  • Production code is used by end-users, often customers under conditions described in Terms-of-Service Agreement
  • Production software does not necessarily mean reliable mission critical software
  • The software does well, what it was intended to do
  • Log files provide an accurate description of run-time performance and software reliability metrics and reporting which do facilitate debugging and software maintainability

I think the best way to describe it, is as any code that "leads-to" deployment and "follows-up" deployment. Deployment itself is defined as all of the activities that make a software system available for use. If your code is ready to be used by people, in-house or otherwise, then it is production code.

In simple words "Production code which is live and in use by its intended audience"

The term "production code" mixes two different concepts. One is deployment management and the other is release life cycle.

In the strict sense of the word, a system is in production when it is being used as part of business or service operation. What's not in production are development, testing, QA, demo, and staging system. Production system does not immediately imply quality.

From release life cycle's point of view, a "production" build is the build that is released to general public or clients. It is the stage after pre-alpha, alpha, beta, (feature complete, code complete, etc.) and release candidate. For shrink-wrap products that cannot easily deploy updates, reaching the production stage likely implies series of testing and bug fixes.

alt text

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top