Software Engineering PDF
Document Details
Uploaded by Deleted User
Vinaya Sathyanarayana
Tags
Summary
This document is a presentation on software engineering, including topics such as architecture, design concepts, and diagrams. It details different architectural concepts, design elements, quality guidelines, and more.
Full Transcript
Software Engineering Vinaya Sathyanarayana Architecture https://c4model.com/ Context, Containers, Components, and Code System Context diagram A System Context diagram is a good starting point for diagramming and documenting a software system, allowing you to step back and...
Software Engineering Vinaya Sathyanarayana Architecture https://c4model.com/ Context, Containers, Components, and Code System Context diagram A System Context diagram is a good starting point for diagramming and documenting a software system, allowing you to step back and see the big picture. Draw a diagram showing your system as a box in the centre, surrounded by its users and the other systems that it interacts with. Detail isn't important here as this is your zoomed out view showing a big picture of the system landscape. The focus should be on people (actors, roles, personas, etc) and software systems rather than technologies, protocols and other low-level details. It's the sort of diagram that you could show to non-technical people. Container diagram Once you understand how your system fits in to the overall IT environment, a really useful next step is to zoom-in to the system boundary with a Container diagram. A "container" is something like a server-side web application, single-page application, desktop application, mobile app, database schema, file system, etc. Essentially, a container is a separately runnable/deployable unit (e.g. a separate process space) that executes code or stores data. The Container diagram shows the high-level shape of the software architecture and how responsibilities are distributed across it. It also shows the major technology choices and how the containers communicate with one another. It's a simple, high-level technology focussed diagram that is useful for software developers and support/operations staff alike. Component diagram Next you can zoom in and decompose each container further to identify the major structural building blocks and their interactions. The Component diagram shows how a container is made up of a number of "components", what each of those components are, their responsibilities and the technology/implementation details. Code diagram Finally, you can zoom in to each component to show how it is implemented as code; using UML class diagrams, entity relationship diagrams or similar. This is an optional level of detail and is often available on-demand from tooling such as IDEs. Ideally this diagram would be automatically generated using tooling (e.g. an IDE or UML modelling tool), and you should consider showing only those attributes and methods that allow you to tell the story that you want to tell. This level of detail is not recommended for anything but the most important or complex components. Unit 9 Design Concepts Software Design Encompasses the set of principles, concepts, and practices that lead to the development of a high quality system or product. Design principles establish and overriding philosophy that guides the designer as the work is performed. Design concepts must be understood before the mechanics of design practice are applied. Software design practices change continuously as new methods, better analysis, and broader understanding evolve. 8 Software Engineering Design Data/Class design – transforms analysis classes into implementation classes and data structures. Architectural design – defines relationships among the major software structural elements. Interface design – defines how software elements, hardware elements, and end-users communicate. Component-level design – transforms structural elements into procedural descriptions of software components. 9 Mapping Requirements Model to Design Model Access the text alternative for slide images. 10 Design and Quality The design must implement all of the explicit requirements contained in the analysis model, and it must accommodate all of the implicit requirements desired by the customer. The design should be a readable, understandable guide for those who generate code and for those who test and subsequently support the software. The design should provide a complete picture of the software, addressing the data, functional, and behavioral domains from an implementation perspective. 11 Quality Guidelines 1. A design should exhibit an architecture (a) created using recognizable architectural styles or patterns, (b) composed of well designed components (c) implemented in an evolutionary fashion. 2. A design should be modular. 3. A design should contain distinct representations of data, architecture, interfaces, and components. 4. A design should lead to data structures that are drawn from recognizable data patterns. 5. A design should contain functionally independent components. 6. A design should lead to interfaces that reduce the 12 complexity of connections between components and Common Design Characteristics Each new software design methodology introduces unique heuristics and notions – yet they each contain: 1. A mechanism for the translating the requirements model into a design representation. 2. A notation for representing functional components and their interfaces. 3. Heuristics for refinement and partitioning. 4. Guidelines for quality assessment. 13 Design Concepts 1 Abstraction – data (named collection of data describing data object), procedural (name sequence of instructions with specific and limited function). Architecture - overall structure or organization of software components, ways components interact, and structure of data used by components. Design Patterns - describe a design structure that solves a well-defined design problem within a specific context. Separation of concerns - any complex problem can be more easily handled if it is subdivided into pieces. Modularity—compartmentalization of data and function. 14 Modularity and Software Cost Access the text alternative for slide images. 15 Design Concepts 2 Information Hiding - controlled interfaces which define and enforces access to component procedural detail and any local data structure used by the component. Functional independence - single-minded (high cohesion) components with aversion to excessive interaction with other components (low coupling). Stepwise Refinement – incremental elaboration of detail for all abstractions. Refactoring—a reorganization technique that simplifies the design without changing functionality. Design Classes—provide design detail that will enable analysis classes to be implemented. 16 Design Class Example Access the text alternative for slide images. 17 Design Class Characteristics Complete - includes all necessary attributes and methods) and sufficient (contains only those methods needed to achieve class intent). Primitiveness – each class method focuses on providing one service. High cohesion – small, focused, single-minded classes. Low coupling – class collaboration kept to minimum. 18 Information Hiding Reduces the likelihood of “side effects.” Limits the global impact of local design decisions. Emphasizes communication through controlled interfaces. Discourages the use of global data. Leads to encapsulation—an attribute of high quality design. Results in higher quality software. 19 Architecture Properties Structural properties. This aspect of the architectural design representation defines the components of a system (for example, modules, objects, filters) and the manner in components are packaged and interact with one another. Extra-functional properties. The architectural design description should address how the design architecture achieves requirements for performance, capacity, reliability, security, adaptability, and other characteristics. Families of related systems. The architectural design should draw upon repeatable patterns (building blocks) often encountered in the design of similar systems. 20 Design Pattern Template Pattern name - describes the essence of the pattern in a short but expressive name Intent - describes the pattern and what it does Also-known-as - lists any synonyms for the pattern Motivation - provides an example of the problem Applicability - notes specific design situations in which the pattern is applicable Structure - describes the classes that are required to implement the pattern Participants - describes the responsibilities of the classes that are required to implement the pattern Collaborations - describes how the participants collaborate to carry out their responsibilities Consequences - describes the “design forces” that affect the pattern and the potential trade-offs that must be considered when the pattern is implemented Related patterns - cross-references related design patterns 21 Design Model Access the text alternative for slide images. 22 Design Modeling Principles 1 Principle #1. Design should be traceable to the requirements model. Principle #2. Always consider the architecture of the system to be built. Principle #3. Design of data is as important as design of processing functions. Principle #4. Interfaces (both internal and external) must be designed with care. Principle #5. User interface design should be tuned to the needs of the end-user and stress ease of use. 23 Design Modeling Principles 2 Principle #6. Component-level design should be functionally independent. Principle #7. Components should be loosely coupled to each other than the environment. Principle #8. Design representations (models) should be easily understandable. Principle #9. The design should be developed iteratively. Principle #10. Creation of a design model does not preclude using an agile approach. 24 Data Design Elements Data model – data objects and database architectures. Examines data objects independently of processing. Focuses attention on the data domain. Creates a model at the customer’s level of abstraction. Indicates how data objects relate to one another. Data object can be an external entity, a thing, an event, a place, a role, an organizational unit, or a structure. Data objects contain a set of attributes that act as an quality, characteristic, or descriptor of the object. Data objects may be connected to one another in many different ways. 25 Architectural Design Elements Architectural design for software - equivalent to the floor plan for a house. The architectural model is derived from three sources: Information about the application domain for the software to be built. Specific requirements model elements such as data flow analysis classes and their relationships (collaborations) for the problem at hand, and Availability of architectural patterns and styles. 26 Interface Design Elements Interface is a set of operations that describes the externally observable behavior of a class and provides access to its public operations. Important elements: User interface (UI). External interfaces to other systems. Internal interfaces between various design components. UI or User Experience (UX) is a major engineering action to ensure the creation on usable software products. Internal and external interfaces should incorporate both error checking and appropriate security features. 27 Interface Model for Control Panel Access the text alternative for slide images. 28 Component-Level Design Elements Describes the internal detail of each software component. Defines: Data structures for all local data objects. Algorithmic detail for all component processing functions. Interface that allows access to all component operations. Modeled using UML component diagrams. 29 Deployment Design Elements Indicates how software functionality and subsystems will be allocated within the physical computing environment. Modeled using UML deployment diagrams. Descriptor form deployment diagrams - show the computing environment but does not indicate configuration details. Instance form deployment diagrams - identify specific hardware configurations and are developed in the latter stages of design. 30 UML Deployment Instance Diagram Access the text alternative for slide images. 31 Unit 10 Architectural Design What is Software Architecture? The architecture is not the operational software, it is a representation that enables a software engineer to: 1. Analyze the effectiveness of the design in meeting its stated requirements, 2. Consider architectural alternatives at a stage when making design changes is still relatively easy, and 3. Reduce the risks associated with the construction of the software. 33 Why is Software Architecture Important? Software architecture provides a representation that facilitates communication among all stakeholders interested in the development of a computer-based system. Architecture highlights early design decisions that will have a profound impact on all software engineering work that follows. Architecture constitutes a relatively small, intellectually graspable mode of how the system is structured and how its components work together. 34 Architectural Descriptions The IEEE Computer Society has proposed IEEE-Std-42010-2011, Systems and Software Engineering – Architecture Description. Describes the use of architecture viewpoints, architecture frameworks, and architecture description languages as a means of codifying the conventions and common practices for architectural description. The IEEE Standard defines an architectural description (AD) as a “a collection of products to document an architecture.” An architecture description shall identify the system stakeholders having concerns considered fundamental to the architecture of the system-of-interest. These concerns shall be considered when applicable and identified in the architecture description: system purpose, suitability of the architecture, feasibility of constructing and deploying the system, risks and impacts of the system, and the maintainability and evolvability of the system. 35 Architecture Decision Documentation 1. Determine information items needed for each decision. 2. Define links between each decision and appropriate requirements. 3. Provide mechanisms to change status when alternative decisions need to be evaluated. 4. Define prerequisite relationships among decisions to support traceability. 5. Link significant decisions to architectural views resulting from decisions. 6. Document and communicate all decisions as they are made. 36 Agility and Architecture To avoid rework, user stories are used to create and evolve an architectural model (walking skeleton) before beginning any coding. Use models which allow software architects to add user stories to the evolving storyboard and works with the product owner to prioritize the architectural stories as “sprints” (work units) are planned. Well run agile projects include delivery of architectural documentation during each sprint. After the sprint is completed, the architect reviews the working prototype for quality before the team presents it to the stakeholders in a formal sprint review. 37 Architectural Styles Each style describes a system category that encompasses: 1. set of components (for example: a database, computational modules) that perform a function required by a system. 2. set of connectors that enable “communication, coordination and cooperation” among components. 3. constraints that define how components can be integrated to form the system. 4. semantic models that enable a designer to understand the overall properties of a system by analyzing the known properties of its constituent parts. 38 Data Centered Architecture Access the text alternative for slide images. 39 Data Flow Architecture Access the text alternative for slide images. 40 Call Return Architecture Access the text alternative for slide images. 41 Object-Oriented Architecture Access the text alternative for slide images. 42 Layered Architecture Access the text alternative for slide images. 43 Model View Controller Architecture Access the text alternative for slide images. 44 Architectural Organization and Refinement 1 Control. How is control managed within the architecture? Does a distinct control hierarchy exist, and if so, what is the role of components within this control hierarchy? How do components transfer control within the system? How is control shared among components? What is the control topology (that is, the geometric form that the control takes)? Is control synchronized, or do components operate asynchronously? 45 Architectural Organization and Refinement 2 Data. How are data communicated between components? Is the flow of data continuous, or are data objects passed to the system sporadically? What is the mode of data transfer? Do data components exist, and if so, what is their role? How do functional components interact with data components? Are data components passive or active? How do data and control interact within the system? 46 Architectural Considerations Economy – software is uncluttered and relies on abstraction to reduce unnecessary detail. Visibility – Architectural decisions and their justifications should be obvious to software engineers who review. Spacing – Separation of concerns in a design without introducing hidden dependencies. Symmetry – Architectural symmetry implies that a system is consistent and balanced in its attributes. Emergence – Emergent, self-organized behavior and control are key to creating scalable, efficient, and economic software architectures. 47 Architectural Design The software must be placed into context. The design should define the external entities (other systems, devices, people) that the software interacts with and the nature of the interaction. A set of architectural archetypes should be identified. An archetype is an abstraction (similar to a class) that represents one element of system behavior. The designer specifies the structure of the system by defining and refining software components that implement each archetype. 48 Architecture Context Diagram Access the text alternative for slide images. 49 SafeHome Security Function Archetype Access the text alternative for slide images. 50 SafeHome Top-Level Component Architecture Access the text alternative for slide images. 51 SafeHome Refined Component Architecture Access the text alternative for slide images. 52 Architectural Tradeoff Analysis 1. Collect scenarios. 2. Elicit requirements, constraints, environment description. 3. Describe the architectural styles/patterns that have been chosen to address the scenarios and requirements using one of these views: module, process, data flow. 4. Evaluate quality attributes by considering each one in isolation. 5. Identify the sensitivity of quality attributes to various architectural attributes for a specific architectural style. 6. Critique candidate architectures (developed in step 3) using the sensitivity analysis (conducted in step 5). 53 Architectural Reviews Assess the ability of the software architecture to meet the systems quality requirements and identify potential risks. Have the potential to reduce project costs by detecting design problems early. Often make use of experience-based reviews, prototype evaluation, and scenario reviews, and checklists. 54 Pattern-based Architectural Reviews 1. Identify and discuss the quality attributes by walking through the use cases. 2. Discuss a diagram of system’s architecture in relation to its requirements. 3. Identify the architecture patterns used and match the system’s structure to the patterns’ structure. 4. Use existing documentation and use cases to determine each pattern’s effect on quality attributes. 5. Identify all quality issues raised by architecture patterns used in the design. 6. Develop a short summary of issues uncovered during the meeting and make revisions to the walking skeleton. 55 Unit 11 Component Level Design What is a component? OMG Unified Modeling Language Specification defines a component as “… a modular, deployable, and replaceable part of a system that encapsulates implementation and exposes a set of interfaces.”” Object-Oriented view: a component contains a set of collaborating classes. Traditional view: a component contains processing logic, internal data structures that are required to implement the processing logic, and an interface that enables the component to be invoked and data to be passed to it. Process-related view: building systems out of reusable software components or design patterns selected from a catalog (component-based software engineering). 57 Class-based Component-Level Design Access the text alternative for slide images. 58 Traditional Component-Level Design 1 Access the text alternative for slide images. 59 Basic Component Design Principles Open-Closed Principle (O C P). “A module [component] should be open for extension but closed for modification. Liskov Substitution Principle (L S P). “Subclasses should be substitutable for their base classes. Dependency Inversion Principle (D I P). “Depend on abstractions. Do not depend on concretions.” Interface Segregation Principle (I S P). “Many client-specific interfaces are better than one general purpose interface. Release Reuse Equivalency Principle (R E P). “The granule of reuse is the granule of release.” Common Closure Principle (C C P). “Classes that change together belong together.” Common Reuse Principle (C R P). “Classes that aren’t reused together should not be grouped together.” 60 Component-Level Design Guidelines Components - Naming conventions should be established for components that are specified as part of the architectural model and then refined and elaborated as part of the component-level model. Interfaces - provide important information about communication and collaboration (as well as helping us to achieve the O P C). Dependencies and Inheritance – For readability, it is a good idea to model dependencies from left to right and inheritance from bottom (derived classes) to top (base classes). 61 Cohesion Traditional view - the “single-mindedness” of a module. Object-Oriented view - cohesion implies that a component encapsulates only attributes and operations that are closely related to one another and the component itself. Levels of cohesion: Functional - module performs one and only one computation. Layer - occurs when a higher layer accesses the services of a lower layer, but lower layers do not access higher layers. Communicational - All operations that access the same data are defined within one class. 62 Coupling Traditional view - degree to which a component is connected to other components and to the external world. Object-Oriented view - qualitative measure of the degree to which classes are connected to one another. Levels of coupling. Content - occurs when one component “surreptitiously modifies data that is internal to another component. Control – occurs when control flags a passed to components to requests alternate behaviors when invoked. External - occurs when a component communicates or collaborates with infrastructure components. 63 Component-Level Design 1 Step 1. Identify all design classes that correspond to the problem domain. Step 2. Identify all design classes that correspond to the infrastructure domain. Step 3. Elaborate all design classes that are not acquired as reusable components. Step 3a. Specify message details when classes or component collaborate. Step 3b. Identify appropriate interfaces for each component. 64 Collaboration Diagram with Message Detail Access the text alternative for slide images. 65 Define Interfaces Access the text alternative for slide images. 66 Component-Level Design 2 Step 3c. Elaborate attributes and define data types and data structures required to implement them. Step 3d. Describe processing flow within each operation in detail. Step 4. Describe persistent data sources (databases and files) and identify the classes required to manage them. Step 5. Develop and elaborate behavioral representations for a class or component. Step 6. Elaborate deployment diagrams to provide additional implementation detail. Step 7. Factor every component-level design representation and always consider alternatives. 67 Describe Processing Flow Access the text alternative for slide images. 68 Elaborate Behavioral Representations Access the text alternative for slide images. 69 Component-Level Design for WebApps WebApp component is: 1. a well-defined cohesive function that manipulates content or provides computational or data processing for an end-user, or. 2. a cohesive package of content and functionality that provides end-user with some required capability. Component-level design for WebApps often incorporates elements of content design and functional design. 70 WebApp Content Design Focuses on content objects and the manner in which they may be packaged for presentation to a WebApp end-user Consider a Web-based video surveillance capability within SafeHomeAssured.com potential content components can be defined for the video surveillance capability: 1. the content objects that represent the space layout (the floor plan) with additional icons representing the location of sensors and video cameras; 2. the collection of thumbnail video captures (each an separate data object), and 3. the streaming video window for a specific camera. Each of these components can be separately named and manipulated as a package. 71 WebApp Functional Design Modern Web applications deliver increasingly sophisticated processing functions that: 1. perform localized processing to generate content and navigation capability in a dynamic fashion; 2. provide computation or data processing capability that is appropriate for the WebApp’s business domain; 3. provide sophisticated database query and access, or. 4. establish data interfaces with external corporate systems. To achieve these (and many other) capabilities, you will design and construct WebApp functional components that are identical in form to software components for conventional software. 72 Component-Level Design for Mobile Apps Thin web-based client. Interface layer only on device. Business and data layers implemented using web or cloud services. Rich client. All three layers (interface, business, data) implemented on device. Subject to mobile device limitations. 73 Traditional Component-Level Design 2 Design of processing logic is governed by the basic principles of algorithm design and structured programming. Design of data structures is defined by the data model developed for the system. Design of interfaces is governed by the collaborations that a component must effect. 74 Component-Based Software Engineering (CBSE) The software team asks: Are commercial off-the-shelf (COTS) components available to implement the requirement? Are internally-developed reusable components available to implement the requirement? Are the interfaces for available components compatible within the architecture of the system to be built? Access the text alternative for slide images. 75 CBSE Benefits Reduced lead time. It is faster to build complete applications from a pool of existing components. Greater return on investment (ROI). Sometimes savings can be realized by purchasing components rather than redeveloping the same functionality in-house. Leveraged costs of developing components. Reusing components in multiple applications allows the costs to be spread over multiple projects. Enhanced quality. Components are reused and tested in many different applications. Maintenance of component-based applications. With careful engineering, it can be relatively easy to replace obsolete components with new or enhanced components. 76 CBSE Risks Component selection risks. It is difficult to predict component behavior for black-box components, or there may be poor mapping of user requirements to the component architectural design. Component integration risks. There is a lack of interoperability standards between components; this often requires the creation of “wrapper code” to interface components. Quality risks. Unknown design assumptions made for the components makes testing more difficult, and this can affect system safety, performance, and reliability. Security risks. A system can be used in unintended ways, and system vulnerabilities can be caused by integrating components in untested combinations. System evolution risks. Updated components may be incompatible with user requirements or contain additional undocumented features. 77 Component Refactoring Most developers would agree that refactoring components to improve quality is a good practice. It is hard to convince management to expend resources fixing components that are working correctly rather than adding new functionality to them, Changing software and failing to document the changes can lead to increasing technical debt. Reducing this technical debt often involves architectural refactoring, which is generally perceived by developers as both costly and risky. Developers can make of tools to examine change histories to identify the most cost effective refactoring opportunities, 78 Unit 12 User Experience Design User Experience Design Elements 1 User experience design tries to ensure that no aspect of your software appears the final product without the explicit decision of stakeholders to include it. Strategy. Identifies user needs and customer business goals that form the basis for all UX design work. Scope. Includes both the functional and content requirements needed to realize a feature set consistent with the project strategy. Structure. Consists of the interaction design [For example, how the system reacts in response to user action] and information architecture. Skeleton. Comprised of three components: information design, interface design, navigation design. Surface. Presents visual design or the appearance of the finished project to its users. 80 User Experience Design Elements 2 Access the text alternative for slide images. 81 Information Architecture Information architecture structures lead organization, labeling, navigation, and searching of content objects. Content architecture focuses on the manner content objects are structured for presentation and navigation. Software architecture addresses the manner the application is structured to manage user interaction, effect navigation, and present content. Architecture design is conducted in parallel with interface design, aesthetic design, and content design. Decisions made during architecture design action will influence work conducted during navigation design. 82 User Interaction Design Interaction design focuses on interface between product and user. Modes of user input and output include voice input, computer speech generation, touch input, 3D printed output, immersive augmented reality experiences, and sensor tracking of users. User interaction should be defined by the stakeholders in the user stories created to describe how users can accomplish their goals using the software product. User interaction design should also include a plan for how information should be presented within such a system and how to enable the user to understand that information. It is important to recall that the purpose of the user interface is to present just enough information to help the users decide what their next action should be to accomplish their goal and how to perform it. 83 Usability Engineering Usability engineering is part of UX design work that defines the specification, design, and testing of the human-computer interaction portion of a software product. This software engineering action focuses on devising human-computer interfaces that have high usability. If developers focus on making a product easy to learn, easy to use, and easy to remember over time, usability can be measured quantitatively and tested for improvements in usability. Accessibility is the degree to which people with special needs are provided with a means to perceive, understand, navigate, and interact with computer products. Accessibility is another aspect of usability engineering that needs to be considered during design. 84 Visual Design Visual design (aesthetic design or graphic design) is an artistic endeavor that complements the technical aspects of the user experience design. Without it, a software product may be functional, but unappealing. With it, a product draws its users into a world that embraces them on an emotional as well as an intellectual level. Graphic design considers every aspect of the look and feel of a web or mobile app. Not every software engineer has artistic talent. If you fall into this category, hire an experienced graphic designer to help. 85 Golden Rule 1: Place User in Control Define interaction modes in a way that does not force a user into unnecessary or undesired actions. Provide for flexible interaction. Allow user interaction to be interruptible and undoable. Streamline interaction as skill levels advance and allow the interaction to be customized. Hide technical internals from the casual user. Design for direct interaction with screen objects. 86 Golden Rule 2: Reduce User’s Memory Load Reduce demand on short-term memory. Establish meaningful defaults. Define shortcuts that are intuitive. The visual layout of the interface should be based on a real- world metaphor. Disclose information in a progressive fashion. 87 Golden Rule 3: Make Interface Consistent Allow the user to put the current task into a meaningful context. Maintain consistency across a family of applications. If past interactive models have created user expectations, do not make changes unless there is a compelling reason to do so. 88 User Interface Design Models User model — a profile of all end users of the system. Design model — a design realization of the user model. Mental model (system perception) — the user’s mental image of what the interface is. Implementation model — the interface “look and feel” coupled with supporting information that describe interface syntax and semantics. An interface designer needs to reconcile these models and derive a consistent representation of the interface. 89 User Interface Design Process Access the text alternative for slide images. 90 User Interface Analysis and Design Interface analysis focuses on the profile of the users who will interact with the system. Interface design defines a set of interface objects and actions that enable a user to perform all defined tasks in a manner that meets every usability goal defined for the system. Interface construction normally begins with the creation of a prototype that enables usage scenarios to be evaluated. Interface validation focuses on: 1. The ability of the interface to implement every user task correctly. 2. The degree to which interface is easy to use and easy to learn. 3. The user’s acceptance of the interface as a tool in her work. 91 User Experience Analysis In the case of user experience design, understanding the problem means understanding: 1. the people (end users) who will interact with the system through the interface. 2. the tasks that end users must perform to do their work. 3. the content that is presented as part of the interface. 4. the environment in which these tasks will be conducted. 92 Using Customer Journey Map 1. Gather stakeholders. 2. Conduct research. Collect all information you can about all the things users may experience as they use the software product and define your customer phases (touchpoints). 3. Build the model. Create a visualization of the touch points. 4. Refine the design. Recruit a designer to make the deliverable visually appealing and ensure touchpoints are identified clearly. 5. Identify gaps. Note any gaps in the customer experience or points of friction or pain (poor transition between phases). 6. Implement your findings. Assign responsible parties to bridge the gaps and resolve pain points found. 93 Customer Journey Map Access the text alternative for slide images. 94 Creating and Using Personas in UX Design Data collection and analysis. Stakeholders collect information about proposed product users and determine the user group needs. Describe personas. The developers need to decide how many personas to create and decide which persona will be their focus. Develop scenarios. Scenarios are user stories about how personas will use the product being developed. They may focus on the touchpoints and obstacles described in the customer journey. Acceptance by stakeholders. Often this is done by validating the scenarios using a review technique or demonstration called cognitive walkthrough (stakeholders assume the role defined by a persona and work through a scenario using a system prototype). 95 Persona Example Access the text alternative for slide images. 96 Task Analysis Goal of task (scenario) analysis is to answer the following questions: What work will the user perform in specific circumstances? What tasks and subtasks will be performed as the user does the work? What specific problem domain objects will the user manipulate as work is performed? What is the sequence of work tasks—the workflow? What is the hierarchy of tasks? 97 Iterative UX Design Process Access the text alternative for slide images. 98 Google 5-Day UX Design Sprint 1 Understand. User research activities (user needs and business goals) for the software product. This information is posted on whiteboards (For example, customer journey maps, personas, user task workflow) for easy reference throughout the sprint. Sketch. Individual stakeholders are given the time and space needed to brainstorm solutions to the problems discovered in the understand phase. Paper drawings and notes are easy to generate, easy to modify, and quite inexpensive. Decide. Each stakeholder presents his solution sketch and the team votes to determine the solutions that should be tackled in the prototyping activities that will follow. If there is not a clear consensus following the voting, the development team may decide to consider assumptions that involve project constraints and resources. 99 Google 5-Day UX Design Sprint 2 Prototype. May be a minimally viable product based on the solution selected from the sketch phase, or it may be based on the portions of the customer journey map or storyboard you want to evaluate with potential users in the validate phase. This means the team should be developing test cases based on the user stories as the prototype is being built. Validate. Every developer watching users try out the prototype this is the best way to discover major issues with its UX design, which in turn lets you start iterating immediately. This is critical to capturing potential learning opportunities by exposing product decision makers to user feedback in real time. 100 Interface Design Evaluation Cycle Access the text alternative for slide images. 101 User Interface Design Evaluation Criteria The design model (user stories, storyboard, personas, etc.) of the interface can be evaluated during early design reviews: 1. Length and complexity of the requirements model or written specification of the system and its interface provide an indication of the amount of learning required by users of the system. 2. Number of user tasks specified and the average number of actions per task provide an indication of interaction time and the overall efficiency of the system. 3. Number of actions, tasks, and system states indicated by the design model imply the memory load on users of the system. 4. Interface style, help facilities, and error-handling protocol provide a general indication of the complexity of the interface and the degree to which it will be accepted by the user. 102 Usability Guidelines 1 Anticipation. An application should be designed so that it anticipates the user’s next move. Communication. The interface should communicate the status of any activity initiated by the user. Consistency. The use of navigation controls, menus, icons, and aesthetics (For example, color, shape, layout) should be consistent throughout. Controlled Autonomy. The interface should facilitate user movement throughout the application, but it should do so in a manner that enforces navigation conventions that have been established for the application. Efficiency. The design of the application and its interface should optimize the user’s work efficiency. 103 Usability Guidelines 2 Flexibility. The interface should be flexible enough to enable some users to accomplish tasks directly and others to explore the application in a somewhat random fashion. Focus. The interface (and the content it presents) should stay focused on the user task(s) at hand. Human Interface Objects. A vast library of reusable human interface objects has been developed for both Web and mobile apps. Use them. Latency Reduction. Rather than making the user wait for some internal operation to complete (for example, downloading a complex graphical image), the application should use multitasking in a way that lets the user proceed with work as if the operation has been completed. 104 Usability Guidelines 3 Learnability. An application interface should be designed to minimize learning time and, once learned, to minimize relearning required when the app is revisited. Metaphors. An interface that uses an interaction metaphor is easier to learn and easier to use, as long as the metaphor is appropriate for the application and the user. Readability. All information presented through the interface should be readable by young and old. Track State. When appropriate, the state of the user interaction should be tracked and stored so that a user can log off and return later to pick up where he left off. Visible Navigation. A well-designed interface provides the illusion that users are in the same place, with the work brought to them. 105 Accessibilty Guidelines 1 Application Accessibility. Software engineers must ensure that interface design encompasses mechanisms that enable easy for people with special needs. Response Time. System response time has two important characteristics: length and variability. Aim for consistency to avoid user frustration. Help Facilities. Modern software should provide online help facilities that enable a user to get a question answered or resolve a problem without leaving the interface. Error Handling. Every error message or warning produced by an interactive system should: use user understandable jargon, provide constructive error recovery advice, identify negative consequences of errors, contain an audible or visual cue, and never blame user for causing the error. 106 Accessibilty Guidelines 2 Menu and Command Labeling. The use of window-oriented, point- and-pick interfaces has reduced reliance on typed commands. How every it is important to: ensure every menu option has a command version, make commands easy for users to type, make commands easy to remember, allow for command abbreviation, make sure menu labels are self-explanatory, make sure submenus match style of master menu items, and ensure command conventions work across the family of applications. Internationalization. Software engineers and their managers invariably underestimate the effort and skills required to create user interfaces that accommodate the needs of different locales and languages. 107 Unit 13 Mobile Design Mobile Development Challenges Mobile devices have many features in common with each other, but often provide very different user experiences. Some users expect the same features provided on their laptops. Other users like freedom that portable devices give them and accept reduced functionality in a mobile software product version. Some users expect unique experiences not possible on traditional computing or entertainment devices. The user’s perception of “goodness” might be more important than any of the technical quality dimensions of the mobile product itself. Software engineers should craft a user experience that takes advantage of device characteristics and context-aware applications. Testing mobile software products provides additional challenges. 109 Mobile Technical Considerations Multiple hardware and software platforms. Many development frameworks and programming languages. Many app stores with different rules and tools. Very short development cycles. User interface limitations and complexities of interaction with sensors and cameras. Effective use of context. Power management. Security and privacy models and policies. Computational and storage limitations. Applications that depend on external services. Testing complexity. 110 Mobile Development Life Cycle Inception. Goals, features, and functions of the mobile product are identified to determine the scope and the size of the first increment. Design. Developers define the app user experience using screen mockups and paper prototypes to help a user interface design that will take different screen sizes and capabilities into account. Development. Mobile software is coded, test cases are created. Usability and accessibility tests conducted as the product evolves. Stabilization. Most mobile products go through a series of prototypes: feasibility (one logic path ); alpha prototype (minimum viable product); beta prototype (largely complete); and release candidate (all required functionality) ready for product owner review. Deployment. Once stabilized a mobile product is reviewed by a commercial app store and made available for sale and download. 111 Useful Mobile User Interface Design Models A platform model describes the constraints imposed by each platform to be supported. A presentation model describes the appearance of the user interface. The task model is a structured representation of the tasks a user needs to perform to meet her task goals. 112 Mobile User Interface Design Considerations Define user interface brand signatures. Focus the portfolio of products. Identify the core user stories. Optimize user interface flows and elements. Define scaling rules. User performance dashboard. Champion-dedicated user interface engineering skills. 113 Mobile User Interface Evaluation In trying to meet stakeholder usability expectations, mobile developers should attempt to answer these questions to assess the out-of-the-box readiness of the device: Is the user interface consistent across applications? Is the device interoperable with different network services? Is the device acceptable in terms of stakeholder values in the target market area? 114 Mobile Design Approaches Usage Scenarios. Must consider context variables (location, user, and device) and transitions between contextual scenarios (locations and settings, movement and posture, devices and usages, workloads and distractions, user preferences). Ethnographic Observation. Used method to gather information about representative users of a software product by observing them as they use the product in a natural setting. Can be tricky to observe them without interfering with their product use. Low-Fidelity Paper Prototypes (for example: cards or Post-it notes). Cost-effective usability assessment approach in user interface design that can be used before any programming takes place. It is important for these prototypes to be similar in size, weight, appearance to allow their use in a variety of contexts. 115 Mobile Design Mistakes Kitchen sink. Avoid adding too many features to the app and too many widgets on the screen. Inconsistency. Set standards for page navigation, menu use, buttons, tabs, and other UI elements. Stick to uniform look and feel. Overdesigning. Remove unnecessary elements and wasteful graphics. Do not be tempted to add things without thinking. Lack of speed. Users do not care about device constraints—they want to view things quickly. Preload what you can. Verbiage. Unnecessarily long, wordy menus and screen displays Nonstandard interaction. Take advantage of the user’s experience with the way things are done on the platform. Help-and-FAQ-itis. Adding online help is not the way to repair a poorly designed user interface. 116 Services Computing Focuses on architectural design and enables application development through service discovery and composition. Allows mobile app developers to avoid the need to integrate service source code into the client running on a mobile device. Runs out of the provider’s server and is loosely coupled with applications that use it via messaging protocols. Provides an API (application programming interface) to allow service to be treated like an abstract black box. 117 Cloud Computing Cloud architecture has three service layers Software as service layer consists of software components and applications hosted by third-party service providers. Platform as service layer provides a collaborative development platform to assist with design, implementation, and testing by geographically distributed team members. Infrastructure and service provides virtual computing resources (storage, processing power, network connectivity) on the cloud. 118 Context-Aware Apps Context allows the creation of apps based on the location of the mobile device and the device functionality to be delivered. Context helps tailor personal computer apps for mobile devices. Mobile computing merges real and virtual worlds by allowing devices to be aware of other objects and its surroundings. Device must detect the presence and identity of a user, as well as the attributes of the context that are relevant for that user. Extracting relevant context information from several sensors is challenging (for example: noise, miscalibration, wear and tear, weather). Event-based communication is preferable to the management of continuous streams of high-abstraction-level data in context-aware applications. 119 Web Design Pyramid Access the text alternative for slide images 120 Objectives of Web Interface Design Establish a consistent window into the content and functionality provided by the interface. To achieve a consistent interface, you should use visual design to establish a coherent “look.” Guide the user through series of WebApp interactions. You may draw on an appropriate metaphor that enables the user to gain an intuitive understanding of the interface. Organize navigation options available to the user. It is important to note that one or more navigation mechanisms should be provided at every level of the content hierarchy. 121 Aesthetic Design Don’t be afraid of white space. Emphasize content. Organize layout elements from top-left to bottom right. Group navigation, content, and function geographically within the page. Don’t extend your real estate with the scrolling bar. Consider resolution and browser window size when designing layout. 122 Content Design Content design develops a representation for content objects. A content object has attributes that include content-specific information and implementation-specific attributes that are specified as part of design. For WebApps, a content object is more closely aligned with a data object for conventional software. 123 Architecture Design Architecture design is conducted in parallel with interface design, aesthetic design and content design. Content architecture focuses on the manner in which content objects (or composite objects such as Web pages) are structured for presentation and navigation. Information architecture is also used to connote structures that lead to better organization, labeling, navigation, and searching of content objects. WebApp architecture addresses ways the application is structured to manage user interaction, handle processing tasks, effect navigation, and present content. 124 Model View Controller (MVC) Access the text alternative for slide images 125 WebApp MVC Architecture The model contains application specific content and processing logic: all content objects. access to external data/information sources, all processing functionality that are application specific. The view contains all interface specific functions and enables presentation of content and processing logic. access to external data/information sources, all processing functionality required by the end-user. The controller manages access to the model and the view and coordinates the flow of data between them. 126 Navigation Design Begins with a consideration of the user hierarchy and related use-cases Each actor may use the WebApp somewhat differently and therefore have different navigation requirements. As each user interacts with the WebApp, she encounters a series of navigation semantic units (NSUs) NSU—“a set of information and related navigation structures that collaborate in the fulfillment of a subset of related user requirements”. 127 Creating NSU Access the text alternative for slide images 128 Mobile Component Design Mobile apps deliver sophisticated processing functions that: 1. Perform localized processing to generate content and navigation capability in a dynamic fashion. 2. Provide computation or data processing capability that are appropriate for the app’s business domain. 3. Provide sophisticated database query and access, and 4. Establish data interfaces with external corporate systems. To achieve these (and many other) capabilities, you must design and construct program components that are identical in form to software components for traditional software. 129 Mobility and Web Quality Access the text alternative for slide images 130 Mobility and Design Quality 1 Security Rebuff external attacks. Exclude unauthorized access. Ensure the privacy of users/customers. Availability Percentage of time that an is available for use. Scalability Can the app and the systems with which it is interfaced handle significant variation in user or transaction volume. 131 Mobility and Design Quality 2 Time to Market Measure of quality from a business point of view. First mobile product to address a specific market segment often captures the most end users. Content Quality Lots of competition on the web. How does the user assess the quality (for example: veracity, accuracy, completeness, timeliness) of the content that is presented within a mobile product? This is part of what data science tries to address. 132 Mobility Product Quality Checklist 1 Can content and/or function and/or navigation options be tailored to the user’s preferences? Can content and/or functionality be customized to the bandwidth at which the user communicates? Does the app account for weak or lost signal in an acceptable manner? Can content and/or function and/or navigation options be made context aware according to the user’s preferences? Has adequate consideration been given to the power availability on the target device(s)? Have graphics, media (audio, video), and other web or cloud services been used appropriately? 133 Mobility Product Quality Checklist 2 Is the overall page design easy to read and navigate? Does the app take screen size differences into account? Does the user interface conform to the display and interaction standards adopted for the targeted mobile device(s)? Does the app conform to the reliability, security, and privacy expectations of its users? What provisions have been made to ensure app remains current? Has the mobile product been tested in all targeted user environments and for all targeted devices? 134 Mobility Design Best Practices Identify the audience. Design for context of use. There is a fine line between simplicity and laziness. Use the platform as an advantage. Make scrollbars and selection highlighting more salient. Increase discoverability of advanced functionality. Use clear and consistent labels. Cleaver icons should never be developed at the expense of user Understanding. Support user expectations for personalization. Long scrolling forms trump multiple screens on mobile devices. 135 Unit 14 Design Patterns Design Patterns Design pattern can be thought of as a three-part rule which expresses a relation between a certain context, a problem, and a solution. Context allows the reader to understand the environment in which the problem resides and what solution might be appropriate within that environment. Requirements, including limitations and constraints, acts as a system of forces that influences how: The problem can be interpreted within its context. The solution can be effectively applied. 137 Effective Design Pattern Solves a problem: Patterns capture solutions, not just abstract principles or strategies. Proven concept: Patterns capture solutions with proven track records, not theories or speculation. Solution isn't obvious: The best patterns generate a solution to a problem indirectly--a necessary approach for the most difficult problems of design. Describes a relationship: Patterns don't just describe modules, but describe deeper system structures and mechanisms. Elegant in its approach and utlity: describes simple solutions to specific problems; the best patterns explicitly appeal to aesthetics and usefulness. 138 Kinds of Patterns 1 Architectural patterns describe broad-based design problems that are solved using a structural approach. Data patterns describe recurring data-oriented problems and the data modeling solutions that can be used to solve them. Component patterns (design patterns) address problems associated with the development of subsystems and components, the manner in which they communicate with one another, and their placement within a larger architecture. 139 Kinds of Patterns 2 Interface design patterns describe common user interface problems and their solution with a system of forces that includes the specific characteristics of end-users. WebApp patterns address a problem set that is encountered when building WebApps and often incorporate many of other patterns categories. Mobile patterns describe solutions to problems commonly encountered when developing solutions for mobile platforms. 140 Kinds of Patterns 3 Creational patterns focus on “creation, composition, and representation of objects” Abstract factory pattern: centralize decision of what factory to instantiate. Builder pattern: separates the construction of a complex object from its representation. Structural patterns focus on problems and solutions associated with how classes and objects are organized and integrated to build a larger structure: Adapter pattern: 'adapts' one interface for a class into one that a client expects. Container pattern: create objects for the sole purpose of holding other objects and managing them. Behavioral patterns address problems associated with the assignment of responsibility between objects and the manner in which communication is effected between objects: Chain of responsibility pattern: Command objects are handled or passed on to other objects by logic-containing processing objects. Command pattern: Command objects encapsulate an action and its parameters. 141 Frameworks Patterns themselves may not be sufficient to develop a complete design. In some cases it may be necessary to provide an implementation-specific skeletal infrastructure, called a framework, for design work. You can select a reusable architecture that provides the generic structure and behavior for a family of software abstractions along with their context which specifies use within a given domain. A framework is not an architectural pattern, but rather a skeleton with a collection of “plug points” (hooks or slots) that enable it to be adapted to a specific problem domain. Plug points enable you to integrate problem specific classes or functionality within the skeleton. Collection of cooperating classes. 142 Pattern Description 1 Pattern name—describes the essence of the pattern in a short but expressive name Problem—describes the problem that the pattern addresses Motivation—provides an example of the problem Context—describes the environment in which the problem resides including application domain Forces—lists the system of forces that affect the manner in which the problem must be solved; includes a discussion of limitation and constraints that must be considered Solution—provides a detailed description of the solution proposed for the problem 143 Pattern Description 2 Intent—describes the pattern and what it does Collaborations—describes how other patterns contribute to the solution Consequences—describes the potential trade-offs that must be considered when the pattern is implemented and the consequences of using the pattern Implementation—identifies special issues that should be considered when implementing the pattern Known uses—provides examples of actual uses of the design pattern in real applications Related patterns—cross-references related design patterns 144 Pattern-Based Design A software designer begins with a requirements model (either explicit or implied) that presents an abstract representation of the system. The requirements model describes the problem set, establishes the context, and identifies the system of forces that hold sway. If you discover you are faced with a problem, context, and system of forces that have solved before then use that solution. If it is a new problem then use the methods and modeling tools available for architectural, component-level, and interface design to create a new solution (pattern). 145 Pattern-Based Design in Context Access the text alternative for slide images. 146 Thinking in Patterns 1. Be sure you understand big picture (requirements model) - the context in which the software to be built resides. 2. Examining the big picture, extract the patterns that are present at that level of abstraction. 3. Begin your design with ‘big picture’ patterns that establish a context or skeleton for further design work. 4. Work inward from the context, look for patterns at lower levels of abstraction that contribute to design solution. 5. Repeat steps 1 to 4 until complete design is fleshed out. 6. Refine the design by adapting each pattern to the specifics of the software you’re trying to build. 147 Design Tasks 1 1. Examine the requirements model and develop a problem hierarchy. 2. Determine if a reliable pattern language has been developed for the problem domain. 3. Beginning with a broad problem, determine whether one or more architectural patterns are available for it. 4. Using the collaborations provided for the architectural pattern, examine subsystem or component level problems, and search for patterns to address them. 148 Design Tasks 2 5. Repeat steps 2 through 5 until all broad problems have been addressed. 6. If user interface design problems have been isolated, search the user interface design pattern repositories for appropriate patterns. 7. Regardless of its level of abstraction, if a pattern language and/or patterns repository or individual pattern shows promise, compare the problem to be solved against the existing pattern(s) presented. 8. Be certain to refine the design as it is derived from patterns using design quality criteria as a guide. 149 Pattern Organizing Table Access the text alternative for slide images. 150 Common Mistakes Not enough time has been spent to understand the underlying problem, its context and forces, and as a consequence, you select a pattern that looks right, but is inappropriate for the solution required. Once the wrong pattern is selected, you refuse to see your error and force fit the pattern. In other cases, the problem has forces that are not considered by the pattern you’ve chosen, resulting in a poor or erroneous fit. Sometimes a pattern is applied too literally and the required adaptations for your problem space are not implemented. 151 Architectural Patterns Example: every house (and every architectural style for houses) employs a Kitchen pattern. Kitchen pattern and patterns it collaborates with address problems associated with storage and preparation of food, tools required to accomplish these tasks, and rules for placement of these tools relative to workflow in the room. The pattern might address problems associated with counter tops, lighting, wall switches, a central island, flooring, and so on. Obviously, there is more than a single design for a kitchen, but every design can be conceived within the context and system forces of the ‘solution’ suggested by the Kitchen pattern. 152 Component-Level Design Patterns 1 Component-level design patterns provide a proven solution that addresses one or more sub-problems extracted from the requirement model. In many cases, design patterns of this type focus on some functional element of a system. For example: the SafeHomeAssured.com application must address the following design sub-problem: How can we get product specifications and related information for any SafeHome device? 153 Component-Level Design Patterns 2 Having enunciated the sub-problem that must be solved, consider context and the system of forces that affect the solution. Examining the appropriate requirements model use case, the specification for a SafeHome device (for example: a security sensor or camera) is used for informational purposes by the consumer. However, other information that is related to the specification (for example: pricing) may be used when e-commerce functionality is selected. The solution to the sub-problem involves a search. Since searching is a very common problem, it should come as no surprise that there are many search-related patterns. 154 Search Patterns HelpWizard. Users need help on a certain topic related to the website or when they need to find a specific page within the site. SearchArea. Users must find a page. SearchTips. Users need to know how to control the search engine. SearchResults. Users must process a list of search results. SearchBox. Users must find an item or specific information. 155 Anti-Patterns Anti-patterns describe commonly used solutions to design problems that usually have negative effects on software quality. Anti-patterns can provide tools to help developers recognize when these problems exist and may provide detailed plans for reversing the underlying problem causes and implementing better solutions to these problems. Anti-patterns can provide guidance to developers looking for ways to refactor software to improve its quality. Anti-patterns can be used by technical reviewers to uncover areas of concern. 156 Selected Anti-Patterns Blob. Single class with large number of attributes, operators, or both. Stovepipe system. A barely maintainable assemblage of ill-related components. Boat anchor. Retaining a part of system that no longer has any use. Spaghetti code. Program whose structure is barely comprehensible, especially because of misuse of code structures. Copy and paste programming. Copying existing code several times rather than creating generic solutions. Silver bullet. Assume that a favorite technical solution will always solve a larger process or problem. Programming by permutation. Trying to approach a solution by successively modifying the code to see if it works. 157 User Interface (UI) Patterns Whole UI. Provide design guidance for top-level structure and navigation throughout the entire interface. Top-level Navigation. Provides a top-level menu, often coupled with a logo or identifying graphic, that enables direct navigation to any of the system’s major functions. Page layout. Address the general organization of pages (for Websites) or distinct screen displays (for interactive applications). E-commerce. Specific to Web sites, these patterns implement recurring elements of e-commerce applications. Shopping cart. Provides a list of items selected for purchase. 158 Mobility Design Patterns Check-in screens. How do I check in from a specific location, make a comment, and share comments with friends and followers on a social network? Maps. How do I display a map within the context of an app that addresses some other subject? Popovers. How do I represent a message or information that arises in real time or as the consequence of a user action? Sign-up flows. How do I provide a simple way to sign in or register for information or functionality? Custom tab navigation. How do I represent a variety of different content objects in a manner that enables user to select one? Invitations. How do I inform the user that he must participate in some action or dialog? 159