CSCE 742 - Software Architectures

Course Information:

  • Course Name: CSCE 742 - Software Architectures
  • Semester: Fall 2018
  • Instructor: Greg Gay
  • Lecture Hours: Tuesday/Thursday, 8:30 - 9:45 AM, 2A05 Swearingen Engineering Center
  • Office Hours: Tuesday/Thursday, 4:00 - 5:00 PM, 2247 Storey Innovation and Engineering Center

Course Description

Our society is built on software. It powers our homes, it manages our private information, it controls our cars, it automates our factories, and it even regulates our bodies. It is incredibly important that we construct robust, operational systems, especially given growing demand for features, limited development budgets and strict time constraints.

In the beginning, the entire codebase for a system would be written in a single file (or a punchcard!). Then, languages such as C added the ability to link code from multiple files together, enabling easier organization and code reuse. Object-oriented languages further increased our ability to organize code into logical entities. The systems that power our modern society may be built from hundreds - if not thousands - of individual classes.

Software architecture is one of the most important activities performed when designing a system. It is the practice of partitioning a large system into smaller ones that can be created separately, that individually have business value, and that can be straightforwardly integrated with one another and with existing systems. The goal of this course is to master skills that support this partitioning.

We will discuss the purpose and role of architecture in the overall process of software development, both as a process (​architecting ​ a system) and an artifact (the architecture of a system). We will also examine and debate the similarities and differences between "design" and "architecture". We will examine notations and tools designed to assist software architects and processes that can lead to good architectural outcomes and architectural refactoring.

Learning Outcomes

  • The students will be able to ​ work from stakeholder requirements to create system interfaces that support partitioning.
  • The students will be able to ​ use different viewpoints to document software architectures to different stakeholders.
  • The students will be able to ​ understand architectural quality attributes and how to use perspectives to assess how well the architecture meets them.
  • The students will be able to ​ apply and understand architectural patterns to quickly examine architectural alternatives and choose between them.
  • The students will be able ​ to clearly present and advocate architectural ideas.

This content is made available in the interest of sharing educational material with any who might find it useful. This page is updated periodically, and may not be in synch with the course itself. For current course students, the latest content, assignment submission, and discussion forums are available on Moodle.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Note: All documents were originally written in Google Docs and converted to PDF. There may be some formatting errors in slides that did not exist in the original document.

Documents

Lectures

Assignments