1 CSE1301 Computer Programming Lecture 24: Software Engineering
2 Topics Thus far in CSE1301 Tools and techniques –Structure Charts –Dataflow Diagrams –Prototyping Structured design –Modularity –Coupling –Cohesion Reading: Brookshear: Chapter 6
3 Thus far in CSE1301… Computer Systems –Overview of what computers are made of. Components of an Algorithm –Values, Variables, Instructions, Sequence, Selection, Iteration, Procedure, Documentation The C Language –Operations, Identifiers, Types, Input/Output, Files, Arrays, Pointers, Functions, Structs, etc. –Vocabulary: main, int, float, scanf, printf, if, while, for, fopen, struct, etc But we have implemented small programs only!
4 Software Engineering Essential to have a process for large projects Structured development of software systems –Examples: software for banking, stock exchange, space probe control, toll charge, operating system, games Tools and Techniques –Structured process rather than trial-and-error. –Important goal: eliminate errors. “Engineering” –Zero tolerance to error. –Pre-fabricated components. –Re-usable components.
5 Tasks –project planning (cost, schedule, personnel) –project management –documentation –prototyping and simulation –interface design –programming –testing Computer-Aided Software Engineering (CASE) Tools Software Engineering
6 Components of the Software Development Process: Define the problem clearly Analyse the problem Design an algorithm top-down / bottom-up design Document the system Code (Implement) the algorithm Test the code Recall:
7 Development Approach: Water-Fall Model (Old) AnalysisDesignImplementTest Requires that each stage be totally completed before beginning next stage.
8 Development Approach: Incremental Model AnalysisDesignImplementTest Increments from simplified version with limited functionality to complete system. At each stage: prototype.
9 Prototyping Construction of simplified version of parts of the proposed system that can be analysed before further development. Types of items that can be prototyped: –screen and report format, database and file structures, system protocols, etc.
10 Modularity Top-down analysis and design. Break problem down into manageable sub-problems (or modules) Example: Hold a party Send invites Prepare food Prepare music Select people in address book Contact invited people Decide on menu Go shopping Cook Find songs on cd Create a new cd with selections …
11 Modularity Top-down analysis and design. Break problem down into manageable sub-problems (or modules) Example: Hold a party Prepare food Decide on menuGo shopping Prepare music Cook Create shopping listDrive to shopsBuy groceries …
12 Golden Rule #1 Design Top-Down, but always build Bottom-Up. Code and test the simplest components first. Test each component before using them to make sure they work Then use those components to build more complex components.
13 Structure Chart Pictorial representation of a modular structure –each module represented by a rectangle –arrows represent dependencies between modules Hold a party Prepare food Decide on menuGo shopping Prepare music Cook Create shopping listDrive to shopsBuy groceries …
14 Coupling Links and dependencies between modules Control coupling: –when one module passes control to another –Examples: function call, return Data coupling: –sharing of data between modules. –Examples: function parameters, return values
15 Example Structure chart with labels showing data coupling goShopping ( place, menu ) { list = createGroceryList( menu ) driveTo (place ) buyItems ( list ) } goShopping createGroceryListbuyItemsdriveTo place menu list menu list place …
16 Notes on Coupling Aim: maximize module independence = minimize coupling. Use of global variables (not constants) is a form of implicit data coupling: dangerous! –It is NOT recommended to have global variables in your program.
17 Notes on Coupling How is control coupling represented in code? –Function call: When a function is called, control is passed to that function. –Function return: When the code in a function has been executed, control is returned to the code that called the function. How is data coupling represented in code? –Data sent to a function via parameters. –Data returned from function using "return". –Data modified in function using a pointer parameter.
18 Cohesion Internal binding within function, i.e. degree of relatedness of a module’s internal parts. Logical cohesion –Internal elements perform activities that are logically similar. (Eg. I/O function) Functional cohesion –all parts are geared towards single activity Aim: high intra-module cohesion
19 Example 1 contact ( company, message, mode ) { if mode is by fax { sendFax ( company, message) } else if mode is by { send ( company, message) } Cohesive.
20 Example 2 Not cohesive. contact ( company, message, mode ) { if mode is by fax { sendFax ( company, message) } else if mode is by { send ( company, message) } printAddressBook ( ) }
21 Golden Rule #2 Modules in a well-structued program are highly cohesive and loosely coupled. The size of the data coupling corresponds roughly to the level of the module in the hierarchy.
22 Dataflow Diagrams (DFD) Pictorial representation of data paths: –origin (source) –destination (sink, storage) –processing points (location of data manipulation, modules)
23 Dataflow diagram showing data paths Recipe Books Menu Recipes Shop List Buy Items List Drive to Shops Prepare Menu Prepare Gocery List Name, Address Shop address list Address Cost
24 Arrows: Data Paths Recipe Books Menu Recipes Shop List Buy Items List Drive to Shops Prepare Menu Prepare Gocery List Name, Address Shop address list Address Cost
25 Boxes: Data Sources and Sinks Recipe Books Menu Recipes Shop List Buy Items List Drive to Shops Prepare Menu Prepare Gocery List Name, Address Shop address list Address Cost
26 Circles (Bubbles): Processing Points Recipe Books Menu Recipes Shop List Buy Items List Drive to Shops Prepare Menu Prepare Gocery List Name, Address Shop address list Address Cost
27 Heavy Straight Lines: Data Storage Recipe Books Menu Recipes Shop List Buy Items List Drive to Shops Prepare Menu Prepare Gocery List Name, Address Shop address list Address Cost
28 You (the Processor) are not included in the diagram! Recipe Books Menu Recipes Shop List Buy Items List Drive to Shops Prepare Menu Prepare Gocery List Name, Address Shop address list Address Cost
29 Dataflow diagrams (DFD) Emphasise the data (information) to flow through system. (rather than procedures to be executed) By following data paths, discover where data units are merged, split, or altered.
30 Summary Modularity is crucial for developing large software projects Structure charts and dataflow diagrams are useful design tools Design top-down, but build bottom-up Build incrementally with prototypes Well-structured programs are highly cohesive, and loosely coupled.