Software Design Lecture Notes PDF
Document Details
Uploaded by ExcellentConcreteArt8804
Tags
Summary
These lecture notes discuss software design principles, including software architecture, functional decomposition, relational database design, object-oriented design, and UI design. The notes cover topics such as abstraction and design notations, and how to create classes. It also explores UML diagrams and their uses.
Full Transcript
Lecture 8&9 Software design - Requirements -> architecture and design -> code - Requirements -> design -> implementation -> verification -> maintenance - goals/activities - Making system-wide decisions - Architecture, languages, libraries, platforms...
Lecture 8&9 Software design - Requirements -> architecture and design -> code - Requirements -> design -> implementation -> verification -> maintenance - goals/activities - Making system-wide decisions - Architecture, languages, libraries, platforms - Making lower-level decisions in an iterative manner - Studying problem, identifying solutions, creating abstractions, evaluating Approaches to software design - Software architecture - Functional decomposition - Breaks down complex process, system or task into smaller and more manageable parts/functions - Improves clarity, manageability and maintainability - - Relational database design - Process of structuring database to store and manage data efficiently by organizing it into tables that represent real world entities and their relationships - - Object oriented design and UML (left photo) - Object contains both data and methods - Class is blueprint for making objects - - UI design (photo on left) - Process of creating interfaces in software or computerized devices that focus on maximizing usability and user experience - Encompasses look and feel of product as well as user interaction - Sketching (lec 8) Purpose of designs/models - To think, talk, prescribe - Designs are developed iteratively Abstraction - Abstractions are formed by removing irrelevant information and retaining/highlighting relevant information - Every design notation supports certain kind of abstraction - Software engineering is all about constructing and elaborating abstractions/models Summary - Design phase of software engineering - How to what of requirements - Architecture, functional decomp……. - Purpose of design - Software engineering is all about constructing and elaborating….. Design notations - By relieving brain of all unnecessary work, good notation sets it free to concentrate on more advanced problems and in effect increase mental power of race Software development languages - Different languages are used at different stages - Requirements (english) -> design (diagrams/UML) -> coding/testing (java,python) - Design notations = diagrams/UML UML (unified modeling language) - Industry standard for software design/modeling - Different types of UML diagrams are used to represent different aspects (structure, behavior, interactions) of a system - Class diagrams, activity diagrams, use case, sequence diagrams, etc - Used in decomposing system into modules known as classes - Typically used to - Model domain concepts - Create a detailed object oriented design of code Relationships between classes - Inheritance - Allows class (subclass or derived class) to inherit properties and behaviors from another class - Establishes hierarchy between classes, enabling code reuse/establish structure - Association - Defines relationship between two or more classes that indicates how objects of those classes interact with each other - Multiplicity: specifies how many instances of one class can be associated with instances of another class in an association - Whole part (aggregation and composition) - Aggregation: one object contains set of other objects - Relationships are transitive (having or containing a direct object) and asymmetric - Composition: variant of aggregation which adds property of existence dependency How to create classes? - Set of nouns in description of problem -> classes, attributes - Set of verbs in description of problem -> operations, associations - Go through more detailed use cases to further flash out flow and objects necessary - UI mockups, a bit of programming?, refer/add to/revise design as necessary - Example: amazon - Other diagram pictures - Lec8, pt2: UML activity, UML sequence, UML use case - Lec 8,pt3: User interface mockups, pseudocode, entity relationship, Architecture, storyboard, sketches What is software engineering - Process of building a set of related models that represent the system-to-be Design principles - High cohesion/low coupling - Effects: changes don't propagate; reuse is facilitated - High: grouping related functionality - Low: ungrouping unrelated functionality/reducing interdependency - - Information hiding - Hide design decisions that are most likely to change, thereby protecting other parts of the program from change if the design decision is changed - Showing details to outside world that are necessary and other detailed are hidden Summary - Every design notation supports an abstraction - A design diagram is a statement in a language that has a syntax - UML diagrams,UI mockups, pseudo code, ER diagrams, storyboard,sketches - Software engineering -> process of building set related models that represent system to be Usability is important! - hope…change..test! User centered design works (UCD) - Simple, inexpensive, higher sales, higher satisfaction, higher efficiency - Benefit will shift from conversion (first-time customers) to loyalty (repeat customers) - But sometimes NOT USED! Usability fail - Office space printer scene on youtube - Picture examples (lec9,pt1) - Pc warnings, ATM, security warning (office disabled contents)’ - False missile alert (hawaii missile threat notification on phone) Usability & first impression matters! - User interface is well-designed when the program behaves exactly how user thought it would work - GUI should provide GUIdance - Focus on user and all else will follow Why is usability engineering so hard? - Usability design based on: - Psychology, art, cognitive science, aesthetics - Software engineers generally not audience of software they develop Summary - We use HCI/UCD methods for good reasons - Sales/performance doubles, traffic counts increase, frustration decreases - It's all about the user! User centered/oriented methods (*****look at lec9 pt2 for more examples/pictures of each*****) - Interviews and observations - Personas - Scenarios - Storyboard - Wireframe and mockups - Design guidelines - Heuristic evaluation - Using principles based on research to evaluate and improve usability of system - Process: - Select task, someone plays user, evaluators focus on aspect, someone takes notes - Nielsen - Visibility of system status - Match system worlds to real world - User control and freedom - Consistency and standards - Error prevention - Recognition rather than recall - Accelerators - Minimalist design - Principles: contrast, repetition, alignment, proximity - Help users recognize and recover from errors - Help and documentation - User testing - Improve designs and interfaces before showing users - Checklists, heuristic evaluation - Cognitive walkthrough - Planning user testing - Subjects, system, tasks, session, measures taken - Formal: testing facilities -> professional usability labs - Less formal user testing Online readings (posted on week 5-6 roadmap) https://medium.com/the-u-s-digital-service/introducing-u-s-web-design-standards-aff21383afd6 https://www.nngroup.com/articles/ux-learn-in-restaurants/ https://www.nngroup.com/