Software factory introduction-from msdn

Source: Internet
Author: User
Software factory Introduction

Microsoft Corporation



Expand the scale of Software Development

From the current situation, software development is slow, costly, and prone to errors, and many defective products are often produced, it causes serious problems in terms of availability, reliability, performance, security, and other service quality.

According to Standish Group [sta94], U.S. companies invest about 175,000 software development projects each year, with an investment of about 2,500.
USD million. Only 16% of these projects can be completed as planned within the budget. Another 31% of projects were canceled mainly due to quality problems, with an economic loss of about $81 billion. In addition
On average, 53% of projects exceed the budget by 189%, and the economic loss is about $59 billion. On average, only 42% of the originally planned functions are implemented.

These figures objectively confirm our judgment based on experience that software development is a labor-intensive industry, the human capital it consumes to create every dollar of value exceeds our expectations for a modern industry.

When
However, in addition to these shortcomings, the results of software development clearly bring great value to consumers, as shown in the long-term trend of demand growth. However, this does not mean that the consumer is already very satisfied
The software we provide is the way we provide software. This only shows that they are optimistic about the prospects of the software and are willing to take on huge risks and losses, so as to obtain the benefits of the software. However, just as software
Development outsourcing is becoming increasingly popular, and this is clearly not the best, as it does not seem to drive significant changes in the software industry in terms of software development methods and practices.

Over the past decade, productivity has only been limited, and the most important reason may be the adoption of byte encoding languages, patterns, and flexible methods. Apart from these advances, our software development methods are no different from those we did a decade ago. Our methods and practices have not actually changed much, and the corresponding costs and risks have not changed much.

However
However, this situation will be changed. It is predicted that the overall global demand for software will grow by an order of magnitude in the next decade, as it is pushed by the emerging forces in the global economy (such as the rise of China ).
As well as new application types (such as commercial integration and medical information science) and new platform technologies (such as Web
Services, mobile devices, and smart products.

If the software development capability does not grow correspondingly, the overall software development capability will inevitably fall below the overall demand in ten years. Of course, this will not happen if the market forces are able to operate freely, because inspired software providers will provide enough software to meet this demand for personal benefit.

Back to Top


Face new challenges again

So how can we provide enough software development capabilities? Without too much analysis, we can see that the methods and practices of software development must be significantly changed.

Because the production capacity of the industry depends on the number of qualified developers and the efficiency of developers, the method to improve the production capacity of the industry is, you can also continue to use existing methods and practices to invest more developers, or maintain a considerable number of developers to adopt different methods and practices.

Although the apprenticeship developed over the past decade seems to have successfully increased the number of qualified developers and increased the average level of developers, however, there are at least two reasons to explain that apprenticeship is unlikely to make the production capacity of the software industry meet the expected demand level:

Experience tells us that nothing is better than having some outstandingProgramMore important. Outstanding developers are one thousand times more efficient than poor developers, but the number of poor developers is almost one thousand times that of outstanding developers [boe81].

Brooks [bro95] pointed out that increasing the number of projects will eventually lead to a reduction in marginal revenue. Production capacity will gradually decrease by recruiting and training new developers.

Therefore, the way out should be to change our methods and practices. We must improve the efficiency of developers in various ways.

Back to Top


Innovation curve and model transformation

Work
For an industry, we have to face this situation from the very beginning. The history of software development is a process of struggling with complexity and changes, sometimes making profits and losing money. With the progress of the times, more needs are generated.
Although we have achieved many brilliant achievements in just half a century, the road is not smooth. On the contrary, software development has been moving forward along the famous innovative curve model, as shown in 1 [chr97].

Figure1:Innovation Curve

Code
A continuous innovation lays the foundation for a new technological age. The Development on the new foundation is fast at the beginning, but with the solid and mature Foundation, the development speed gradually slows down. Finally, the base
Infrastructure has lost its ability to continue innovation and reach the peak of development. At the same time, another Discontinuous innovation laid the foundation for the arrival of another new technology era, so the above models were repeated. Kuhn
The above is called the basic mode, and the transformation between them is called the mode change [kuh70]. The pattern change occurs at the moment when the status quo needs to be changed to continue. We are now at such an intersection moment.

Back to Top


Improve Abstraction

In
In history, the transformation of models has successfully improved the abstract level of developers, providing a powerful concept for gaining knowledge in platforms and languages and reusing knowledge. For example, in terms of the Platform
First, it has gone through Terminal/host, Client/Server, personal computing, multi-layer system and enterprise application integration, and then to asynchronous, loosely coupled services. In terms of language, we started from the digital encoding language and experienced compilation.
Language, structured language, and object-oriented language, and then to the byte encoding language and mode. This can be seen as a language-based abstraction. Smith and Stotts
A meaningful summary of this progress [ss02]:

The history of programming is an exercise in architectural abstraction. In each era, Language designers create structures by summing up the lessons learned from the previous generation, and then architecture designers use these structures to create more complex and powerful abstractions.

He
They also pointed out that new abstractions are generally first stored on the platform and then transplanted to the language. Our current situation is that language-based abstraction is far behind platform-based abstraction. In other words, tools are far behind
Platform. We are currently using the latest platform technologies (for example, by using music to write services, we can now automate processes among multiple enterprises located anywhere on this planet ), but we are still
Manually write each application as if this is the preferred method. We start with a small concept (such as loop, string, and integer) to create a large abstract concept (such as insurance claims and securities trading ). We
Work diligently and meticulously, and will be related to millions of smallSource codeFragments and resources are combined to form a huge and complex structure. If the semiconductor industry also adopts a similar approach, they need to manually weld the transistor
To build a huge and complex processor that supports these applications. Instead, they use 2 by assembling a predefined component called an ASIC
To complete the implementation.

Figure 2: ASIC-based design tool 7

Is it hard to say that we cannot use similar methods to automate software development? Of course we can, and we are actually doing this. For example, the database management system uses SQL
Data access is automated, providing advantages such as data integration and independence, making data-driven applications easier to create and maintain. Similarly, the widget framework and WYSIWYG
The editor makes it easier to create and maintain graphical user interfaces and provides advantages such as device independence and visual assembly. By carefully analyzing these practices, we can find a recurring pattern.

After a large number of systems have been developed for a given problem domain, we define a set of reusable abstractions for the domain, and then we develop a set of patterns that define how to use these abstractions.

Then, we develop a runtime (such as a framework or server) to extract the abstract and pattern.Code. In this way, we can create a system in this field by instantiating, adjusting, configuring, and assembling the components defined during runtime.

Then we define a language and create tools (such as editors, compilers, and debuggers) that support the language to automate the assembly process. This helps us to quickly respond to changing requirements, because some implementations have been completed and can be easily modified.

This is Robert and Johnson [clerk 96].
The famous "language framework" model described. A framework can reduce the cost of developing an application by an order of magnitude, but it is very difficult to use only one framework. A Framework defines a typical Architecture
Products (such as applications or subsystems) can be improved and specialized in various ways to meet different requirements. It is no small problem to map the requirements of each product to the framework.
It is often necessary to use the professional skills of architecture designers or senior developers. Capture various requirements by using language expressions, and then generate the framework to complete the code. The language-based tool can automatically complete this process.

Back to Top


Realizing the industrialization of Software Development

In
In other industries, the way to improve production capacity is from manual operation to mechanical production. In the manual operation stage, all products are manufactured by individuals or groups from scratch. In the mechanical production stage, various products are connected.
Reusable components produced by multiple suppliers have been assembled quickly. In this process, many trivial mechanical tasks are automatically completed by machines. These industries standardize the process, design, and packaging,
The product line achieves systematic reuse and shares costs and risks through the supply chain. Currently, some industries can achieve large-scale customization and quickly and economically create various products as needed to satisfy different customers.
.

Back to Top


Can software be industrialized?

People had a heated discussion on the analogy between software and physical objects. Can these industrialization models be applied to the software industry? Isn't the software industry more special than other industries because of its different product nature? Peter Wegner summarized the similarities and differences between them as follows [weg78]:

Soft
In some respects, component products have similarities with tangible products (such as bridges, buildings, and computers) in traditional engineering disciplines. However, there are also some important differences that make software development different. Because the software is a logical Overview
Therefore, the cost is concentrated in the development process rather than in the production process. Because the software does not wear out, its reliability depends on the logic quality (such as correctness and robustness), rather than the physical quality (such as hardness and
Toughness ).

Some discussions compare physical production and software development to "Apple and orange ". The key to clarifying these troubles is to understand the differences between production and development, and the differences between economies of scale and economies of scope.

Is
In order to get a return on investment, we must make full use of reusable components, not just to reclaim development costs, whether directly by reducing costs, or indirectly by reducing risks and shortening the time to enter the market
Or improve the quality. From an investment perspective, reusable components are financial assets. Because the cost of reusable components is usually very high, and it is difficult to achieve profitable reuse
A systematic method is required for reuse. This usually involves identifying a field for developing multiple systems, identifying the recurring problems in the field, developing a set of integrated production assets to solve the problem, and then
Apply these assets to the system development process in this field.

Back to Top


Economies of scale and economies of scope

Systematic reuse can simultaneously produce economies of scale and economies of scope. These two effects are widely known in other industries. Although both products reduce time, reduce costs, and improve product quality by producing multiple products in a centralized manner, they have different ways to produce these advantages.

When multiple identical instances are produced in a centralized manner instead of independently, economies of scale are generated.
. Economies of scale may occur in the production of machine screws and other products, in this production process, you can use machine tools and other production assets to produce multiple identical product instances. Engineers use a resource-intensive process (called
For Development) complete the design and initial instance (called prototype ). Then create more instances (replicas) through another process completed by machines and/or low-cost labor (production) to meet market needs
Yes.

Figure 3 Economies of Scale

Fan Wei economy is achieved through centralized rather than independently producing multiple similar but different designs and prototypes. 4
. For example, in the automobile manufacturing industry, multiple similar but different automobile designs are usually developed through the existing design of combination child parts (such as chassis, car body, internal decoration and transmission device, different styles or models
It is often produced by changing some of the functions in the existing design (such as the engine and decorative level. In other words, you can use the same method, process, tool and material to design multiple similar but different products and make
A similar but different prototype. Similar to commercial buildings, it is rare to see multiple bridges or multiple skyscrapers adopt the same design. However, there is an interesting phenomenon in the commercial architecture field, that is, every successful design usually only
One or two instances are generated, so economies of scale have almost never been realized. In the automobile manufacturing industry, many different instances are usually generated from the successful design. By copying each prototype, economies of scope and economies of scale form an interaction.
Complete, as shown in figure 4.

Figure 4: economies of scope

Of course, there are important differences between software and automobile manufacturing and commercial buildings, but they are often similar.

In markets such as user Desktop products, products such as operating systems and work efficiency applications are replicated to form mass production. The software industry presents economies of scale, just as in the automobile manufacturing industry.

However, in markets such as enterprise user products, commercial applications developed to gain a competitive advantage are rarely able to produce in batch, and the software only shows a range of economic features, just like in commercial construction.

Now we can clearly see the difference between Apple and orange. It is naive to compare production and software development in the physical industry. Whether it is software or physical objects, it is meaningless to seek economies of scale in any type of development. However, we can expect that the industrialization of software development will bring about a range of economic results.

Back to Top


What results will industrialization bring?

False
What will the result be if it can be industrialized in the software industry? Of course, we cannot know exactly before something happens. However, we can follow the development path of the software industry and other industries.
Make reasonable speculation about the industrialization situation. Obviously, software development will never be as simple as the pure mechanization people wish. On the contrary, the key to meeting global needs is not to take the time of outstanding developers
It is wasted on mechanical trivial tasks. We must make every effort to make better use of these rare resources, and do not let them spend time manually constructing the next major platform version or changing market conditions.
As a result, the industry needs to change, resulting in the need to maintain or even replace the final products in just a few months or years.

One way to achieve this is to provide developers with various ways
They can turn their knowledge into assets that can be reused by others. Is this goal far from the future? Some models have demonstrated the effectiveness of reuse of knowledge, although the utilization is not high. The next step is the usage
Language, framework, and tools automatically generate modeled applications to achieve overflight from programming to automation.

Semiconductor Development provides rehearsals for software development after industrialization. This does not mean that software components can be quickly assembled as ASIC
It is a product developed after 20 years of innovation and standardization in the field of encapsulation and interface technology. But on the other hand, software development may not use 20
Year. The advantage of software development is that it only needs to process bits, while the semiconductor industry also needs to bear the extra burden of physical material engineering required for component implementation. At the same time, the inherent short-lived characteristics of BITs are also digital knowledge.
Protection of property rights brings difficulties, as we have seen in the film and music industries.

Back to Top


Conclusion

Ben
This article describes the inability of the software industry to use existing methods and practices to meet the expected needs. Here we only briefly describe many issues, which will undoubtedly lead readers to seek evidence or discuss them in more detail. To get more
For more information, see the software factories: grouping applications with patterns,
Models, frameworks and tools. The authors of this book are Jack greenfield and Keith short.
John Wiley and Sons Publishing House. For more information, visit the http://msdn.microsoft.com/architecture/overview/softwarefactories and http://www.softwarefactories.com/, where variousArticleDescribes the long-term problems that prevent the transition from manual operations to mechanical production, major innovations that help the industry overcome these problems, and software factory methods that integrate major innovations.

Copyright Notice

Copyright: 2004 Jack Greenfield. Part of copyright: 2003 Jack greenfield and Keith short, which have been reactivated from Wiley Publishing Inc. All rights reserved.

References

1.

[Boe81] B Boehm. Software Engineering economics. Prentice Hall PTR, 1981

2.

[Bro95] f Brooks. The Mythical Man-Month.Addison-Wesley, 1995

3.

[Chr97] C Christensen. The Innovator's dilemma, Harvard Business School Press, 1997

4.

[Kuh70] T Kuhn. The structure of scientific revolutions. The University of Chicago Press, 1970

5.

[96]
D Robert TS and R. Johnson. Evolving frameworks: A pattern language
Developing object-oriented frameworks. Proceedings of pattern ages
Of programs, Allerton Park, Illinois, September 1996

6.

[Ss02]
J. Smith and D Stotts. Elemental design patterns-a link
Architecture and object semantics. Proceedings of oopsla 2002

7.

Ben
The figure is generated by using the virtuoso chip editor and Virtuoso XL layout editor, and the cadence is obtained.
Design Systems, Inc. License. All Rights Reserved: 2003 Cadence design systems,
Inc .. All rights reserved. Cadence and kerberoso are registered trademarks of cadence Design Systems, Inc.

8.

[Sta94] The Standish Group. The chaos report. http://www.standishgroup.com/sample_research/PDFpages/chaos1994.pdf

9.

[Weg78]
P Wegner. research directions in software technology. Proceedings of
3rd International Conference on software engineering. 1978

Author Profile

Jack Greenfield is an architecture designer for Microsoft to develop enterprise frameworks and tools. He once served as a rational
He is the principal architect of the practitioner desktop group at Software Corporation.
The founding and chief technology officer of inline Software Corporation. He once developed an enterprise object framework at next, now called Apple
Web object. He is a famous Speaker and writer, and has made great contributions to UML, J2EE and related OMG and JSP specifications. He owns
Bachelor of physics from George Mason University. Contact Jack via jackgr@microsoft.com.

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.