CPSC 3720 - DAY 2 JANUARY 13, 2017 ================================================================================ Software Engineering -------------------- .Systematic process for applying theory developing software. .research, design, develop, and test operating systems-level software, compilers, and network distribution software for medical, industrial, military, communications, aerospace, business, scientific, and general computing applications. .Not just programming. .Not just theoretical .It's about using the theory and the skill to design a new product that will be used in the real world. Responsibility: .Need to verify that the system is correct. .Ensure that the system is properly tested and maintained. Software Engineering: Role and Methods -------------------------------------- .Software is complex. .complex != complicated. .complex - composed of many simple parts related to one another .complicated - not well understood, or explained. Ex. complexity of scheduling fence construction tasks. .The Role of Software Engineer .A bridge from customer needs to programming implementation. .First law - software engineer is willing to learn the problem domain. .Customer requires a computer system to achieve some business goals by user interaction with the environment in a special manner. .Software engineer's task is to understand how the system-to-be needs to interact with the user or the environment so that customer's requirement is met and design the software-to-be .Programmer's task - to implement the software designed by the software engineer. .Second law of Software engineering .Software should be written for people first. .Computers run software, but hardware quickly becomes outdated. .useful + good software lives long. .To nurture software, people must be able to understand it. Software Development Lifecycle ------------------------------ 1. Requirements 2. Design 3. Implementation 4. Testing 5. Deployment and Maintenance They are often broken down to a finer granularity Requirements ------------ .This stage involves a lot of input from the customer. .Find out what the customer needs from the system. .Customer doesn't always know. .Prioritize requirements. .Determine who uses the system and how. .The Software Engineer must understand the domain of the system. Design ------ .Fully design the system. .How will different objects interact. .What objects and classes are needed? .How does the system accomplish what the user wants it to accomplish? Implementation -------------- .Write the code. .Integrate seperate systems .Small part of the process. Testing ------- .Test your code thoroughly. .Use verification techniques to prove your code works. .Fix any errors that are found. Deployment and Maintenance -------------------------- .Deliver the finish product .Maintain the system .Fix new bugs as they are found Waterfall Method ---------------- REQUIREMENTS ----------- \\\\\\\\\\\| \\\\\\\\\\\| DESIGN \\\\\\\\\\\------------- \\\\\\\\\\\\\\\\\\\\\\\\| \\\\\\\\\\\\\\\\\\\\\\\\| IMPLEMENTATION \\\\\\\\\\\\\\\\\\\\\\\\---------------- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\| \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\| TESTING \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\---------- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\| DEPLOYMENT AND \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\| MAINTENANCE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\----------------- Unidirectional, no way back finish this step before moving to the next The Iterative Model ------------------- .Several different versions .Break the project up into small iterations .Maybe a month at a time .In each iteration .Complete the whole cycle .Deliver a "complete" usable product .Allows more flexibility .Keeps the customer constantly involved .Delivers incremental products .Allows for feedback .Customer isn't high and dry in case of emergency .Allows for team to improve their methods Waterfall Method ---------------- Pros: • Simple methodology good for short projects • Easier to schedule • Easier to departmentalize • Each stage is well documented Cons: • Requires very stable requirements • Can be difficult to change the design • When things fall behind schedule, the implementation and testing teams lose time. • No finished product until the very end • No customer feedback • Big Bang finish can be difficult for users