700 likes | 999 Views
CS 411 - Software Architecture Design Roots, D efinitions and Rationale. Bedir Tekinerdogan Billkent University, Dep artment of Computer Engineering e:mail - bedir@cs.bilkent.edu.tr http://www.cs.bilkent.edu.tr/~bedir/ Phone : (290)12 5 8 Room: EA50 6. Table of Contents.
E N D
CS 411 - Software Architecture DesignRoots, Definitions and Rationale Bedir TekinerdoganBillkent University, Department of Computer Engineeringe:mail - bedir@cs.bilkent.edu.tr http://www.cs.bilkent.edu.tr/~bedir/Phone: (290)1258Room:EA506
Table of Contents • History of Structure in Software Engineering • Definitions of Software Architecture • Architecture in Software Development Life cycle • Rationale for Software Architecture Design
Part I – History of Structure in Software Engineering Software Crisis Software Engineering Evolution of Structure concept in SE
Architecture is ... • The underlying structure of things: • Buildings • Vehicles • Computers • ... • Software
Early Computers • Evolved during the Second World War. • Basically needed for mathematical calculations and code breaking. • Setting switches and plugging cables into sockets. • Von Neumann Architecture: program: set of instructions, stored in memory www.computerhistory.org
First Programming Languages 1951-1960 • Machine language (written in binary), machine specific • Assembly languages, symbolic instructions • Use of a translator to translate the assembly language into machine language. • Problem Concern: Computing and algorithms • Solution Concern: Basic applications include calculations; calculations are based on algorithms; algorithm is a step-by-step process that manipulates data.
Fortran, ALGOL and LISP FORTRAN (FORmula TRANslator), 1957 • high-level language • introduced variables, procedures, statement labels etc ALGOL 60 (ALGOrithmic Language), 1958 • Block structure, recursion, and a formal definition. • ancestor of most contemporary languages LISP (LIST Processor), 1960 • symbolic processing for AI • symbolic differentiation, integration and theorem verification
Evolution of applications • More powerful computers • transistor • IC • High Level Programming Languages • ‘Normal’ business started to use computer • Need for data processing applications in business • COBOL – COmmon Business Oriented Language, 1960 • elaborate datastructures • record type introduced for the first time
Abstract Data Types / Objects • Simula 67 • An extension of Algol 60 for simulation of concurrent processes. • Introduced the concept of classes and encapsulation; forerunner of Smalltalk and C++.
‘Direct’ mapping of problem to solution, No systematic method Problems are simple, algorithmic Early history of computing... • 1940s: First computers • Problems: Numerical/algorithmic applications • Method: • Programming languages, Machine Languages, Assembly Language • 1950s: First programming languages • Algol, Fortran, LISP, COBOL. • 1960s: • Problems got more complex: data intensive business applications…
Over Budget • Low Quality Software Crisis Software • Late
Software Engineering Software Development should be based on ENGINEERING! 1968: NATO Conference on Software Engineering
Dijkstra & Parnas: Structure Matters • Dijkstra, 1968: • ‘’...Correct arrangement of the structure of software systems before simple programming...‘’ • Parnas, 1972: • ‘’...selected criteria for the decomposition of the system impact the structure of the programs and several design principles must be followed to provide a good structure...’’ Edsger Dijkstra 1930-2002 Focused on Structure of Programming...
Dijkstra - Layered Structures 1968 • Operating Systems • Layered Structure • Programs are grouped into layers • Programs in one layer can only communicate with programs in adjoining layers • Conceptual integrity • Each layer has its own goal • with easier development and maintenance E.W. Dijkstra, The structure of "THE"-multiprogramming system. Comm. ACM 11, 5 (May 1968), 341-346.
Parnas – Design principles • Information-hiding modules (1972) • Identify design decisions that are likely to change • Isolate these in separate modules (separation of concerns) • Different design decisions might require different decompositions. • Software Structures (1974) • Hierarchical structures (stepwise refinement) in programs • Program Families (1975) • ‘’A program family is a set of programs for which it is profitable or useful to consider as a group. ‘’ D. Parnas, "On the Criteria to Be Used in Decomposing Systems into Modules.“, Comm. ACM 15, 12 (December 1972), 1053-1058. 1972. • D. Parnas, “On a ‘Buzzword’: Hierarchical Structure” IFIP Congress ‘74. North Holland Publishing Company, 1974 pp. 336-339 • D. Parnas, “On the design and development of program families” • IEEE Trans. On SE., vol. SE-2, pp.1-9, Mar. 1976
Structured Design Methods • Aimed to develop structured programs • By applying design principles • Information hiding • Modularization • Stepwise refinement • Etc…
Object-Orientation • In the beginning software was written without any structure… • … data and procedures were separated • … data and procedures that belonged together were put into subsystems (modules) • … these subsystems were layered • and finally objects encapsulated data for the sake of structure.
Structure in Software • 1960s - Structured Programming • Adopted into programming languages because it’s a better way to think about programming • 1970s - Structured Design • Methodology/guidelines for dividing programs into subroutines. • 1980s – Modular programming languages • Modular (object-based) programming • Grouping of sub-routines into modules with data. • 1990s – Towards Software Architectures • Object-Oriented Analysis/Design/Programming started being commonly used • Software Architecture Design
Structure in Software APPROACH PROBLEMS SOLVED 2010 Programming in-the-world - software architecture Mega programs 2000 Programming in-the-large - object-oriented design - CASE tools - libraries Large, complex, distributed 1990 1980 Data intensive, business applications 1970 Programming in-the-small - information hiding, modularization 1960 Programming any-which-way Simple, algorithmic 1950
Summary on Structure in History • Increased consciousness on structure of software • Structure idea did not stop at programming level but moved up to design methods. • This has finally culminated in Software Architecture • Successfully applied in industry which have specific architecture design teams/divisions. • Software Architecture is a logical step in the evolution of structure concept. • Is one of the most fundamental concepts in software engineering.
Very intuitive notion of software architecture • Software Architecture represents the gross level structure of a software system. • Design : Implementation = • Software Architecture : Design
<<Concept>> Database Accesses Applies to <<Concept>> Database Manager <<Concept>> Ontology Uses Uses Uses Adapts <<Concept>> Query Manager <<Concept>> User Manager <<Concept>> Submission Manager Adapts Connects Connects Connects <<Concept>> Network Manager <<Concept>> Editor Uses Software Architecture - Example Software Architecture Design for Multi-User Biological Pathway Knowledge Acquisition and Inquiry Environment Fatih Akgul, Caglar Gunel, Erhan Giral
Software Architecture - Example Software Architecture Design for Distributed Newsgroup System Ali Çakmak Duygu Uçar Eren Aydın Tankut Barış Aktemur
Part II - Definitions What is a Software Architecture?
What is Software Architecture? • Evolution of Software Architecture concept • Resulted in different definitions in the history
Booch 1991 • ”The Logical and physical structure of a system, forged by all the strategic and tactical design decisions applied during development” • Architecture is high level structure of software system
Perry and Wolf 92 • We distinguish three different classes of architectural elements: processing elements; data elements; and connection elements. The processing elements are those components that supply the transformation on the data elements; the data elements are those that contain the information that is used and transformed; the connecting elements (which at times may be either processing or data elements, or both) are the glue that holds the different pieces of the architecture together. • explicitly considers the interpretation on the elements of software architecture
Garlan and Shaw 1993 • ...beyond the algorithms and data structures of the computation; designing and specifying the overall system structure emerges as a new kind of problem. Structural issues include gross organization and global control structure; protocols for communication, synchronization, and data access; assignment of functionality to design elements; physical distribution; composition of design elements; scaling and performance; and selection among design alternatives. This is the software architecture level of design. • This definition provides additional specializations of the structural issues.
Garlan 1995 • The structure of the components of a program/system, their interrelationships, and principles and guidelines governing their design and evolution over time. • design information in the architectural specification
Bass et al 98 • The software architecture of a program or computing system is the structure or structures of the system, which comprise software components, the externally visible properties of those components, and the relationships among them. • more than one structure and includes the behavior of the components as part of the architecture. The term component here is used as an abstraction of varying components.
abstractions concept General definition Architecture: Abstractions and their relations, which form a concept. & relations Architectures must have a well defined structure.
What is a concept? Concept: A well-established definition within a given domain. A concept is an essential abstraction, usable, andgenerally corresponds to an inherently complexstructure and/or behavior. An abstraction of an architecture can also be an architecture (concept) thereby allowing hierarchicalarchitectural structures.
Summary on Definitions • Definition of Software Architecture Design has evolved together with technical developments • Gross Structure • Specialization on definition of components • Different structures • Different definitions but a common agreement on • Architecture is structure • including components • and connections among these components • Concept of software architecture is important
Part III – Architecture in the Software Development Life Cycle Problem Solving Architecture design and implementation
Solution Engineering as Problem Solving Problem Software engineering
Requirements Analysis What? (client) Analysis What? (domain) Design How? (Detailed) Do Implementation Test Testing Solution Software Engineering=Problem Solving Phases Problem
Application: Student Registration System University consists of several departments. If students fulfill the requirements, students can enroll in the university. Every student can register/withdraw for/from a course. Example: Student Registration System
Student Use Case Diagram register for course withdraw from course enroll in university
Apply [ Must be accepted first ] Enrolled Registered Graduate [ All courses must be completed ] States of a Student EnrollInClass ( Add a Transcript ) AddCourse Withdraw
aStudent theRegistrar aSection theTranscript getSectionsFor: return sections enrollInSection: takenCourse: prerequisite takenCourse: prerequisite state of prereq have prereq addStudent: enrolled enrolled Sequence Diagram: Registering for Course
Example – Java Implementation public class Student { private String name; private int id; public String getName () { return name; } public void setName (String str) { name = str; } public int getId() { return id; } public void setId(int i) { id = i; } }
Where is Architecture Design? Software Architecture
Requirements Analysis Software Architecture What? (client) What? (domain, gross-level) Analysis What? (domain, arch. comp) Design How? (Detailed) Do Implementation Test Testing Solution Software Architecture Design Phase Phases Problem
Design Evaluate (Test) Realize (Implement) Design, Realize and Test Architecture Requirements Analysis Software Architecture Design Analysis & Design
aStudent theRegistrar aSection theTranscript getSectionsFor: return sections enrollInSection: takenCourse: prerequisite state of prereq takenCourse: prerequisite have prereq addStudent: enrolled enrolled Design, Realize and Test Architecture Requirements Analysis ....... ....... ....... ....... Software Architecture Design Analysis & Design Implementation public class Student {private String name; private int id; public String getName () return name} public void setName (String str){ name = str;} public int getId() {return id; } public void setId(int i) {id = i; } }
Software Architecture • Architecture is at a higher abstraction level of software development than analysis and design. • To comprehend the gross level structure of the system it is necessary to design the architecture • Realizing architecture implies mapping it to detailed design.
Design the software for a conveyor sorting line system (CLSS) which sorts boxes moving along a conveyor line. Each box is identified by a bar code and is sorted into one of six bins at the end of the line. The boxes pass by a sorting station that contains a bar code reader and a PC. The sorting station PC is connected to a shunting mechanism that sorts the boxes into the bins. Example – Conveyor Line Sorting System
Conveyor/Assembly Line 11000 1100011 1110011 0101111 Shunt Sorting Station