CSci 658-01: Software Language Engineering

Introduction to Sofware Architecture

H. Conrad Cunningham

21 January 2018

Copyright (C) 2018, H. Conrad Cunningham

Professor of Computer and Information Science
University of Mississippi
211 Weir Hall
P.O. Box 1848
University, MS 38677
(662) 915-5358

Acknowledgements: This material is based primarily on Chapter 1 of the textbook Software Architecture: Perspectives on an Emerging Discipline by Mary Shaw and David Garland (Prentice Hall, 1996).

I created these slides for the first offering of my Software Architecture special topics course in Spring 1998. Thanks to Wen Wen Xu for entering my handwritten slides as HTML so that I could prepare these notes more quickly.

I reformated the slides to use Pandoc Markdown in Spring 2018.

NOT COMPLETE!

Advisory: The HTML version of this document may require use of a browser that supports the display of MathML. A good choice as of January 2018 is a recent version of Firefox from Mozilla

What is Engineering?

Many definitions include a phrase similar to:

Key Approach

Question:
Is software development an engineering discipline?

Engineering Design

routine <====> innovative
familiar problems unfamiliar problems
reuse prior solutions novel solutions
(handbooks, manuals)
Question:
What is the situation with software design?

Software Reuse

Problems in reuse:

Figures from Shaw-Garlan Textbook

Examine Figure 1.2, Evolution of an Engineering Discipline.

Examine Figure 1.3, Codification Cycle for Science and Engineering.

Examine Figure 1.4, Evolution of Software Engineering.

Codification through Abstraction

Abstraction:
emphasizing the essentials, ignoring the details

Computer science has progressed by increasing the level of abstraction—moving to larger conceptual building blocks.

Aspects of the Emerging Science

What is Software Architecture?

Involves description of:

Components and Connectors

Systems defined in terms of:

Example Components

Example Interactions

System Design

There are many levels of design, each with own concerns.

Each level consists of:

Software Design

  1. Architecture:
    high-level system capability

    – involves composing modules to form systems

  2. Code:
    algorithms and data structures

    – involves composing primitive language features to form modules

  3. Executable:
    allocation of code and data to machine

    – involves composing bit patterns to form language features

Research Areas in Software Architecture