What does `Artifacts` actually mean in Unified Process?
I read a book recently on Design patterns: I came across the word Artifacts in 开发者_如何学Ceach pages many times! What are they actually? Where it should be used?
In UP, artifacts are really important and they play a major role in Object Oriented Analysis . . . .
The term artifact
(or artefact
) seems to have been popularized around the time that Booch, Rumbaugh and Jacobsen (the 3 amigos) described the Rational Unified Process.
The word Artifact in RUP software engineering was a generic term to refer to any 'deliverable' which could be produced by any 'role' in the software development lifecycle, including:
- Documents, such as Project Plan, Requirements Document, Specifications etc
- A Model generated during design, usually one of the UML available diagrams, e.g. a Class Diagram, or ERD
- Code artifacts, including source files, binary outputs, and test or support code.
Artifacts could be brought into Software Configuration Management (identified, versioned, change could be managed, etc).
The term artifact also crops up in business process modelling, usually referring to a physical or electronic document produced by a process, e.g. a claim form, an EDI document, or a report output.
Nowadays, the word artifact
might be regarded in the same light as pretentious management speak, and the term is usually too vague and generic to be used frequently by the actual software development team, e.g. you'll get blank stares if you use terminology such as:
"I've finished checking in the artifact"
"Please could you write an artifact for our next test case"
i.e. You'll likely want to use more specific terminology at the coal face of software development!
They're usaully referring to something you create, usually as a side effect, to help you accomplish something. Perhaps a diagram, a design document,a GUI prototype, http://en.wikipedia.org/wiki/Artifact_(software_development) has more insight.
(Note, In many software tools, an artifact have a much more narrow meaning, meaning a file/library/executable that's produced when you build/compile something)
Usually, in programming current programming vernacular, "Artifacts" refers to the things that are left over after a build process. In .NET, these are the DLL's and EXE's that are generated by a build.
The definition given by @nonnb is good. When the word was originally used, as he says by the three amigos, I believe it was the word artefact rather than artifact. This is the English version rather than the American version, but does contain a nuance that the American version does not. An artefact is, like an artifact, something produced in the process of developing something man made. The nuance is that it is a function of the process adopted, rather than an inherent part, by definition, of the final product. For example, the point of software development is to produce a working software system with appropriate documentation. These are the desired final outcomes (artifacts) of the software development process, but the project plan, versions, models,etc are all artefacts of the process. Not strictly necessary, and can be viewed as extraneous to the final product.
This nuance can be seen in the third definition of artefact, from the Free Dictionary:
- (Life Sciences & Allied Applications / Biology) Cytology a structure seen in tissue after death, fixation, staining, etc., that is not normally present in the living tissue [from Latin phrase arte factum, from ars skill + facere to make]
While advice to use more specific terminology at the coal face of technology is appropriate, it is still a very useful term to refer to all the outputs, whether final or not, from system and software development.
Artificial artifacts are created in order to describe a system , solution or state of a enterprise. Many developers now a days, prefer the term software architecture to software design to denote all artifacts that results from design activities!
精彩评论