Software Factories consist of specialized tools, processes, and other assets, such as patterns, architectures, frameworks, templates, requirements, test cases, and deployment topologies; that encapsulate the business and technical knowledge of specific problem domains.
Instead of taking a generic, one-size-fits-all approach, Software Factories use custom collections of DSLs to provide sets of abstractions customized to meet the needs of specific families of systems like ecommerce, financial arbitrage, or home banking applications. With Software Factories, models are used not only for analysis and design, but to support many varied types of computation across the entire software life cycle—even at run time. This is a fundamental principle of Software Factories, and also of Microsoft's Dynamic Systems Initiative (DSI), which implements and complements the Software Factories Initiative.
A Software Factory defines a tailored methodology for a specific family of systems using a graph of viewpoints. Each viewpoint defines some aspect of the life cycle for members of the system family, such as requirements capture, database design, or service contract definition. The factory associates reusable assets with each viewpoint, and delivers them in the context of that viewpoint to the team's development members of the system family, eliminating the need to search for applicable assets, enabling validation, and supporting manual and automatic guidance enactment.
Software Factories automate the packaging and delivery of the reusable assets, including models and model-driven tools, other types of tools, such as wizards, templates and utilities, development processes, implementation components, such as class libraries, frameworks and services, and content assets, such as patterns, style sheets, help files, configuration files, and documentation.
Software Factories are not in any way, shape, or form intended to turn developers into menial laborers. Software Factories will instead make developers more productive, by automating rote and menial tasks, and by helping them work at higher levels of abstraction. Programmable tools supplied by factories will enable developers to spend more time thinking about how to solve problems, and less time doing all the housekeeping work required to create, build, and deploy their solutions.
Adpoted from
Visual Studio 2005 Team System Modeling Strategy and FAQ.