Lecture 2 – The Context of Software Architecture

Slides:



Advertisements
Similar presentations
1 Requirements and the Software Lifecycle The traditional software process models Waterfall model Spiral model The iterative approach Chapter 3.
Advertisements

Virtual University - Human Computer Interaction 1 © Imran Hussain | UMT Imran Hussain University of Management and Technology (UMT) Lecture 16 HCI PROCESS.
The software process A software process is a set of activities and associated results which lead to the production of a software product. This may involve.
Chapter 4 Quality Assurance in Context
Chapter 2 – Software Processes
University of Southern California Center for Systems and Software Engineering Design-Code Review Preparation Pongtip Aroonvatanaporn CSCI577b Spring 2012.
CS540 Software Design Lecture 1 1 Lecture 1: Introduction to Software Design Anita S. Malik Adapted from Budgen (2003) Chapters 1.
Copyright © Richard N. Taylor, Nenad Medvidovic, and Eric M. Dashofy. All rights reserved. Architectures in Context Software Architecture Lecture 2.
Software Processes: Traditional CSCI102 - Systems ITCS905 - Systems MCS Systems.
Creating Architectural Descriptions. Outline Standardizing architectural descriptions: The IEEE has published, “Recommended Practice for Architectural.
Software Architecture in Practice
1 Software Testing and Quality Assurance Lecture 1 Software Verification & Validation.
The Software Product Life Cycle. Views of the Software Product Life Cycle  Management  Software engineering  Engineering design  Architectural design.
Copyright © Richard N. Taylor, Nenad Medvidovic, and Eric M. Dashofy. All rights reserved. Architectures in Context Software Architecture Lecture 2.
Architectural Design Establishing the overall structure of a software system Objectives To introduce architectural design and to discuss its importance.
Lecture 2 Software Processes CSC301-Winter 2011 Hesam C. Esfahani
Chapter 2 The process Process, Methods, and Tools
Copyright © Richard N. Taylor, Nenad Medvidovic, and Eric M. Dashofy. All rights reserved. Architectures in Context Software Architecture Lecture 2.
 CS 5380 Software Engineering Chapter 2 – Software Processes Chapter 2 Software Processes1.
HCI in Software Process Material from Authors of Human Computer Interaction Alan Dix, et al.
1 Chapter 5 Software Engineering Practice. 2 What is “Practice”? Practice is a broad array of concepts, principles, methods, and tools that you must consider.
Acknowledgement: some slides from Richard N. Taylor, Nenad Medvidovic, and Eric M. Dashofy. Software Architecture EECE417 Lecture 3.
SOFTWARE DESIGN AND ARCHITECTURE LECTURE 05. Review Software design methods Design Paradigms Typical Design Trade-offs.
Review of Software Process Models Review Class 1 Software Process Models CEN 4021 Class 2 – 01/12.
Chapter 2 – Software Processes Lecture 1 Chapter 2 Software Processes1.
MODEL-BASED SOFTWARE ARCHITECTURES.  Models of software are used in an increasing number of projects to handle the complexity of application domains.
CSE 303 – Software Design and Architecture
CS223: Software Engineering Lecture 2: Introduction to Software Engineering.
 Many models have been proposed to deal with the problems of defining activities and associating them with each other  The first model proposed was the.
Banaras Hindu University. A Course on Software Reuse by Design Patterns and Frameworks.
Introduction to Software Engineering 1. Software Engineering Failures – Complexity – Change 2. What is Software Engineering? – Using engineering approaches.
LECTURE 5 Nangwonvuma M/ Byansi D. Components, interfaces and integration Infrastructure, Middleware and Platforms Techniques – Data warehouses, extending.
Design Engineering 1. Analysis  Design 2 Characteristics of good design 3 The design must implement all of the explicit requirements contained in the.
Software Development Module Code: CST 240 Chapter 6: Software Maintenance Al Khawarizmi International College, AL AIN, U.A.E Lecturer: Karamath Ateeq.
The Software Lifecycle Stuart Faulk. Definition Software Life Cycle: evolution of a software development effort from concept to retirement Life Cycle.
Advanced Software Engineering Dr. Cheng
TK2023 Object-Oriented Software Engineering
Software Quality Control and Quality Assurance: Introduction
IS301 – Software Engineering V:
Lecture 3 Prescriptive Process Models
CIM Modeling for E&U - (Short Version)
CS 389 – Software Engineering
Software Verification and Validation
Chapter 10 Software Quality Assurance& Test Plan Software Testing
Object-Oriented Software Engineering Using UML, Patterns, and Java,
Software Architecture
Chapter 18 Maintaining Information Systems
The Systems Engineering Context
IEEE Std 1074: Standard for Software Lifecycle
Software Engineering and Best Practices
Advance Software Engineering
Software Process Models
Chapter 2: Software Process Models
HCI in the software process
The design process Software engineering and the design process for interactive systems Standards and guidelines as design rules Usability engineering.
The design process Software engineering and the design process for interactive systems Standards and guidelines as design rules Usability engineering.
Requirements and the Software Lifecycle
Chapter 2 – Software Processes
CSSSPEC6 SOFTWARE DEVELOPMENT WITH QUALITY ASSURANCE
CSSSPEC6 SOFTWARE DEVELOPMENT WITH QUALITY ASSURANCE
HCI in the software process
Chapter 7 –Implementation Issues
CS310 Software Engineering Lecturer Dr.Doaa Sami
Architectures in Context
Chapter 2: Software Process Models
HCI in the software process
Architectures in Context
Human Computer Interaction Lecture 14 HCI in Software Process
Chapter 2 Software Processes
Presentation transcript:

Lecture 2 – The Context of Software Architecture Software Engineering Lecture 2 – The Context of Software Architecture

In this lecture Where does architecture fit into the software development lifecycle? What does architecture influence?

The architect https://www.youtube.com/watch?v=sQCBfuV5qVg

Fundamental Understanding Architecture is a set of principal design decisions about a software system Three fundamental understandings of software architecture Every application has an architecture Every application has at least one architecture Architecture is not a phase of development

Wrong View: Architecture as a Phase Treating architecture as a phase denies its foundational role in software development More than “high-level design” Architecture is also represented, e.g. by object code, source code, …

The world – view from New York

Context of Software Architecture Requirements Design Implementation Analysis and Testing Evolution Development Process

Requirements Analysis Traditionally: requirements analysis is done independently of design without reference to existing architectures it becomes difficult to assess practicality, schedules, or costs In building architecture we talk about specific rooms… …rather than the abstract concept “means for providing shelter” new products come from the observation of existing solution and their limitations

New Perspective on Requirements Analysis Existing designs and architectures provide the solution vocabulary Our understanding of what works now, and how it works, affects our wants and needs Our experiences with existing systems helps us imagine what might work and enables us to assess development time and costs  Requirements analysis and consideration of design must be pursued at the same time

The regal ship Vasa Could have been avoided by: Utilizing successful architectural practices Using methods for assessing the architecture Incremental architectural-based development Find faults early

The Twin Peaks Model

Design and Architecture Design is central to software development It creates part of a system’s architecture Traditional Design Phase decisions concern A system’s structure Identification of its primary components Their interconnections Architecture denotes the set of principal design decisions about a system That is more than just structure

Architecture-Centric Design Traditional design suggests translating requirements into algorithms, so a programmer can implement them Architecture-centric design stakeholder issues decision about use of off-the-shelf components overarching style and structure package and primary class structure deployment issues post implementation/deployment issues

Implementation Is this correct? [Cited from https://github.com/ReactiveX/RxJava/issues/1661 by headinthebox] … we should not forget that ultimately it is all (and only) about code (http://www.wired.com/2012/02/zuck-letter/). Hacking is also an inherently hands-on and active discipline. Instead of debating for days whether a new idea is possible or what the best way to build something is, hackers would rather just prototype something and see what works. There’s a hacker mantra that you’ll hear a lot around Facebook offices: “Code wins arguments.” No code base I have worked on had any design documents that you can rely on to understand the architecture of the code (if it exists, it is out of date in less than a week, anything artifact that does not break the build is not worth maintaining), the best skill student can learn is to dive into a giant code base and be up to speed quickly so they can contribute meaningfully. Is this correct?

Implementation “Hacking” vs. Designing and implementing? What are the consequences of focusing solely on producing working code? When is “Hacking” appropriate, when is it not?

Implementation The objective is to create machine-executable source code That code should be faithful to the architecture Alternatively, it may adapt the architecture How much adaptation is allowed? Architecturally-relevant vs. -unimportant adaptations It must fully develop all outstanding details of the application

Faithful Implementation All of the structural elements in the architecture are implemented Source code must not utilize major new computational elements that have no corresponding elements in the architecture Source code must not contain new connections between architectural elements that are not found in the architecture Is this realistic? Overly constraining? What if we deviate from this?

Unfaithful Implementation The implementation does have an architecture It is latent, as opposed to what is documented. Failure to recognize the distinction between planned and implemented architecture robs one of the ability to reason about the application’s architecture in the future misleads all stakeholders regarding what they believe they have as opposed to what they really have makes any development or evolution strategy that is based on the documented (but inaccurate) architecture doomed to failure

Implementation Strategies Generative techniques e.g. parser generators Frameworks collections of source code with identified places where the engineer must “fill in the blanks” Middleware CORBA, DCOM, RPC, … Reuse-based techniques Commercial off-the-shelf, open-source, in-house Writing all code manually

Analysis and Testing Analysis and testing are activities undertaken to assess the qualities of an artifact The earlier an error is detected and corrected the lower the aggregate cost Rigorous representations are required for analysis, so precise questions can be asked and answered

Analysis of Architectural Models Formal architectural model can be examined for internal consistency and correctness An analysis on a formal model can reveal Component mismatch Incomplete specifications Undesired communication patterns Deadlocks Security flaws It can be used for size and development time estimations

Analysis of Architectural Models (continued) may be examined for consistency with requirements may be used in determining analysis and testing strategies for source code may be used to check if an implementation is faithful

Evolution and Maintenance All activities that chronologically follow the release of an application Software will evolve Regardless of whether one is using an architecture-centric development process or not The traditional software engineering approach to maintenance is largely ad hoc Risk of architectural decay and overall quality degradation Architecture-centric approach Sustained focus on an explicit, substantive, modifiable, faithful architectural model

Architecture-Centric Evolution Process Motivation Evaluation or assessment Design and choice of approach Action includes preparation for the next round of adaptation

Processes Traditional software process discussions make the process activities the focal point In architecture-centric software engineering the product becomes the focal point No single “right” software process for architecture-centric software engineering exists

Steps in any process Making a business case for the system Understanding the architecturally significant requirements Creating or selecting the architecture Documenting and communicating the architecture Analyzing or evaluating the architecture Implementing and testing the system based on the architecture Ensuring that the implementation conforms to the architecture

Architecture and business goals

Stakeholders p. 54-55

Discussion What kind of business goals have driven the construction of the following: The world wide web? Google’s android platform? What effect has that had on the construction and the architecture?

Summary (1) software architecture affects every aspect of the classical software engineering activities The requirements activity is a co-equal partner with design activities The design activity is enriched by knowledge gained in previous product developments The implementation activity is centered on creating a faithful implementation of the architecture utilizes a variety of techniques to achieve this in a cost-effective manner

Summary (2) Analysis and testing activities can be focused on and guided by the architecture Evolution activities revolve around the product’s architecture. An equal focus on process and product results from a proper understanding of the role of software architecture