



Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
The importance of studying software development, discussing common problems such as expense, frequent late delivery, and software failures. It also covers reasons for failure, including poor specification and management, and the impact of software failures in our increasingly digital world. Students in computer science will find this information valuable for their object-oriented programming ii course.
Typology: Study notes
1 / 5
This page cannot be seen from the preview
Don't miss anything!




To understand Software development problems Why software projects fail Impact of software failures How to develop better software
Field that creates and maintains software applications by applying technologies and practices from computer science, project management, engineering, application domains, and other fields.
Expensive Cost per line of code growing (unlike hardware) Frequently late Schedule overruns More expensive than projected Cost overruns Difficult to use & understand Missing features Too slow
Began Jan 2001 Officially scrapped Jan 2005 LA Times (Jan 13, 2005) “A new FBI computer program designed to help agents share information to ward off terrorist attacks may have to be scrapped… Sources said about $100 million would be essentially lost if the FBI were to scrap the software…”
Poor specification 800-page requirement document Repeated changes in specification New requirements continually added Poor management Repeated management turnover Micromanagement of software developers FBI personnel with no software experience
Impact of Software Failures Increasing
Software in cars, appliances Business transactions moving online
Failures can propagate through internet Internet worms Failures can be exploited by others Viruses Spyware
Software Contributes to Real Failures
Stealth fighter costing $300 million each 1.7 millions lines of code for plane’s avionics
Software Contributes to Real Failures
DefenseNews.com (March 5, 2007) “When a dozen Raptors en route from Hawaii to Japan crossed the International Date Line for the first time, the jets’ Global Positioning System navigation avionics went haywire, forcing the pilots to turn around.” GPS software unable to handle change in longitude from W179.99 o^ to E180o Raptor pilots visually followed refueling tankers back to Hawaii
Software Contributes to Real Failures
Lockheed-Martin provided software fix in 48 hours For “operational security reasons” the USAF declined to elaborate, saying only that the F-22A “experienced a software problem involving the navigation system”
DefenseNews.com (March 5, 2007) “When the plane was in developmental stages … pilots flying the Raptor would often have to reboot the onboard computers that controlled the jet’s high-end functions”
Other Famous Software Failures
Wrong location for C break statement
Overflow converting 64-bit float to 16-bit integer
Missing conversion of English units to metric units
Why Is Software So Difficult?
Software becoming much larger Millions of line of code Hundreds of developers Many more interacting pieces
Software stays in use longer Features & requirements change Data sets increase Can outlast its creators
Program Design
Break software into integrated set of components that work together to solve problem specification
Methods for decomposing problem How components work together
Algorithms and Data Structures
Select algorithms and data structures to implement each component
Functionality Provides desired abilities Efficiency Provides desired performance Correctness Provides desired results
Algorithms and Data Structures
Implement list as array or linked list
Coding and Debugging
Write actual code and ensure code works
Choosing programming language Functional design Fortran, BASIC, Pascal, C Object-oriented design Smalltalk, C++, Java Using language features Exceptions, streams, threads
Testing and Verification
Demonstrate software correctly match specification
Program verification Formal proof of correctness Difficult / impossible for large programs Empirical testing Verify using test cases Unit tests, integration tests, alpha / beta tests Used in majority of cases in practice
Documentation and Support
Provide information needed by users and technical maintenance
User documentation Help users understand how to use software Technical documentation Help coders understand how to modify, maintain software
Maintenance
Keep software working over time
Fix errors Improve features Meet changing specification Add new functionality