Aug. 30, 2013 SW Engineering Notes Design - figuring out how to implement requirements Systems Engineering - HW vs SW implementations, esp. for Real-time systems SW Architecture - decide how to divide SW into subsystems and how those subsystems interact Many arch. patterns/styles exist Detailed design - subsystem details Look & Feel or UI Design - how user interacts with system DB interaction - how project interacts with database Modeling - representing the domain or software Use case modeling - representing sequences of actions performed by users How user will do something (Click this, select that, open something) Structural modeling - representing classes and objects present in domain/SW (Unified Modeling Language (UML)) Dynamic or behavioral modeling - representing system states and actions therein (State space diagrams and others) Programming - Design-->Code-->Executable Tools exist to turn UML (Class Diagrams and ER diagrams) into code Design is much more important Quality Assurance - ensure quality objectives are met Review and inspection of design and code Testing - systematically executing SW to ensure it behaves as expected Examples include validation and verification Deployment - distribution and installation Managing SW configurations Management - cost estimation and planning Maintenance We will emphasize understanding the customer and user, OO Techniques, UML, and Agile Agile for our purposes = iterative and adaptive development Waterfall model - requirements gathering -> design -> programming -> testing -> deployment -> maintenance In the original model, you don't go back to the previous step Improved versions allow for return to the previous step, but lead to better models such as Agile. Agile models assume software engineering is a highly iterative process. They requirements gathering, repeat design, implementation, etc., again and again. Example: Create a prototype with little functionality and rough requirements to help find requirements for the next iteration. Complete several iterations of prototypes before the stakeholders are satisfied. Complete smaller units of work more frequently. We find out if something doesn't work for the client much faster. Difficulties and Risks in SW Engineering SW Systems have large numbers of details and complexity - easy to add new features - esp. without understanding the system - system might not accomodate new features Solution: Flexibility added from the start Division of system into subsystems Limited features Uncertainty about: Requirements You can't be sure of what the client wants until deployment! Technology Can't be sure how SW will work on various platforms Solution: Don't use strange HW Don't use weird features Complete prototypes on planned HW SW Eng. Skillset Team members may have different skills Solution: Education Practice/Training Communication about skillsets to ensure all necessary skills are available Change in project Solution: Be flexible! Deterioration of Design Continuous changes cause bugs Solution: Make SW flexible (e.g. use a framework) Training Don't rush Use Quality Assurance Political Risks Some folks might not like the requirements They might not understand the project or why you are using SW Might not understand why it takes time Solution: Communication through meetings, marketing, and negotiation