350 likes | 381 Views
Main. f,g,h. b,c,e. f,g,h. b,c,e. Get Validated Input. Output. Schedule. f. g. h. Print Timetable. Print Conflict. Print Explanation. Software Engineering COMP 3400 - System Design.
E N D
Main f,g,h b,c,e. f,g,h b,c,e Get Validated Input Output Schedule f g h Print Timetable Print Conflict Print Explanation Software Engineering COMP 3400 - System Design • The goal of the detailed design phase is to develop the internal logic of each of the modules identified during the system design phase. • The structured design methodology used during system design did not precisely specify the modules but rather described the modules in a natural language.
Software Engineering - Detailed Design Specifying Modules • Formal methods for module specification are intended to ensure that the specifications are precise and are not subject to interpretation by the coder. • Module specifications should be complete, unambiguous, implementation independent and easy to understand. • One technique used is to provide a very high level prototyping language for specifying and testing module specifications
Software Engineering - Detailed Design Specifying Functional Modules • A functional module can be described in terms of its input and output transform. SORT (L: list of integers) output: for all i, 1 ¦£ i < size(L’) L’[i] ¦£ L’[i+1] and L’ = permutation(L) ¦ input: non null L Sort a list L of integers in ascending order
Software Engineering - Detailed Design Specifying Data Abstractions • Another formal method for specifying modules is referred to as data abstraction. • This technique requires the use of a formal specification language, which is implementation independent but which shares many of the characteristics of a programming language. See figure 5.2 for specifying a queue. • Formal methods for module specifications are cumbersome, not very expressive, and are hard to write and understand.
Software Engineering - Detailed Design Process Design Language (PDL) • Process Design Language (PDL) is a practical way to precisely communicate the meaning of a system or module. • PDL can be thought of as a structured natural language, with some of the precision of a structured programming language and some of the ease of a natural language. • Some amount of automated processing can be done with the PDL design document.
Software Engineering - Detailed Design PDL Example minmax(infile) // Find the max and min of a string of numbers // ARRAY a DO UNTIL end of input READ an item into a ENDDO max, min := first item of a DO FOR each item in a IF max < item THEN set max to item IF min > item THEN set min to item ENDDO END
Software Engineering - Detailed Design Process Design Language (PDL) • Notice that in this example, we have the entire logic for the procedure without the implementation details of a particular imperative language. • To code this procedure the programmer needs to relate each of the statements into a construct in the implementation language. • There is little room for coding “creativity” • A series of PDL designs can be generated in a successive refinement approach.
Software Engineering - Detailed Design PDL Constructs • The constructs of PDL are similar to that of a structured imperative language like Pascal or C: IF condition THEN CASE OF transaction type CASE OF operator type DO iteration criteria statement list ENDDO
Software Engineering - Detailed Design Logic/Algorithm Design • An algorithmis a series of steps that need to be performed to to solve a given problem. • The design of a specific algorithm begins with a statement of the module problem from the System Design Specification. • The use of stepwise refinement techniques and PDL descriptions can be used to gradually convert the module description into a precisely defined algorithm. • PDL permits a series of refinements with varying degrees of precision not available in a specific programming language.
Count the Number of Different Words Get Word List Sort The List Print the Count Input Word List:wl Sorted Word List Word Count Software Engineering - Detailed Design Algorithm Design Example - Counting Different Words • The PDL description of this Data Flow Graph:
Count the Number of Different Words Get Word List Sort The List Print the Count Input Word List:wl Sorted Word List Word Count Software Engineering - Detailed Design Algorithm Design Example - Counting Different Words • 1st PDL refinement of this Data Flow Graph: count (in: file) returns integer var wl: word_list; begin sort (wl); count := different_words (wl); print (count); end;
Software Engineering - Detailed Design Algorithm Design Example - Counting Different Words • Three operations require refinement: • read file into word list (wl), • sort word list, • count different words in word list. • Select one of the three for further refinement. • Refine the reading operation:
Software Engineering - Detailed Design Algorithm Design Example - Counting Different Words • Three operations require refinement: • read file into word list (wl), • sort word list, • count different words in word list. • Select one of the three for further refinement. • Refine the reading operation: read_from_file (in: file, out: wl) begin initialize wl to empty; repeat get_a_word from file add word to wl until end_of_file end;
Software Engineering - Detailed Design Algorithm Design Example - Counting Different Words • Refine the counting operation:
Software Engineering - Detailed Design Algorithm Design Example - Counting Different Words • Refine the counting operation: different_words (in: wl) returns integer var last, cur: word; cnt: integer; begin last: = first word in wl; cnt : = 1; while not end of list cur : = next word from wl; if (cur ! = last) then begin cnt := cnt + 1; last := cur; end; end; return (cnt); end.
Software Engineering - Detailed Design Logic/Algorithm Design • For complex problems many successive refinements may be required. • Design for such problems can proceed depth first or breadth first: • depth first continues refinement of a single operation before other operations are refined, • breadth first refines all operations are refined in parallel. • The structure of PDL programs resulting from this technique are not the same as the structure resulting from the SDM (Structured Design Methodology): • in stepwise refinement sort is subordinate to the main module, in SDM it is subordinate to the input module.
Software Engineering - Detailed Design Verification • The goal of verification in the detailed design phase is to ensure that the detailed design is consistent with system design. • Three validation methods are: • design walkthroughs • critical design reviews • consistency checkers
Software Engineering - Detailed Design Design Walkthroughs • A meeting is held by the designer or design group leader or designated spokesperson. • The detailed design is described in step-by-step fashion. • The feedback is usually informal in nature. • The Design Review is more effective and more expensive.
Software Engineering - Detailed Design Critical Design Review • A review group, consisting of the detailed design author or team, the system design team, the programming team, the quality assurance organization and perhaps the client is convened. • The review is conducted in a manner similar to the requirements or system design review, i.e., each member is prepared and incented to review the detailed design beforehand and reveal detailed design errors. • The meeting is not intended to fix problems, but rather, to identify them. • A list of action items should be maintained for further reporting or a subsequent meetings.
Software Engineering - Detailed Design Critical Design Review Checklist • Does each of the modules in the system design appear in the detailed design? • Can the performance requirements be met? • Are the assumption explicit and acceptable? • Are all relevant aspects of system design in the detailed design? • Is the design structured and compatible with local practices? • Are the sizes of data structures explicit? • Is each statement codeable? • Will the loops terminate? • Is the module too complex? • Are the modules highly cohesive?
Software Engineering - Detailed Design Consistency Checkers • A consistency checker is a special purpose PDL compiler which, rather than producing executable target code, ensures that the modules invoked or used by a given module is consistent with the design • A consistency checker can ensure that any modules invoked or used by a given module actually exit in the design and that the caller interface is consistent with the interface definition of the called module. • Consistency checkers can generate complexity metrics. • The more formal the design language the better its checking and the closer it becomes to a formal programming language.
Software Engineering - Detailed Design Metrics • After the detailed design many important details are known about the software system. Only the implementation details associated with a programming language remain. • Hence, many system metrics can be formulated. • Detailed design metrics include: • Complexity metrics • Data bindings • Cohesion metrics
Software Engineering - Detailed Design Cyclomatic Complexity • Programs with with many conditional statements tent to be more complex than those with few conditional statements. • A simple measure of complexity is the number of constructs that represent program branches like if then else, while do, and repeat until. • A more refined measure of complexity is the cyclomatic complexity measure, which is based on a control flow graph of a programs logic. • A control flow graph is drawn by breaking a program into blocks delimited by control statements. • These blocks become graphical nodes with arcs connecting branchings between blocks. • The complexity can be calculated by counting the nodes, edges and connections in the control flow graph.
Software Engineering - Detailed Design Cyclomatic Complexity • A module with its corresponding flow graph is shown below:
Software Engineering - Detailed Design Cyclomatic Complexity 0 begin 1 i = 1 2 while (i £ n) do begin 3 j = 1; 4 while(j £ i) do5 if A[j] < A[i] then 6 swap (A[j], A[i]); 7 end if 8 end while 9 end while 10 end • A module with its corresponding flow graph is shown below: 0,1,2 3,4 5 • The cyclomatic number is the number of independent circuits in the chart 10 9 7,8 6
Software Engineering - Detailed Design Cyclomatic Complexity 0 begin 1 i = 1 2 while (i £ n) do begin 3 j = 1; 4 while(j £ i) do5 if A[j] < A[i] then 6 swap (A[j], A[i]); 7 end if 8 end while 9 end while 10 end • A module with its corresponding flow graph is shown below: 0,1,2 3,4 5 • The cyclomatic number is the number of independent circuits in the chart = 4 10 9 7,8 6
Software Engineering - Detailed Design Data Bindings • Data bindings attempt to measure the coupling and cohesion among modules. • A potential data binding counts the number of variables between two modules which are within the same scope. This metric represents the potential for coupling of variables by sharing between modules. • A used data binding is a potential data binding where two modules use the same variable. • An actual data binding occurs when a module assigns a value to a variable and another module uses that value. • All of these binding attempt to represent the strength of interconnections between particular modules.
Software Engineering - Detailed Design Module Complexity • After detailed design, the complexity of modules can be obtained. • If a module is very complex it will be difficult to understand, maintain and modify. • If a module is too complex it can be broken down into two or more less complex modules.
Software Engineering - Detailed Design Errors per Module • After a design walkthrough the number of errors per module can be determined. • Assuming a high quality review, a low number of errors implies that the module was well designed. • If the number of errors in module is high it may indicate that there will be problems during the coding phase and careful scrutiny may be required
Software Engineering - Detailed Design Summary • The goal of detailed design is to develop the internal logic of each of the modules identified during the system design. • Methods are available for specifying the logic of a module. • Formal methods exist for specifying modules. • One is the axiomatic specification technique, another is data abstraction.
Software Engineering - Detailed Design Summary • Unfortunately, the formal methods developed to date tend to be a pain and are rarely used in practice. • A more practical approach is to use a pseudo-language specifically designed for specifying modules during the detailed design phase of a project. • This pseudo-language should be practical enough to be usable yet precise enough to be convertible into code without requiring uncontrolled decisions on the part of the code writers.
Software Engineering - Detailed Design Summary • We discussed a language called Process Design Language which is used to describe the detailed design of systems and which is used in practice. • PDL can be used to express the detailed design of modules. • PDL has a formal outer syntax and a flexible inner syntax and vocabulary, giving it a balance between formalism and ease of expression.
Software Engineering - Detailed Design Summary • Several metrics were introduced to evaluate the effectiveness and output of this phase. • We have introduced metrics for evaluating the complexity of modules, the coupling among modules and the quality of modules. • We have discussed verification techniques such as our old friend the design review. • Several automated techniques exist which are based on PDL though the deign review is still the most used.
Software Engineering - Detailed Design Case Study • Design Decisions • PDL of main module procedure • Proc main() • PDL of input module procedures • Proc get_validated_input(file1,file2) • Proc validate_file(file1) • Proc validate_classrooms • Proc validate_dept_courses • Proc validate_lecture_times • Proc validate_file2
Software Engineering - Detailed Design Case Study • PDL of input module procedures • Proc get_ course_index(course_no, course_index) • Proc get_pref_valid(buffer, valid_pref_list) • Proc form_course_rec(course_index,enrol,valid_pref_list) • Proc separate_course