Introduction to the Program Development Life Cycle (PDLC) Source: Computers in your Future © 2002 by Bryan Pfaffenberger At the dawn of the modern computer era, no notion of managing the software development process existed. Programs were written for well-defined purposes, such as calculating missile trajectories. If the program didn’t work, the programmer corrected it, so this approach came to be known as code-and-fix (or “cut-an-run,” as detractors put it). When businesses began using computers for more-complex purposes, problems appeared. Often, it turned out that programmers didn’t really understand what managers wanted the program to do, and correcting problems turned into an expensive, time-consuming nightmare. Other problems appeared, too: programmers didn’t document their programs well (if at all), and some developed idiosyncratic programming styles so that they could assure their continued employment, since no one else could figure out what their code did! These early programs were almost impossible to debug and maintain (especially if the original programmer had left the company). To address these, problems, the program development life cycle was introduced in the 1970s, and is still in widespread use today. Program Development Life Cycle (A part of SDLC’s implementation phase and provides an organized plan for breaking down the task of program development into manageable chunks, each of which must be successfully completed before moving on to the next phase). Defining the problem (The system analyst defines the program specifications) o Program Specifications The Input Data The processing that should occur What the output should look like How the user interface should look Designing the program (Specifies the components that make the program work) o Identify the Main Routine – the program’s major activity o Break down the main routine various components into smaller subroutines (modules) Control Structures Sequence control structure Selection control structure Repetition control structure o Developing the Algorithm o Developing design tools Structure (hierarchy) charts Flowchart or pseudocode Coding the program (Translating the algorithm into specific program language instructions) Testing and debugging the program (Eliminating all errors – visible and hidden. Some errors, however, will surface only when the system is put into use.) Formalizing the solution (Documenting the program both internally and externally) o Internal Documentation (usually through comments as part of the program) o External Documentation Description of files that the program needs to work with Layouts of output that the program produces Algorithm Design Tools Instruction Manual Overview of the program’s functionality Tutorials for beginning users In-depth explanations of major program features Reference documentation of all program commands Thorough description of the error messages generated by the program. Implementing and maintaining the program (The programming team fixes program errors that users discover) o Discovering program errors that weren’t caught in the testing phase o Periodically evaluating by asking whether the program is fulfilling its objectives that may lead to 1 modifications to update the program, add features for the user, or a decision to abandon the current system and develop a new one. Program Development Life Cycle (An outline of each of the steps used to build software applications.) Source: Visual Basic 6 Introductory Concepts and Techniques by Shelly, Cashman, Repede & Mick 1. Analyze the problem. a. Precisely define the problem to be solved b. Write the program specifications – descriptions of the program’s inputs, processing, outputs, and user interface. 2. Design the program. a. Develop a detailed logic plan using a tool such as pseudocode, flowcharts, object structure diagrams, or event diagrams to group the program’s activities into modules. b. Devise a method of solution or algorithm for each module. c. Test the solution algorithms. 3. Code the program. a. Translate the design into an application using a programming language or application development tool by creating a user interface and writing code b. Include internal documentation – comments and remarks within the code that explain the purpose of code statements. 4. Test and debug the program. a. Test the program, finding and correcting errors (debugging) until it is error free and contains enough safeguards to ensure desired results. 5. Formalize the solution. a. Review and, if necessary, revise internal documentation b. Formalize and complete end-user (external) documentation 6. Maintain the program. a. Provide education and support to end users b. Correct any unanticipated errors that emerge and identify user-requested modifications(enhancements) c. Once errors or enhancement are identified, the program development life cycle begins again in Step 1. Program Development Cycle Source: An Introduction to Programming Using VB 6.0 Update 4 th Edition © 2004, by David I Scheider 1. Analyze: Define the problem. Be sure you understand what the program should do – that is, what the output should be. Have a clear idea of what data (or input) are given and the relationship between the input and the desired output. 2. Design: Plan the solution to the problem. Develop the algorithm (a logical sequence of precise steps that solve the problem). Every detail, including obvious steps, should appear in the algorithm. Translate the algorithm into a logic plan using any of the popular methods – flowcharts, pseudocode, top-down charts. These design tools help the programmer break a problem into a sequence of small tasks the computer can perform to solve the problem. Planning also involves using representative data to test the logic of the algorithm by hand to ensure that it is correct. 3. Choose the interface: Select the objects (text boxes, command buttons etc.) Determine how the input will be obtained and how the output will be displayed. Then create objects to receive the input and display the output. Also, create appropriate command buttons and menus to allow the user to control the program. 4. Code: Translate the algorithm/flowchart/pseudocode into a programming language. During this stage, the program is written in a particular language (e.g., Visual Basic) and entered into the computer. The programmer/coder uses the algorithm/flowchart/pseudocode devised in Step 2 along with a knowledge of the programming language, say, Visual Basic. 5. Test and debug. Locate and remove any errors in the program. As the program is typed, Visual Basic points out certain types of program errors. Other types will detected by Visual Basic when the program is executed; however, many errors due to typing mistakes, flaws in the algorithm, or incorrect usages of the Visual Basic language rules can be uncovered and corrected only by careful detective work. An example of such an error would be using addition when multiplication was the proper operation. 6. Complete the documentation: Organize all the material that describes the program. 2 Documentation is intended to allow another person, or the programmer at a later date, to understand the program. Internal documentation consists of statements in the program that are not executed, but point out the purposes of various parts of the program. Documentation might also consist of a detailed description of what the program does and how to use the program (for instance, what type of input is expected). For commercial programs, documentation includes an instruction manual and on-line help. Other types of documentation are the flowchart, pseudocode, and top-down chart that were used to construct the program. Although documentation is listed as the last step in the program development cycle, it should take place as the program is being coded. Program Development Cycle I. Identify, specify, or determine the Problem. II. Analyze the Problem. 1. Determine the data/info to be produced (output) as a solution of the problem. Variables required to represent the output should also be defined as part of this step. 2. Determine the data (called inputs) necessary to produce the outputs. As in Step a, variables required to represent the input should be defined. 3. Develop an algorithm for obtaining the outputs from the inputs in a finite number of steps. Algorithm. An organized sequence of operations for solving a problem in a finite number of steps. In the case of numerical problems, the algorithm consists of the sequence of calculations necessary to obtain the desired outputs, but in the case of non-numerical problems, the algorithm may include various text and graphics manipulation operations along with numerical operations. The main purpose of this step (Step II) is to make sure that you thoroughly understand the problem. Remember: Any misconceptions in your problem analysis will be carried over into your program. You can't expect a computer to make up for muddled analysis. As the old saying goes: Garbage In = Garbage Out (GIGO) III. Outline the Program Formulate the pseudocode, flowchart, structure chart, or other designing tools based on the algorithm. Pseudocode. A collection of instructions, normally, a mixture of a natural language (usu., English) and a computer programming language (e.g., C Language) that reveal or detail what the program is to be doing. Flowchart. A chart that shows the path or flow of data through a program or an info-handling system and the operations on the data at significant points along the path. Structure Chart. A chart that exhibits/expresses the modules or smaller problems and how they are related to each other. Or, simply the vertical slice through the entire problem or system. IV. Implement the Program 1. Code the Program. Write the source code of the program by translating the design tool (e.g., pseudocode) developed in the preceding step (Step III) into the equivalent statements of the language (e.g., C Language) to be used. 2. Test and debug the Program. Test the operation of the program to track down programming errors (bugs). 3. Document the Program. Include comments which describe the various sections of the program - that is, aside from the External Documentation. Documentation. A set of instructions shipped with a program or a piece of hardware. It serves as supporting papers on the use, operations, layout or diagram, and requirements of the program or a piece of hardware. Technical Documentation - used by programmers and systems analysts to update or modify the program. ♠ Internal Documentation - accomplished by using program comments. 3 ♠ External Documentation - includes flowcharts, decision table, pseudocode, and structure/layout chart that depict input and output program descriptions, and other materials that describe the functions and operations of the program. User Documentation describes how to use the program in non-technical terms. It is like an owner's manual for a car or an appliance. Basic Control Structures (logical constructs that specify how instructions in a program are to be executed) Sequence – instructions are designed to be executed (performed by the computer) in the order they are written (i.e., one after another). This control structure provides the building block for computer programs. It is used to show a single action or one action followed in order (sequentially) by another. Actions can inputs, processes, or outputs. o Example Go to the phone Dial the pizza place Order the pizza Hang up Selection (conditional, branch, or decision) – the program branches off to different instructions depending on whether a condition is met; or, one of several blocks of program code is executed based on a test for some condition. It is used to tell the program which action to take, based on a certain condition. When a condition is evaluated, its result is either true or false. If the result is true, one action is performed; if the result is false, a different action is performed. o Example Open your wallet If you have enough money, THEN Go to the phone. o Dial the pizza place. o Order the pizza. o Hang up. ELSE Forget the whole thing. Repetition (looping or iteration) – the program repeats the same instructions over and over. It is used when a set of actions is to be performed repeatedly. o Example DO gobble down pizza WHILE there is still pizza. Or DO gobble down pizza UNTIL none remains. Unconditional Branch – the programs jumps from one place to another. Structured programming forbids this structure. Some Program Flowcharting Symbols Symbol Name Meaning Flowline Used to connect symbols and indicate the flow of logic. Terminal Used to represent the beginning (Start), the end (End), or a point of interruption or delay in a program. Used for input and output operations, such as reading and printing. Or, represents I/O function, which makes data available for processing (input) or displaying (output) of processed information. The data to be read or printed are described inside. Input/Output Processing Used for arithmetic and data-manipulation operations. The instructions are listed inside the symbol. Or, represents the process of executing a defined 4 Decision Connector operation or group of operations that results in a change in value, form, or location of information. Also functions as the default symbol when no other symbol is available. Used for any logic or comparison operations. Unlike the input/output and processing symbols, which have one entry and one exit flowline, the decision symbol has one entry and two exit paths. The path chosen depends on whether the answer to a question is “yes” or “no.” Or, represents a decision that determines which of a number of alternative paths is to be followed. Used to join different flowlines. Or, represents any entry from, or exit to, another part of the flowchart. Off-page Connector Used to indicate that the flowchart continues to a second/next page. Pre-defined Process Used to represent a group of statements that perform one processing task. Or, represents a named process consisting of one or more operations or program steps that are specified elsewhere. ----- Annotation Used to provide additional info about another flowchart symbol. Or, represents the addition of descriptive info, comments, or explanatory notes as clarification. The vertical line land broken line may be placed on the left, or on the right. Example Problem: Suppose you are asked to determine the number of stamps to place on an envelop with the rule or policy that one stamp will be used for every five sheets of paper. 1. Problem Analysis a. Output Requirements Description Number of Stamps Variable to be Used Stamps Data Type Integer Variable to be Used Sheets Data Type Integer b. Input Requirements Description Number of Sheets of Paper c. Processing Requirements Compute Stamps = Sheets / 5 Determine the rounded up value of Stamps. 2. Program Design Algorithm a. Request or enter number of sheets of paper. (input) b. Compute number of stamps by dividing the number of sheets by 5. (processing) c. Round the numbers of stamps up to the next highest whole number. (processing) d. Display the number of stamps. (output) 5 Pseudocode Program: Determine the number of stamps for a letter Read or Input Sheets Set the Stamps to Sheets / 5 ( or Compute Stamps = Sheets/5) Round Stamps up to the next whole number Display or print Stamps Program Flowchart Start Input Sheets Compute Stamps Round up Stamps Display Stamps Stop Hierarchy Chart Postage Stamp Program Read Sheets Calculate Stamps Set Stamps = Sheets / 5 Display Stamps Round up Stamps 6 3. Choosing the Interface Form Layout Properties Table Object Form Frame/GroupBox Label TextBox Label TextBox CommandButton/Button CommandButton/Button CommandButton/Button CommandButton/Button Properties Name Caption/Text BackColor Name Caption/Text Enabled Name Caption/Text Name Text Alignment Name Caption/Text Alignment Name Text Alignment Locked Name Caption Name Caption/Text Enabled Name Caption/Text Enabled Name Caption Setting frmStamps Postage Stamps (Choose your own) fraSheetsStamps Sheets and Stamps False lblSheets Number of Sheets txtSheets (Blank) Right Justify lblStamps Number of Stamps Right Justify txtSheets (Blank) Right Justify True cmdOn (or btnOn) &On cmdCompute (or btnCompute) &Compute False cmdClear (or btnClear) C&lear False cmdQuit(or btnQuit) &Quit 7 4. Coding the Program Code 1: In Visual Basic 6.0 Private Sub cmdOn_Click() If UCase(cmdOn.Caption) = "&ON" Then fraSheetsAndStamps.Enabled = True cmdOn.Caption = "&Off" cmdClear.Enabled = True Else fraSheetsAndStamps.Enabled = True cmdOn.Caption = "&On" cmdClear.Enabled = False cmdCompute.Enabled = False End If End Sub Private Sub cmdClear_Click() txtSheets.Text = Empty txtStamps.Text = Empty End Sub Private Sub cmdCompute_Click() If Val(txtSheets.Text) Mod 5 > 0 Then txtStamps.Text = Fix(Val(txtSheets.Text) / 5) + 1 Else txtStamps.Text = Val(txtSheets.Text) / 5 End If End Sub Private Sub cmdQuit_Click() MsgBox "Hasta que me vuelva a ejecutar...", vbInformation, "Gracias!" End End Sub Private Sub txtSheets_LostFocus() If Val(txtSheets.Text) <= 0 Then MsgBox "Ooops! Not a valid value. Try again...", vbCritical, "Invalid Entry" txtSheets.Text = Empty txtSheets.SetFocus Else cmdCompute.Enabled = True End If End Sub Code 2: In Java /** * @(#)Stamps.java * * Stamps application * * @author * @version 1.00 2011/1/15 */ 8 /* Note: Before you compile this program, copy Input.class * in the same location where you saved this program */ public class Stamps { public static void main(String[] args) { // TODO, add your application code int Sheets, No_of_Stamps; Input Ask = new Input(); System.out.println("Stamps on an Envelope\n"); System.out.print("Number of Sheets : "); Sheets = Ask.iinteger(); No_of_Stamps = (int) Math.ceil(Sheets/5.0); System.out.println("Number of Stamps : "+No_of_Stamps); } } Code 3: In C/C++ #include <stdio.h> #include <math.h> main(void) { unsigned int Sheets, Stamps; clrscr(); printf("Postage Stamps\n\n"); printf("Number of Sheets : "); scanf("%u",&Sheets); Stamps = ceil(Sheets/5.0); printf("Number of Stamps : %u",Stamps); getche(); return 0; } 9 Guidelines for Developing Flowcharts (Programming in BASIC by Ralph M. Stair, Jr.) 1. The overall purpose of a flowchart is to reveal the logic and layout of the problem – not specific programming statements or rules. 2. Flowcharts are used as a design tool. Thus, they should be done before the program is developed. 3. Just as there are many way s to solve a problem, there are many ways to develop a flowchart. You should strive to develop a good flowchart, not the one best flowchart. This can be done by using common sense and following these rules. a. Flowcharts should be relatively independent of a particular programming language. In other words, the same flowchart can be used to write a program in C/C++, Java, Pascal, BASIC, or any other programming language. b. A flowcharting template should be used. Each symbol should only be used for its specified purpose. In other words, the rectangle should not be used a decision or for input and output. c. Flowcharts should be simple and straightforward. Unnecessary loops and branches should be avoided. Using a large number of connectors between different segments of the program and between different pages should also be avoided. d. The flowchart lines should be either vertical or horizontal. Flowcharting lines that curve or lines that are at angles should be avoided. In addition, flowcharting lines should never cross, and each flowcharting line should be attached to a flowcharting symbol. When possible, there should only be one flowcharting line drawn to each symbol. e. Only executable statements should be included in flowcharts. Furthermore, text or written in a flowcharting symbol should be short or kept to a minimum. f. Several programming statements can be represented using one flowchart symbol. Furthermore, it is unnecessary to use formal programming words. g. Flowcharts should be written from top to bottom and from left to right. There should be straightforward flow from one flowcharting symbol to another. h. A flowchart is also a documentation tool. If you decide to change a program, first design these changes by redoing the flowchart. The flowchart should always reflect the current program. Some Important Terms: Desk Checking (@ the Flowchart Stage). The use of different data as input to check the output. Or, a method of discovering logical error by tracing the values of variables on paper by writing down their expected value after “mentally executing” each line in the program. The test should include non-standard data as well as typical data. This method is rudimentary and highly impractical except for small programs. Algorithm. A logical sequence of precise steps that solve the problem. Or, a step-by-step description of how to arrive at a solution. Program Development. The progression from understanding a problem specification to achieving a working computer-based solution. Program Development Cycle. A sequence of steps programmers used to plan their programs. Testing. The process of finding errors in a program. Debugging. The process of correcting errors found in a program. Bug. An error in a program. Coding. The technical word for writing the program. Flowcharts. A diagram consisting of geometric symbols connected by arrows that graphically depicts the logical steps to carry out a task and show how the steps relate to each other. Or, a diagram that shows the logic of a program. The flowlines (the arrows connecting the symbols) show the progression in which the steps take place. Pseudocode. An abbreviated version of actual computer code. Created in 1970s as an alternative to flowcharts, it is a stylized form of writing used to describe the logic of a program. It uses English-like phrases with some programming keywords/statements to outline the task. It allows the programmer to focus on the steps required to solve the problem rather than on how to use the computer language. Hierarchy Charts. A chart that shows the overall program structure. It shows how the different parts of a program relate to each other. It omits, however, the specific processing logic. Hierarchy charts describe what each part, or module, of the program does and they show how the modules relate to each other. The chart is read from top to bottom and from left to right. Each module may be subdivided into a succession of sub-modules that branch out under it. The main benefit of hierarchy charts is in the initial planning of a program. We break down the major parts of a program so we can see what must be done in general. From this point, we can then refine each module into more details plans using flowcharts or pseudocode. This process is called the divide-and-conquer method. Hierarchy charts are also called structure charts, HIPO (Hierarchy plus Input-Process-Output) charts, top-down charts, or VTOC (Visual Table of Contents) charts. 10 Top-Down Program Design. The design that focuses on the main goal that the program is trying to achieve and then breaks the program into manageable components contributing to this goal. Programming Language. An artificial language consisting of a vocabulary and a set of rules Syntax Errors. Grammatical errors, such as misspellings, omissions, or incorrect punctuations. Run-time Errors. Errors that occur while a program is running and usually caused by the inability of the computer to carry out the intended task. Logical Errors. Errors that occur when a program does not perform the way it was intended. Driver. A dummy program set up to test the reliability of a procedure. Computer Program. A sequence of instructions that tells a computer what to do and how to do it. Or, a series of (logically-coded) instructions that a computer can interpret and execute. It has three constituent parts: input, process, and output. Input and output are important to make the program useful but most of the work gets done in process. Process is the heart of programming and does not include user interface; therefore, it does not include GUI. A source code program comprises all statements and files necessary for complete interpretation or compilation. An executable program can be loaded into a given environment and executed independently of other programs. Programming. The art, science, and discipline of designing, writing, debugging, and/or maintaining computer programs. It is problem solving. Specifically, problems are solved by creating solutions that run on a computer. In order to create a solution, a programmer must understand the problem , determine what information is available with which to solve the problem, and design a solution that uses some or all available information. The solution includes designing and writing a computer program. Stub Programming. A programming technique where key event procedures and perhaps some of the smaller procedures are coded first while dummy procedures (or stubs) are written for the remaining procedures. Initially, a stub procedure might consist of a Print method to indicate that the procedure has been called, and thereby confirm that it is called at the right time. Stepwise Refinement. The repeated use of a “divide-and-conquer” approach to break up a large problem into smaller subproblems. Spaghetti Code. A program composed of a convoluted (too complex or intricate to understand easily; having many twists, coils, or whorls) tangle of branching that produces confusing code. Flag. A Boolean variable, used to indicate whether a certain event has occurred. Quick Info. A feature of IntelliSense that causes the editor to display a line containing the general form of a statement or function. ToolTips. Pop-up help bubbles. User Interface. The way that a program accepts instructions from the user and presents results. Graphical User Interface (GUI). An user interface that provides visual clues such as small pictures, or icons, to help the end user give instructions to the computer. 11