Software Engineering Chapter 3 CPSC 110 - Pascal Brent M. Dingle Texas A&M University Software Engineering Robustness of a program Iterative Enhancement Testing and Debugging – types of errors Software Life Cycle Robustness In general a robust program is a program that does not fail due to unexpected or unlikely input. In general a robust program will consider all forms and types of input – including input that is entered incorrectly by the user. It will guarantee that any assumptions it had to make about the input are indeed true. How this is accomplished is dependant on the programmer, the problem and ‘other’ things. Iterative Enhancement Iterative Enhancement is the process of first designing a simple program and then adding features and refinements as deemed necessary. Testing and Debugging This is perhaps THE most important part of programming. If a program is NOT tested how do you know it was actually programmed correctly? Even the best algorithms must be explained to the computer correctly. Testing Testing a program means running it and trying to find errors in it. It is best to use as many forms of testing as possible. It is best to have as many people as possible test the program – and the program’s writers are NOT very good testers because they already know what the program is supposed to do. Debugging Debugging is the removing of errors (bugs) from a program. There are several ‘types’ of errors you will find: syntax errors runtime errors logical errors Syntax Errors Syntax errors are violations of the syntax (grammar) rules of the programming language. These are the ONLY type of errors that the compiler will detect. Runtime Errors Runtime errors occur when the program is running. Most runtime errors involve numeric calculations. For example: Because a computer is finite you can increment a number too far – this results in an overflow error. In old video games you could ‘flip’ the score back to zero. Other runtime errors are: division by zero taking the square root of a negative number etc. Do NOT confuse these with logical errors ! Some say runtime errors are caused by logical errors – but it is more often a failure in robustness. Logical Errors Logical errors are mistakes in the algorithm itself. This means that the program compiles AND runs, but produces an incorrect result. You will NOT receive any error from the computer concerning these types of errors. Often these errors involve using less than (<) when you meant to use greater than(>) or something similar. But every now and then, they are caused by simply using an incorrect algorithm entirely. Software Life Cycle – in general There are several different descriptions of the software life cycle found throughout computer science. For this class we will use the one presented in the book. If you would like to see others, do some research on it. =) Software Life Cycle – 6 Phases Analysis and task specification. Design of the software. Implementation (coding). Testing. Maintenance and evolution of the system. Obsolescence. Analysis Phase During this phase, many questions are answered in particular the question: WHAT must the software do? Here it must be determined what the software is expected to do by the person paying for the development and by the expected users. Usually specifications are set in this phase – or rather the software’s requirements. Design Phase This phase answers the question: HOW must the software do (whatever)? and the (whatever) was determined in the Analysis phase. In this phase algorithms will be selected or created as needed. The (program and data) structure of the software should also be determined here. Implementation (coding) Phase Once the algorithms are determined, they will be coded (programmed into the computer). Sometimes (often) this phase will lead back to the design phase as unforeseen problems in the design are encountered. Testing Phase Testing is often broken down into small pieces so that each part of a piece of software is tested at first. Once each small part is tested then larger parts are tested and eventually the final product will be tested (all this is theoretical of course =) Testing is sometimes incorporated into the Design and/or the Implementation Phase and you will bounce back and forth as debugging takes place. Maintenance Phase This phase begins immediately after the program is ‘released’ for use. Inevitably more bugs are found as time goes on and more needs will arise, so the software will need to be maintained – to fix previously unknown bugs, to modify the code to meet new needs, to fix new bugs introduced by the maintenance process itself and so on. Obsolescence Phase This phase is entered when a piece of software is seen to no longer have any value. This does not always mean the software is removed completely from use. It means that the maintenance phase will no longer occur and that using an obsolete piece of software is ‘at your own risk.’ This phase often occurs when a company changes operating systems or computer systems or when technology simply advances beyond the software and better software is available. End Software Engineering