Factory ABC's

Recognising the fact that: many already in the software factory space, many newcomers to the factory space, or just those trying to understand what the hell this software factory jargon is all about - we'd like to offer a simple glossary of common terms  to hopefully put everyone on the same page when discussing factories.

To the Glossary

[I'd especially like to thank my co-authors: Edward Bakker and contributors: Martin Danner for their efforts in this article.]

We are offering two definitions to each term to help suit most people's needs, so depending on the level you wish to understand these terms at, we will endeavour to provide the following clarifications:

  • First definition ('Simple' ) is intended for those who just need a quick understanding, and concrete example of what the term means. (Kind-of in layman's terms).
  • Second definition ('Precise' ) will be more precise in its meaning closer to a text book definition.

Glossary of Software Factory Terms
A Factory

Simple

An installable package (factory template or guidance package) that is installed into the development IDE, that creates a configurable solution to a specific problem, mostly using automated tools and models. i.e. a factory to create a best practice secure ASMX web service.

Precise

A Software Factory is a software product line that configures extensible tools, processes and content using a software factory template based on a software factory schema to automate the development and maintenance of variants of an archetypical product by adapting, assembling and configuring framework-based components.

References

https://www.softwarefactories.com https://msdn.microsoft.com/vstudio/teamsystem/workshop/sf/default.aspx https://en.wikipedia.org/wiki/Software_factory
A Factorette

Simple

A factory, guidance package, or tool that can be used to compose a larger factory.

References

https://en.wikipedia.org/wiki/Factorette
A Factory Schema

Simple

A software factory schema is like a recipe that defines the ingredients, tools and preparation process for a family of software products. i.e. a machine readable file, like XML document, that describes all the individual items like WorkProducts and assets. 

Precise

The software factory schema defines the artefacts (WorkProducts) that must be developed to produce a software product and the assets used to build them. The software factory schema describes the relations between the WorkProducts and they way they can be grouped in viewpoints.

References

What is a Factory Schema?
A Factory Template

  

Simple

Installable guidance package that can be installed in a configurable development environment like Visual Studio.

Precise

An implementation of the Software Factory schema that is used to build a family member of the product line.
A Product Line

Simple

A set of products which are similar in design, created by the same set of tools, based on different configuration. i.e. A secure ASMX web service, and a secure WCF web service, would be the product line of secure web services.

Precise

A Product Line systematically captures knowledge of how to produce the family members, makes it available in the form of reusable components, processes and tools and then applies those assets to produce the family members.
A Product

Simple

Something that is built by a factory, the main output of a factory, a solution, normally to a specific type of problem.

Precise

 A member of the family of software products sharing common features.
A Work Product

Simple

Something tangible that is created by the factory. It can be a whole file, a piece of a file, or a collection of files, or pieces that have a logical relationship. i.e. a project, a generated code file, or a model.

Precise

 Any artefact that is produced or maintained by an activity or related set of activities.
A View Point

Simple

A focused set of activities that create/edit one or more Work Products. A concern (or worry) for a particular Stake Holder. i.e. A Service Specification, or Data Contract Design or Security.

Precise

 A perspective from which a given aspect of a software product can be described, and provides a pattern for producing such a description, defining its scope, purpose and audience, and conventions, languages, and methods used to produce conforming views.  
An Asset

Simple

Something that creates, or edits a work product, normally a tool or any reusable items that can be used as input for a software factory. Can also be a framework, or class library or pattern or documentation. i.e. A code editor, a template, a recipe, a designer.

Precise

An asset is a (technical) tool that is designed to produce or maintain a particular type of work product. The asset might be configurable and is either manually or automatically driven to produce variants of the work products that is based on input collected from an activity.
An Activity

Simple

A process step or unit of work to complete that usually yields (or changes) a Work Product. Normally measurable in some way. i.e. Adding a shape to a diagram, setting a property of a component.

Precise

A unit of work that is defined in the factory to produce or modify a work product. An individual activity might be part of or related to another activity in order to introduce higher level of abstraction. Activities are referenced in viewpoints and use assets to complete their task.
A Stake Holder

Simple

Someone who operated the factory, or gains benefit from it - a factory user. i.e. an architect or solution developer, a tester or designer.

Precise

A person who is affected by the factory. Either because the stakeholder is using the factory or is interested in the end result of the factory, the factory product. A stakeholder is interested in a particular view point of the factory.
A View

Simple

A representation of something at a given time, usually configured or tailored to the specific Stake Holder. i.e. A developer sees a view of the physical files that make up a solution. In Visual Studio, this view is called the 'Solution Explorer'.

Precise

 A description of a software product from a given perspective.
A Model

Simple

 A simplified representation of something more complex, so it's easier to understand, normally (but not always) visually represented. i.e. A white-board diagram of a software solution.

Precise

A model provides a different and most of the time simplified view of a particular subject. Models are used to discuss or describe the subject in more consistent way at a higher level of abstraction.
A Meta-Model

Simple

Description about a model, and the things in the model (its parts), normally shapes in a diagram. i.e. The shapes on the diagram would have certain properties associated to them, those shapes and their properties make up the meta-model.

Precise

 A model that is used to describe the abstract syntax of a modelling language.
A Factory Product Model

Simple

A logical model that describes the factory product, in terms of WorkProducts, in a solution independent way

References

The 'Meta-Model' and its relationship to the 'Factory Schema'
The Factory Meta Schema

Simple

The schema of the Factor Schema. In other words, the model used to create your factory schema from. The thing that describes the relationship between ViewPoints, Activities, WorkProducts etc.

References

What is a Factory Schema?
Meta-anything

Simple

Description about the 'anything'. i.e. Meta-data is: data about the data, for example properties of a document (subject, author, created date etc.).
Problem Domain

Simple

A (usually well-known) well-defined problem that has limited specific scope. This is normally logical, defined in terms well-known to those familiar to the problem space. i.e. Defining a secure web service.

Precise

 A subject area or family of related objects to be simulated or solved.
Solution Domain

Simple

The actual solution to a problem. Normally technology focused, defined in terms of that technology - warts and all. i.e. the programmed C# projects and source code files.

Precise

 The platform and software architectures that are used to solve the problem domain. 
An Abstraction

Simple

Providing a means to simplify a complex problem, and define it in more common well-known terms. i.e. An abstraction of a complex technology solution might be a model describing it.

Precise

 A solution developed in advance to solve a family of related problems.
A Factory User

Simple

The person using a factory to create a product.
A Factory Author

Simple

The person authoring the factory.
A Factory-Factory

Simple

A factory authoring tool (and environment). A tool that creates a factory, (itself being a factory).
Factory Specialization

Simple

To take a general factory and add something unique to create a specialized factory. Opposite of generalization.
Factory Customization

Simple

To tailor a factory toward a specific need, product, organisation etc. Usually results in a new version of the factory, or a one-off variant of a factory.
Factory Context

Simple

Any Stake Holder or party that interacts with the factory.

Note: Some of the 'Precise' definitions in this glossary are based on or variants of the definitions in the Software Factories Book.

[Note: This reference will hopefully end up in more usable form (wiki) on a community site which we are in the process of planning for the wider community, until then, we will make a start on it here. Please comment here if you have something to add/change and we will do that for you.]