|
|
||||||||||||||||||||
| Home > Software Quality News > How to build better software using lean manufacturing, continuous quality improvement practices | |
| Software Quality News: |
|
||
Creating high-quality software is an interesting mix of art and science. At least 20 years ago innovative leaders like Brad Cox and Tom Love (inventors of Objective C and co-founders of StepStone and Productivity Products International) began describing a "software industrial revolution" in which the process of creating software would move from an art done manually by skilled craftsmen to an "industrialized" process that allowed high-quality systems to be built from well-tested reusable parts. This dream remains largely unfulfilled. In 2007, Accenture CTO Don Rippert described "Industrialized Software Development" as one of eight major trends that Accenture has identified as likely to have major impact on IT over the next five years1. The Industrial Revolution in the world of "hard" manufacturing started in the early 1800s and was booming along in the early 1900s when Henry Ford tapped its principles to build the first mass-produced automobile. Amazingly, the world of software has yet to fully adopt the level of automation enjoyed by those who create complex, highly reliable hard goods like televisions, refrigerators and even the powerful computer chips that rely on programming to function. Does the realm of large-scale, highly automated manufacturing have anything to offer to sophisticated software developers? In a word, yes. This article reaches into a specific area of modern manufacturing called lean manufacturing to find quality improvement processes that, when combined with modern software technology, can add tremendous value to the creation of software.
Traditionally, approaches for improving software code quality rely on manual processes to locate and correct software defects. These techniques include manual code reviews, manually developed test cases and similar approaches. (Note that in this article we are addressing code quality and do not focus extensively on requirements, design and other topics that also affect the overall success of a software system.) These manual techniques are time-consuming as well as tedious and, in spite of good intentions, are often not well implemented. What is needed is a continuous, collaborative, highly automated method of locating and correcting software defects early in the software development process. This method must be effective, consistent and above all, it must not add to the existing workload of the developer. Evolution of software methodologies Alistair Cockburn, one of the authors of the Agile Development Manifesto and an expert in software development methodologies states2, "Software engineering is remarkably similar to manufacturing once we notice decisions as the product that moves through a network of people. There is a very real parallel between design and manufacturing." Improving software quality with continuous automated quality improvement and continuous automated code analysis The basic tenets of CAQI are as follows:
It's pretty clear that the software development processes of many companies don't implement these tenets and can't meet the needs of developing quality software code in today's fast-paced world. Sketchy requirements are the norm. Programming teams have limited and often non-measurable quality objectives. Lack of communication causes bottlenecks and inefficiencies in the process of software development as noted by Cockburn. Use of good software design practices is haphazard. The product is handcrafted by trained specialists and automation is minimal. The code moves through the construction process (think waterfall development model) with various specialists bolting on their contributions.
Finally, it ends up in the Quality Assurance (QA) department where another group of specialists attempts to find all the errors, problems and places where the software doesn't meet the specification or will break in the hands of the end user. When issues are found, they are "thrown over the wall" to the developer for correction before the software is returned to the QA process and eventually shipped to the customer. Having never encountered a software developer, manager or organization that didn't voice a desire to build quality software, it's surprising, that such good intentions haven't led to better quality when the rubber meets the road (or the software meets the customer). Outdated methods of software development are still being used in many organizations even after decades of intellectual and practical development of better, faster, higher-quality software development processes have been developed by institutions like Carnegie Mellon's Software Engineering Institute (SEI), commercial companies and others. Enter lean manufacturing -- improving product quality The Toyota Production System (TPS) used in Toyota manufacturing plants is an example of a very successful implementation of lean manufacturing. Some of the main principles used to reduce waste and improve quality in the Toyota Production System include the following:
How CAQI applies to TPS principles
Building quality into software Software defects drastically increase the cost of developing software. A study by Watts Humphrey, Carnegie Mellon, found, "On average, professional coders make 100 to 150 errors in every thousand lines of code they write." With an estimated 2.35 million software developers in the U.S. who are writing an average of 10 lines of code per day, this can result in 233,750 errors generated in an eight-hour day. A study by Barry Boehm and Victor Basili4 found that the cost of correcting a software defect was approximately $139 during the software requirements phase, $455 in the design phase, $977 during the coding phase, $7,136 during testing, and $14,102 in the maintenance phase after the software has been released. In addition, there is the incalculable cost to the customer due to software delays, software that does not work as intended and software bugs, with corresponding negative impact on the image and credibility of the organization that created the software. Costs of Correcting Defects
Source: B Boehm and V Basili, "Software Defect Reduction Top 10 List," IEEE Computer, January 2001 Boehm observed in 1987, "Finding and fixing a software problem after delivery is often 100 times more expensive than finding and fixing it during the design and requirements phase." It is imperative that quality be incorporated into all phases of software development and should be automated as much as possible to save time, locate defects early in the process and prevent rework. Developing quality software using CAQI principles
The CAQI process begins with having clearly defined standards that are used for code development. Advanced software tools are now available that include industry-accepted best practices, powerful code quality metrics and assessment capabilities that automatically analyze the quality of code under development and offer corrective action if necessary and desired by the developer. Such tools help an organization automate the process of building quality into software development starting with the earliest phases of code implementation. A major goal is to minimize the impact on the developer and to use automation to free him to focus on meeting the functional requirements of the software. The process of improving code quality is enabled in the code development and testing phases using C3A features that include coding rules, audit tracking, software metrics, automated test case generation and code coverage tools. Cost-effective software tools have been developed that help organizations automate and implement CAQI and C3A to make it a part of their software development process. Companies can use these automated software tools to build better quality software, reduce software development costs and keep customers happy. Developing quality software using C3A tools Software tools incorporating C3A have evolved to be more than just a "canned set" of rules. They also let developers create new coding rules or modify existing rules so that they meet the specific needs of the organization. Rules can be grouped into specific sets and distributed to developers whether they are in the next cubicle or across an ocean. C3A tools help organizations build quality into the software using standards that meet organization needs to produce consistent results and increase the return on investment in software development. An additional benefit of using C3A tools is that it teaches developers to write better code. Rule suggestions presented while coding help the developer to learn to fix coding errors and become familiar with best-practice coding standards of the organization. Universally, developers are very smart people; a C3A tool will have to tell them only once or twice how to do something better before they begin to regularly integrate that thought into their ongoing workflow. C3A tools incorporate the TPS principle of Hoshin (goals with targets) and Jidoka (build quality during production) by setting goals and providing feedback to help reduce defects. Both the providers and the consumers of software benefit because of improved code quality and consistent enforcement of the organization's best practices, code standards and guidelines. Improve quality using C3A in testing and deployment In C3A, unit testing by programmers is viewed as a critical part of the process and has been automated as much as possible to help locate software defects before they get to the QA department. Today's sophisticated software tools can even help automate the task of building tests (i.e. JUnit tests) to locate software code errors during the development phase rather than requiring teams of QA testers to find problems after the code is written. In addition, C3A -compliant tools can measure code coverage to evaluate the effectiveness of test code at exercising all possible paths through the code. Automating software testing benefits everyone -- developers, IT managers, QA teams and customers. Developers can work on new product functionality rather than doing mundane tasks such as writing unit tests. IT managers and developers gain valuable information that can help in troubleshooting and fixing software defects early in the software lifecycle. The organization benefits from lower QA costs and better software defect detection rates. And the customers benefit from a flawless user experience. Summary CAQI and C3A principles and tools can be successfully applied to the software development process to help organizations find software defects early in the development cycle, build quality into the software, reduce costs and free developers for business critical work. In addition, companies who invest in CAQI and C3A software tools will quickly recoup their initial investment and see an increase ROI that is directly attributable to cost savings from software development time and reduced project delays. And the best part is that automation allows all this to be done without adding substantially to the already-heavy workload of the typical developer. ----------------------------------------- Resources: 2. Published in CrossTalk, April 2007. "What Engineering Has in Common with Manufacturing and Why It Matters," Alistair Cockburn. 3. Published in WebSphere Magazine, November 2004. "Fire Your QA Department and Increase the Quality of Your Software," Mike Taylor, president and CEO of Instantiations Inc. 4. Article by Barry Boehm (University of Southern California) and Victor R. Basili (University of Maryland), "Software Defect Reduction Top 10 List, IEEE Computer, January 2001.
'); // --> |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| About Us | Contact Us | For Advertisers | For Business Partners | Site Index | RSS |
| |
|
|||||||