Applying the Personal Software Process (PSP)sm with Ada Mr. David Silberberg U. S. Department of Defense/Q574 9800 Savage Road Suite 6256 Fort Meade, MD 20755-6000 301-688-5931 dsilber@romulus.ncsc.mil 1. ABSTRACT 2. INTRODUCTION TO THE PSP This report documents my successful experience applying the Personal Software Process to Ada software development. Using the PSP data generated during the completion of my PSP Instructor training at the Software Engineering Institute (SEI), this report shows examples of these improvements (e.g., improved size and time estimating accuracy, reduction of the amount of total project time spent in the compile and test phases, removal of design defects earlier, improved defect removal yield, etc.). I completed this training with Ada95 using the GNAT Ada95 compiler (version 3.04) on a Unix system. This experience report also provides a brief introduction to the PSP and compares the PSP with the Capability Maturity Model for Software (CMM). It analyzes the process and product data collected during my PSP Instructor training to highlight how Ada in conjunction with the PSP helped me to improve the quality of my software products. The current practice of software engineering is more of a craft than a structured engineering discipline. There are known and effective quality management principles that can be applied to software. In addition, there are known and effective quality methods that can be used by software practitioners. The PSP introduces these methods and motivates the software practitioners to use them [1]. The PSP is described in [1]. The goal of the PSP is to make software practitioners aware of the processes they use to do their work, and the performance of those processes. Software practitioners set personal goals, define the methods to be used, measure their work, analyze the results, and adjust their methods to meet their goals. It is a strategy for professional self-development and enhanced effectiveness. Early data suggest improvement factors of two to three times are possible with the PSP approach [2]. Data collected on over 200 students and software practitioners that have completed PSP training show substantial improvement in the quality of the programs they produced (e.g., average test defects injected per KLOC dropped from 80 to 10). These and other improvements were observed for all levels of experience (from a few years to over twenty years) [5]. The PSP is based on the following principles: 1) the quality of the software system is governed by the quality of its worst components, 2) the quality of a software component is governed by the individual who developed it and their knowledge, discipline, and commitment, and 3) software practitioners should know their own performance, measure, track, and analyze their work, and learn from their performance variations and incorporate these lessons into their personal practices. In addition, a stable PSP allows a software practitioner to estimate and plan his work, meet his commitments and resist unreasonable commitment pressures, understand his ability, and identify areas in need of improvement. A stable PSP also provides a software practitioner with a proven basis for developing and practicing industrial-strength personal disciplines, a discipline that shows him how to improve his personal performance, and the data to continually improve the productivity, quality, and predictability of his work. 1.1 Keywords Ada, Personal Software Processsm, PSPsm, Capability Maturity Modelsm, CMMsm Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. SIGAda '98 Washington, D.C., USA © ACM 1-58113-033-3/98/0011...$5.00 Personal Software Process, PSP, and CMM are service marks of Carnegie Mellon University The objectives of the PSP course are 1) introduce software practitioners to a process-based approach to software development, and 2) show software practitioners how to measure and analyze their personal software process, use process data to improve their personal performance, and apply these methods to their other tasks. The course strategy is to provide the opportunity for practitioners to learn, to use, and to see the benefits of working in a disciplined, process-driven environment. The belief is that in order for practitioners to accept and to use these methods and techniques, they must first believe that these methods and techniques are effective. To believe that a technique or method is effective, a practitioner must use them. The PSP course provides the practitioner with that opportunity [1]. 2.1 The CMMsm and the PSPsm The PSP has a maturity framework much like that of the CMM. The CMM was developed by the SEI with the help of leading software groups and characterizes the most effective large-scale software practices. The PSP applies the CMM to the work of an individual. The CMM and its Key Process Areas (KPAs) are shown in Figure 2.1.1. The CMM provides the framework for effective process management. It assumes that the software practitioners will follow disciplined personal methods. The PSP provides the framework for disciplined individual work and it assumes effective process management. The KPAs in bold italics and noted with an * are at least partially addressed by the PSP [1]. products. It uses a software practitioner’s current design and development methods to create a baseline. It guides the software practitioner to gather data on his work (e.g., time spent by phase, defects injected and removed by phase, etc.). The PSP also provides feedback to the software practitioner via its summary reports. PSP0 establishes a measured performance baseline. This baseline includes some basic measurements and a reporting format. It also provides a consistent basis for measuring progress and a defined foundation on which to improve. PSP0 is usually the process currently used by the practitioner, but enhanced to provide measurements. It includes the design, code, compile, and test phases. During the PSP training, one programming assignment is completed using PSP0. PSP0 is enhanced to PSP0.1 by adding a coding standard, size measurement, and the process improvement proposal (PIP). The PIP provides a structured way to record problems, experiences, and improvement suggestions. During the PSP training, two programming assignments are completed using PSP0.1. PSP Overview - 2 PSP3 PSP3 Cyclic Cyclicdevelopment development Advanced PSP PSP2 PSP2 Code reviews Code reviews Designreviews reviews Design PSP1 PSP1 Sizeestimating estimating Size Test report Test report * PSP Key Process Areas Level 5 - Optimizing Process change management* Technology change management* Defect prevention* Level 4 - Managed Quality management* Quantitative process management* Level 3 - Defined Peer reviews* Intergroup coordination Software product engineering* Integrated software management* Training Program Software process definition* Software process focus* Level 2 - Repeatable Software configuration management Software quality assurance Software subcontract management Software project tracking & oversight* Software project planning* Requirements management Level 1 - Initial Figure 2.1.1: CMM and the PSP 2.2 A PSP Overview The PSP progression is shown in Figure 2.2.1. The PSP provides a defined personal process for developing software PSP0 PSP0 PSP2.1 Design templates PSP1.1 Task planning Schedule planning PSP0.1 Current process process Time recording recording Time Defect recording Defect recording Defect Defecttype typestandard standard Introduction to PSP Coding standard Size measurement Process improvement proposal (PIP) Figure 2.2.1: PSP Overview Planning steps are added to PSP0 to create PSP1. Size, resource, and schedule plans are made with PSP1. The initial increment (PSP1) adds size and resource estimation and a test report. During the PSP training, one programming assignment is completed using PSP1. Task and schedule planning are introduced in PSP1.1. Explicit, documented plans for work help the practitioner understand the relationship between program size and development time, make commitments that can be met, produce an orderly plan for doing the work and a framework for determining the status of the work. Once a practitioner knows his own performance rate, he can plan his work more accurately, make commitments more realistically, and meet those commitments more consistently. During the PSP training, two programming assignments are completed using PSP1.1. To enable a software practitioner to manage his defects he must know how many he makes. PSP2 adds review techniques to PSP1 to help the software practitioner find defects early when they are least expensive to fix. Defect 3.2 Size Estimating Error For size estimates the PSP objective is balanced estimates (Figure 3.2.1). That is about as many over as under. The software practitioner should also attempt to reduce estimating bias by following a consistent estimating pattern and not worry about prior errors. Wide variations are expected and remember, the initial estimates were made without any historical data. My accuracy should have improved with PSP’s PROBE method (i.e., students typically end up in the +/- 10% range [2]), but I was making my estimates using an Object LOC Table for C++ since I had insufficient data available to create a personal Object LOC table for Ada. Actual Size 600 500 400 LOC and yield management are practiced with PSP2 to show the software practitioner how to deal realistically and objectively with program defects that result from his errors. This is accomplished by gathering and analyzing the defects found in compile and test for the earlier programs. This data is then used by the software practitioner to establish tailored review checklists and make his own process quality assessments. During the PSP training, one programming assignment is completed using PSP2. The design process is addressed with PSP2.1. The PSP does not tell a software practitioner how to design but how to complete a design. PSP2.1 establishes design completeness criteria and examines various design verification and consistency techniques. This same approach can be used with many process phases, including requirements specification, documentation development, and test development. Phase completion criteria are important because without them, a software practitioner cannot do an effective review of the work completed in that phase. During the PSP training, two programming assignments are completed using PSP2.1. PSP3 scales up the PSP methods to larger projects. The PSP3 strategy is to subdivide a larger program into PSP2sized pieces. The first build is a base module or kernel that is enhanced in iterative steps. The cyclic PSP3 process effectively scales up to large programs only if each successive increment is high quality. If this is the case, the software practitioner concentrates on verifying the quality for the latest increment without worrying about the earlier ones. During the PSP training, one programming assignment is completed using PSP3 [1]. 300 200 100 0 1 2 3 4 5 6 7 8 9 10 Program Number Figure 3.1.1: Program Size 3. ANALYZING PSP DATA Size Estimating Error 250 200 150 % I will now use the data from my PSP Instructor training to illustrate some of the increases in quality and productivity that result from using the PSP. I will analyze the time spent developing the ten programs, the defect and quality data for these programs, and the quality of the process used to develop these programs. 100 50 3.1 Program Size For program size, the PSP objective is improved accuracy (Figure 3.1.1). Program size is measured as Lines of Code (LOC). LOC is defined in the PSP as all added or modified LOC. It is measured using an automated LOC counter developed as one of the PSP programming assignments along with a LOC counting standard and a coding standard. Estimates vary widely and neither extreme is good or bad. Typical causes of the wide variation include over engineering the product or the Object LOC Table not providing accurate data for the estimates. The estimates are compared to the actuals to see the improvements (Section 3.2). 0 -50 1 2 3 4 5 6 7 8 9 10 Program Number Figure 3.2.1: Size Estimating Error 3.3 Actual Development Time For actual development time, the PSP objective is improved accuracy (Figure 3.3.1). The increased quality of the process and increased quality of the data collected will have an effect on development time. A wide variation is expected with neither extreme being good or bad. Some causes of the wide variations include over engineering the solution or a lack of experience with the development environment. Again the estimates are compared to the actuals to see the improvements (Section 3.4). based on my defect data. 3.6 Test Time 3.4 Time Estimating Error For time estimates the PSP objective is improved accuracy of the estimates (Figure 3.4.1). Wide variations are expected. The initial estimates were made without any historical data. My accuracy should have improved with PSP’s PROBE method (i.e., students typically end up in the +/- 10% range [2]), but I had to use the averaging method instead of linear regression since my data was not well correlated. For test time the PSP objective is to reduce the amount of total project time spent in the test phase (Figure 3.6.1). This is another early indicator of process quality since defects take time to find and fix and these defects are more costly to remove. A dramatic decrease can be seen again at Program 7A, when design and code reviews with tailored checklists were introduced. % Compile Time Actual Development Time 25 Hours % 20 15 10 5 9 8 7 6 5 4 3 2 1 0 1 2 3 4 0 1 2 3 4 5 6 7 8 9 5 6 7 8 9 10 8 9 10 Program Number 10 Figure 3.5.1: Compile Time Program Number Figure 3.3.1: Actual Development Time % Test Time Time Estimating Error 25 20 250 % % 200 15 150 10 100 5 50 0 1 0 -50 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 Program Number 10 Figure 3.6.1: Test Time Program Number Figure 3.4.1: Time Estimating Error 3.5 Compile Time For compile time the PSP objective is to reduce the amount of total project time spent in the compile phase (Figure 3.5.1). This is an early indicator of process quality since it is really the first independent check of the software product. A dramatic decrease occurred with the introduction of the design and code reviews with tailored checklists at Program 7A. This really amazed me since I used “code reviews” on Programs 3A through 6A, but without the tailored checklists 3.7 Total Defects For defects the PSP objective is to reduce the number of defects injected into a software product (Figure 3.7.1). A defect is counted every time a program change is made. Since defect removal is expensive regardless of the method used, it is most desirable to reduce the total number injected into a product. Total defects/KLOC is calculated: 1000*(Total defects removed)/Total new & Changed LOC). PSP data shows that even experienced software practitioners inject about 100 defects per 1000 lines of code. Typically, about 25 of these defects find their way into labeled as code defects. I think Ada, with its separate specifications helped me to keep this number low. Defects Removed in Compile 120 Defects/KLOC integration and systems test, at a cost of from 10 to 40 programmer hours each. Each of these defects will cost thousands of dollars to find, to repair, and to verify. Allow a defect to make its way to the field and the repair and fix costs quickly rise [1]. Wide variations are expected since the defects per KLOC measure is used (i.e., same number of defects but larger programs). Software practitioners need to periodically review the source of their defects (e.g., analyze their PSP defect log data) and act on defect prevention. A dramatic decrease can be seen again with the introduction of the design and code reviews with tailored checklists at Program 7A. 100 80 60 40 20 0 1 Total 3 4 5 6 7 8 9 10 Program Number Figure 3.8.1: Defects Removed In Compile 160 140 120 100 80 Compile vs. Test Defects 60 50 40 20 0 1 2 3 4 5 6 7 8 9 10 Program Number Figure 3.7.1: Total Defects Compile Defects/KLOC Defects/KLOC 2 Defects 40 30 20 10 0 3.8 Defects Removed In Compile 3.9 Compile Versus Test Defects Look at the trend in Figure 3.9.1. By analyzing the defect data for the programs written, we see that many compile defects implies many test defects. 3.10 Design Defects Look at the trend in Figure 3.10.1. The design defects increased with the design reviews, but this increase is good. It is less costly to remove these defects at this early phase of the project. There may have been more though that were 50 Test 100 150 Defects/KLOC Figure 3.9.1: Compile Versus Test Defects Defects Injected in Design 20 Defects/KLOC For defects the PSP objective is to reduce as a percentage of the total defects removed, the number of defects removed in the compile phase (Figure 3.8.1). This is an indicator of process quality. The initial decline may be due to increased awareness and more care taken in the earlier phases. This should decrease over time as more quality activities are introduced earlier in the software development process (i.e., design and code reviews). This is also an indicator of the effectiveness of the design and code review checklists. For example Programs 3A through 6A used “code reviews” without the tailored checklists. 0 15 10 5 0 1 2 3 4 5 6 7 8 9 10 Program Number Figure 3.10.1: Design Defects 3.11 Code Defects Look at the trend in Figure 3.11.1. Code defects may increase with effective code reviews, but they should decrease over time. The graph in Figure 3.11.1 shows the coding process is stable. The reduction in dispersion is a sign of improving process quality. Total Cost of Quality 3.12 Total Cost of Quality (COQ) The cost of quality has three components. One component is failure costs. These are the costs of diagnosing a failure, making necessary repairs, and getting back into operation. In the PSP, this is the total time spent in the compile and test phases. Another component is appraisal costs. These are the costs of evaluating the product to determine its quality level (e.g., costs of running test cases, costs of compiling when there are no defects, etc.). In the PSP, this is the total time spent in the design and code review phases. The third component is prevention costs. These are the costs associated with identifying the causes of the defects and the actions taken to prevent them in the future. These costs are not addressed in the PSP since they involve cross project activities. Total Cost of Quality % 35 30 25 20 15 10 5 0 1 2 3 4 5 6 7 8 9 10 9 10 Program Number Figure 3.12.1: Total Cost of Quality (COQ) Defects Removed in Test Defects/KLOC 50 Defects Injected in Code Defects/KLOC 120 100 80 60 40 30 20 10 0 1 40 2 3 4 5 6 7 8 Program Number 20 Figure 3.13.1: Defects Removed In Test 0 1 2 3 4 5 6 7 8 9 10 Program Number Figure 3.11.1: Code Defects 3.14 Appraisal Cost Of Quality Look at the trend in Figure 3.12.1. It is in the 20% area which indicates that it is high and stable. Adding the design and code reviews did not change it much because review time was shifted out of the time previously spent in the compile and test phases. But now errors are found earlier in the process which implies the quality of the finished software product is increasing. Look at the trend for appraisal costs as a percentage of the cost of quality (Figure 3.14.1). It should grow early with the addition of the early review steps and peak at Program 7A. If the defects removed in test (Figure 3.13.1) is compared with the appraisal cost of quality (Figure 3.14.1) a clear association between high appraisal costs and low test defects and a high association between high appraisal costs and improved product quality can be seen. 3.13 Defects Removed In Test 3.15 Appraisal To Failure Ratio (A/FR) For defects the PSP objective is to reduce, as a percentage of the total defects removed, the number of defects removed in the test phase (Figure 3.13.1). This is an indicator of process quality. This should decrease over time as more quality activities are introduced earlier in the software development process (i.e., design and code reviews). This is also an indicator of the effectiveness of the design and code review checklists. Does this mean Crosby is right when he claims increased quality is free [4]? The appraisal to failure ratio is the ratio of appraisal costs to failure costs and indicates the degree to which the process attempts to eliminate defects prior to the compile and test phases. Adding the design and code reviews certainly raised my A/FR quickly, as seen in Figure 3.15.1. I was trying to achieve the PSP goal of 100% yield, that is finding all the software product defects before entering the compile phase. Software practitioners should look to obtain an upper limit on their A/FR. The PSP suggests a value of two. This means the software practitioner spends about twice as much time in the design and code review phases as in the compile and test phases [1]. Defect Removal Yield Apppraisal Cost of Quality 100 Yield % Appraisal Cost % 80 30 25 20 15 60 40 20 10 0 5 1 2 3 0 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 10 Program Number 10 Figure 3.16.1: Defect Removal Yield Program Number Figure 3.14.1 Test Defects vs. A/FR Appraisal To Failure Ratio Defects/KLOC 50 20 A/FR 15 10 40 30 20 10 0 5 0 0 5 10 15 20 Appraisal to Failure Ratio (A/FR) 1 2 3 4 5 6 7 8 9 10 Figure 3.17.1: Test Defects Vs. A/FR Program Number Figure 3.15.1: Appraisal to Failure Ratio (A/FR) 3.16 Defect Removal Yield Look at the trend in Figure 3.16.1. The PSP objective for the defect removal yield or yield is 100%. That means all defects are found and removed before the compile phase and the test phase. The design and code reviews with tailored checklists helped me achieve an average yield of 84% on my last four programs. 3.17 Test Defects Versus A/FR Look at the trend in Figure 3.17.1. Larger A/FRs should yield fewer test defects. Figure 3.17.1 shows that the number of test defects declines quite sharply with increases in my A/FR. Therefore, a high A/FR value is clearly associated with low test defects and thus is a useful indicator of a quality software process. Figure 3.17.1 also shows the relationship between process quality and product quality. 3.18 Productivity Look at the productivity trends in Figure 3.18.1. Productivity was not significantly affected by adding all those process steps (i.e., planning, design reviews, code reviews, postmortem, measurement, analysis). The shape in Figure 3.18.1 is very similar to my actual program size graph (Figure 3.1.1). 3.19 Yield Versus A/FR Look at the trend in Figure 3.19.1. Large A/FRs should produce better yields. The PSP goal is to maintain the high yields while reducing the A/FR. 3.20 Productivity Versus Yield Look at the trend in Figure 3.20.1. My productivity versus yield remained relatively flat. Does this also mean that increased quality is really free? While there is no clear relationship in my data, it appears that higher yields are associated with higher productivity. Productivity LOC/Hour 40 35 30 25 20 15 10 5 0 1 2 3 4 5 6 7 8 9 10 Program Number Figure 3.18.1: Productivity Yield vs. A/FR 100 Yield % 80 60 During planning the software practitioner estimates development time at first and then estimates size to estimate the development time. This data is entered on the project plan summary form. During development the software practitioner develops the software product following these phases (design, code, compile, and test) and tracks the time spent in each phase and the defects injected and removed in each phase. The product is designed using design methods during the design phase. This design is implemented during the code phase. The developed code is compiled until defect free during the compile phase. The compiled product is then tested until it is defect free during the test phase. The time spent in each phase is recorded on the time recording log. The defects found and removed are recorded on the defect recording log. This includes the type of defect, the phases injected and removed, and the find and fix time. A defect type standard is used to define categories for the defects. During postmortem the project plan summary form is completed. The actual time spent on the program and the defects found and injected in each phase are recorded on the plan summary form. This form keeps the data accessible so that it can be used on future projects. The PSP0 Process Flow 40 Requirements 20 PSP0 Process Planning 0 0 5 10 15 20 Development Process Guide Scripts Appraisal to Failure Ratio (A/FR) Figure 3.19.1: Yield Versus A/FR Design Code Compile Time and Defect Logs Test Plan Summary Postmortem Productivity vs. Yield Finished Product Productivity (LOC/Hour) 40 Project and Process Data Summary Report Figure 4.1: The PSP Flow 35 30 25 20 15 10 5 0 0 20 40 60 80 100 Yield % In the PSP, forms and templates are used to help the software practitioner gather data to improve his performance (e.g., planning and estimating accuracy, product quality, productivity, etc.). If the software practitioner does not collect accurate and precise data, then the data will not help the software practitioner improve his performance. To obtain useful data, the software practitioner must follow the process and be consistent, stick to his plan, and avoid unnecessary change [1]. Figure 3.20.1: Productivity Versus Yield 4.1 Project Plan Summary 4. COLLECTING PSP DATA Figure 4.1 depicts the PSP flow and the basic elements of the PSP. The PSP has process scripts for planning, development, and postmortem. These scripts guide the software practitioner through the process. To track and improve his performance from project to project, a software practitioner needs current and historical data in a convenient, retrievable form. A software practitioner needs to know his planning history, what his actuals were, his performance to date, and the status of his current project. The project plan summary (Figure 4.1.1) holds project data in summary form (i.e., planned and actual data, to date history, time in phase, defects injected, and defects removed). Table C10 PSP0 Project Plan Summary after development Student Program Instructor Student 1 Standard Deviation Humphrey Time in Phase (min.) Planning Design Code Compile Test Postmortem Total Date Program # Language Plan Actual To Date 7 44 97 67 111 30 356 195 Defects Injected Planning Design Code Compile Test Total Development Actual Defects Removed Actual To Date % 7 44 97 67 111 30 356 To Date 0 4 13 2 5 24 Planning Design Code Compile Test Total Development After Development 1/18/94 1A C++ 2.0 12.4 27.2 18.8 31.2 8.4 100.0 0 0 0 16 8 24 0 4.4 Defect Recording Log To improve his performance and the quality of his work, a software practitioner must keep accurate records of all defects. The software practitioner needs to know what defects he made, when they were introduced, when they were found, and how much effort was spent correcting them. The defect log (Figure 4.4.1) holds data on each defect as it is found and corrected. To Date % 0 4 13 2 5 24 To Date Figure 4.3.1 shows the defect type standard used with the PSP exercises. 0 16.7 54.2 8.3 20.8 100.0 To Date % 0 0 0 16 8 24 0 0 0 0 66.7 33.3 100.0 Table C20 Defect Type Standard DEFECT TYPES: Type Number Figure 4.1.1: Project Plan Summary 10 20 30 40 50 60 70 80 Type Name Description Documentation Syntax Build, package Assignment Interface Checking Data Function comments, messages spelling, punctuation, typos, instruction formats change management, library, version control declaration, duplicate names, scope, limits procedure calls and references, I/O, user formats error messages, inadequate checks structure, content logic, pointers, loops, recursion, computation, function defects configuration, timing, memory design, compile, test, or other support system problems 90 System 100 Environment 4.2 Time Recording Log To improve the accuracy and efficiency of his process, the software practitioner needs to measure effort. The time recording log (Figure 4.2.1) records time spent in each phase. The time recording log is created in the PSP planning phase. To complete this form the software practitioner needs to know when he started and stopped, the actual minutes he worked, the length of any interruptions, and the process phase he was in, not the activity he was performing. Accuracy is important so the software practitioner should make the log entries as he works. Figure 4.3.1: Defect Type Standard Table C18 Defect Types 10 Documentation 20 Syntax 30 Build, Package 90 System Student Instructor Number 1/18 Description: 1 Date Number 2 Fix Time 1 Type 20 Inject Code Remove compile Fix Time 1 Fix Defect Type 20 Inject Code Remove compile Fix Time 1 Fix Defect Number Type Inject Remove 4 20 compile compile put missing ) in wrong position in expressions Fix Time 1 Fix Defect 3 Date Number Fix Defect Description: 5 40 code assigned pointer incorrectly Date Table C16 Time Recording Log Date Start Stop 1/18 9:00 9:09 Interruption Time 2 Date Program # Delta Time 7 Description: 1/18/94 1A Phase Comments Plan estimated effort...took phone call 1/18/94 1A Remove Compile Description: Date missing ) Number Date Type Inject Inject Remove Fix Time compile 10 Remove Fix Time 12 Remove compile Fix Time 1 Fix Defect 6 Number Type Inject 8 40 code bad structure delcaration on linked list Remove compile Fix Time 8 Fix Defect Number Remove Fix Time Fix Defect 50 code missing argument in function call Number 7 Type 20 Inject compile Fix Defect left out ; when correcting missing argument 9 Description: Type compile Description: Description: Fix Defect Missing ; Description: Date 30 Missing include file Number 3 6 Date Type Date Program # Inject Code Description: Student 1 Humphrey 100 Student 1 Humphrey Date Date Student Instructor Defect Recording Log 60 Checking 70 Data 80 Function 40 Assignment 50 Interface Environment Type Inject 80 code compile bad logic on loop discovered while working on defect #8 1 Figure 4.4.1: Defect Recording Log 5. CONCLUSIONS Figure 4.2.1: Time Recording Log 4.3 Defect Type Standard The defect type standard provides a general set of defect categories. A software practitioner should start with simple type definitions until he has data to guide his changes. The results of all others that have completed the PSP course are described in [2]. The PSP has been shown to substantially improve the estimating and planning ability of software practitioners while significantly reducing the defects in their software products. While the results in [2] are not broken down by programming language, I believe using Ada in conjunction with the PSP not only helped me reduce the amount of time I spent in the compile and test phases but also helped me increase the quality of my software products (i.e., reduce the number of defects I found in the test phase). I believe Ada’s separate specifications helped me reduce the number of design errors generated. Using these Ada specifications in the design phase also enabled me to have a product to review in the design review phase and helped me achieve a high defect removal yield. 6. REFERENCES [1] Humphrey, W. S., A Discipline for Software Engineering, (Reading, MA: Addison-Wesley, 1995). [2] Hayes, W. and Over, J, “The Personal Software Processsm (PSPsm): An Empirical Study of the Impact of PSP on Individual Engineers,” Software Engineering Institute Technical Report, CMU/SEI-97-TR-001 (December 1997). [3] Paulk, M., Curtis, W., and Chrisis, M., “Capability Maturity Model for Software, Version 1.1,” Software Engineering Institute Technical Report, CMU/SEI-93-TR024 (February 1993). [4] Crosby, P., Quality Is Free, The Art of Making Quality Certain (New York, NY: Mentor, New American Library, 1979). [5] Humphrey, W. S., “Using a Defined and Measured Personal Software Process,” IEEE Software, May 1996, pages 77-88. [6] Ferguson, P., Humphrey, W., Khajenoori, S., Macke, S., and Matvya, A., “Results of Applying the Personal Software Process,” IEEE Computer, May 1997, pages 24-31.