1 Lecture 1 2 Origins and Importance of Software Architecture Software architecture has been implicitly employed by software engineers for years even before it was formally recognized It plays a crucial role in addressing challenges in large scale systems particularly in managing complexity and enabling software reuse Many concepts in software architecture have been adapted from other engineering disciplines and applied to the specific needs of software development 3 Software Engineering Difficulties Software engineers face unique challenges compared to other engineering fields Unlike physical systems software is intangible and highly complex often requiring engineers to conform to changing external factors such as hardware or environmental conditions 3 1 Frederick P Brooks Essential and Accidental Difficulties Accidental difficulties These are problems caused by inadequate tools outdated practices or hardware limi tations and they can usually be solved For instance improvements in programming languages and development tools have greatly increased productivity Essential difficulties These are inherent to software itself and include Complexity As software grows so does its complexity often at a nonlinear rate Conformity Software must conform to external systems and hardware adding layers of complexity Changeability Software is seen as easily modifiable and as such it must constantly adapt to new applica Intangibility Software lacks a physical presence making it more difficult to visualize and manage compared tions users and standards to traditional engineering projects 4 Solutions and Tools for Software Engineering Over the years several tools and methodologies have emerged to address accidental difficulties These include High level programming languages e g Python Java Continuous Integration Deployment CI CD REST APIs Multi platform frameworks e g React Flutter While these tools have significantly increased productivity essential difficulties remain and require a focus on proper system design and architecture 5 Role of Architecture in Software Development Software architecture is the set of principal design decisions that shape a system s construction and evolution It acts as a blueprint guiding the structure behavior interaction and non functional properties e g performance security of the system 5 1 Key Features of Software Architecture Structure The organization of system components Behavior How components interact and respond to changes Interaction Communication patterns between components Non functional properties Attributes like scalability reliability and security 6 Analogies with Building Architecture There are useful parallels between building architecture and software architecture Like buildings software systems have architects responsible for planning and overseeing construction However software is far more malleable and lacks the tangible constraints of physical materials which makes the analogy limited in some respects 1 7 Primacy of Design In software architecture design is more important than the development process itself A well architected system will have lasting benefits allowing for easier scalability and maintainability Over time software architecture has evolved into a discipline with architectural styles e g microservices layered architecture that guide system design much like Victorian or Gothic styles in buildings 8 Reuse in Software Architecture One of the most significant benefits of a well architected system is the potential for reuse By reusing patterns structures and components across systems engineers can Reduce development time and costs Improve reliability Simplify the task of building complex systems 9 Examples of Architecture in Action World Wide Web WWW The web s architecture is a prime example of scalability and adaptability Its design principles such as stateless interactions and the use of URLs enable it to handle a vast number of users and resources globally Desktop Systems Unix like systems use pipes and filters where applications can be connected via text streams This simple architectural concept allows for the combination of tools by non programmers increasing flexibility Product Lines In consumer electronics such as TVs architecture allows manufacturers to reuse components across different models such as those with and without streaming capabilities This reuse reduces development costs and improves system reliability 10 The Big Idea The Centrality of Software Architecture The big idea is that software architecture must be at the heart of system design and development Only by focusing on architecture can a system s development and long term evolution be efficient and effective A system s architecture serves as the foundation for its scalability maintainability and adaptability to future needs 2 11 Lecture 2 Introduction to Software Architecture Software architecture refers to the set of principal design decisions about a software system It acts as a blueprint for both the system s construction and evolution Architecture decisions cover the system s structure behavior interactions and non functional properties e g performance security 12 Reorientation of Software Engineering The concept of software engineering SE emerged from conferences in the late 1960s Software engineering involves creating complex systems through structured processes with teams of engineers working on software whose complexity requires a coordinated effort Key principles include quality on time delivery and budget management 12 1 Comparison to Traditional Programming Software engineering is distinctly different from simple programming While programming may involve a single developer working on simple applications with a short lifespan software engineering is characterized by Multiple developers Complex systems Numerous stakeholders Reuse and maintenance Unlike programming SE emphasizes long term sustainability requiring a structured approach to reduce costs and manage the system s complexity 13 Software Development Lifecycle Models The document outlines different software development lifecycle models each suited to various projects Waterfall model A linear and sequential approach Spiral model Focuses on iterative risk analysis and prototyping Agile model Emphasizes iterative development and adaptability V shaped model Similar to waterfall but with an increased focus on testing Comparison The waterfall model is best for projects with well understood requirements
View Full Document