340 Final
What is the main purpose of the structural patterns?
Compose classes and objects to form larger structures Two types Structural classpatterns use inheritanceto compose interfaces or implementations Structural objectpatterns compose objects to realize new functionality
Be able to recall and discuss the findings of the 2005 survey of employees at Microsoft on what problems they face in developing software.
7 of the 8 top issues employees faced were related to the modular structure of the system Understanding the rationale behind a piece of code - 66% Have to switch tasks b/c of a manager/teammate - 62% Being aware of how changes in other code affects my code - 61% Finding all the places code has been duplicated - 59% Understanding the code that someone else wrote - 56% ... and so on
Be able to read and understand the organization of a T-Diagram.
<<<<<<LOOK IT UP>>>>>>> Left - source Bottom - Written in/Realized in Right - Output
Be able to recognize and describe class and object relationships shown in Object Modeling Technique (OMT) notation.
<<<LOOK IT UP>>>>
What is a software product line? What are the advantages of developing a family of products together as a product line?
A family of products designed to take advantage of its members' commonalities (what is similar between all members) and variabilities (what is different for each member) The advantage is .....
What are the advantages and disadvantages of a layered architecture?
Advantages: supports design decisions with increasing levels of abstraction Supports enhancement in one layer without changing the others Disadvantages: With the TCP/IP stack, you have to add header information as you go down the stack and then strip/interpret it as it goes back up (overhead) Strict layering increases the work on the designer's end
What is an architectural view? Why would you want to use different architectural views when describing the components of a system?
An architectural view focuses on some aspect of a given architecture - Views are tailored to the intended purpose and the intended audience - Typically a view outlines how the architecture solves a problem - No one view captures everything about an architecture
What are the responsibilities of the TCP and IP layers in the Internet Protocol Stack?
Application Layer: the intelligence of the application; passes data (packets) to the Transport layer for delivery Transport Layer: TCP provides reliable communication; passes packets through the internet layer Internet Layer: IP provides best effort delivery; uses a routing algorithm to determine the next hop (the destination) Network Interface Layer: interface between the local software and hardware
What distinguishes the definitions of 'design' and 'architecture' that we used in class?
Architecture deals with the relationships among components Design deals with the internal structure of components
Understand the economics of product line engineering.
At first, there is a much larger overhead cost for developing a family instead of single products. Eventually, as the number of family members increases, the cumulative cost for all products becomes much lower than it would have been to have kept creating individual products
What does it mean to 'bootstrap' a compiler?
Bootstrapping a compiler is writing a compiler in the source language that it intends to compile.
What is meant by the term 'cohesion' in software design? Be able to recognize and provide examples of a system with high cohesion vs a system with low cohesion.
Cohesion: the degree to which elements of a module belong together High cohesion: all elements in a module relate to the same secret Ex: a compiler; it has multiple modules that perform only a specific task (modules for tokenizing input, generating the syntax tree, generating intermediate code, ...) Low cohesion: some elements in the module do not relate to the others Ex: a utilities class, where the different modules for handling errors may have nothing to do with one another
What is Conway's law? What implications does this law have for team-based software development?
Conway's law says that the structure of a software project is representative of the structure and communication of the organization that developed that software. So if the dev team communicates well, so will the components of the software. If the dev team doesn't communicate well, the components of the software won't.
What is meant by the term 'coupling' in software design? Be able to recognize and provide examples of a loosely coupled system vs a tightly coupled system.
Coupling: how closely modules are inter-related Loosely coupled: if the interaction between modules is only through interfaces Ex: a drawing application, where objects are drawn and added to the main view by using a simple interface. Tightly coupled: if the implementation of one module depends on the implementation of another Ex: a system with a lot of global variables; the modules that use these global variables cannot be used in other systems.
According to Gamma et al., what is a design pattern?
Design patterns are "descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context"
What is Alexander's definition of an architectural pattern? What is meant by the context, problem, and "core" of a solution of an architectural pattern?
First studied by architect Alexander, a pattern is a problem that occurs over and over again, together with "the core of the solution to that problem." Context: Each pattern has both a larger and a smaller context e.g., larger: roof completes a room, a room is part of a building, ... Problem Some fundamental aspect of a design e.g., the design of roofs for a cluster of buildings "Core"of a Solution Guidance for designing a specific structure e.g., high ceilings for public rooms lower for smaller gatherings very low in rooms or alcoves for one or two people
According to Brooks, what is conceptual integrity? Give an example of a design that exhibits conceptual integrity.
Having unity, economy, integrity You can develop a mental model about the design that lets you make predictions about how it will operate; if they predictions come true, we often take delight in the use of the design
What is a module hierarchy? Why would you want to create a module hierarchy for your project?
It is where related modules are grouped into a tree-structured hierarchy to making finding relevant modules easier. The secrets of a child are the subsecrets of the parent module in the tree Modules can use other modules across subtrees
Describe Kruchten's 4+1 View Model for describing the architecture of software-intensive systems.
Logical View: focuses on structures that support end-user functionality Development View: focuses on the static modules Process View: focuses on dynamic/runtime processes (scalability and concurrency) Physical View: focuses on how the software works on the hardware; the allocation of processes to servers Scenarios: they describe the interactions between objects and processes and are used to validate the design; are tests for the system
Understand Taligent's Model-View-Presenter refinement of the basic MVC architecture. What are the roles of the new data management components (Selector, Commands) and the new user interface components (Interactor, Presenter)?
Model: stores the state information View: presents the state information to the user Selections: specify what data to be changed Commands: used to change the specified data Interactor: relates user events to changes in state information Presenter: interprets user events and maps them to the appropriate commands
Describe each of the components used in a Model-View-Controller (MVC) architecture. Which design decisions in each component are hidden from the other components?
Model: supports application behavior; hides state information View: manages presentation to the user; hides the display device Controller: interprets user actions; hides mapping from events to state changes
Describe the Pipe and Filter design pattern. Provide an example of a program or application that use the Pipe and Filter pattern.
Modules are arranged in a pipe (output from one is the input for another); they are independent and unaware of each other, and can operate in parallel where the only constraint is input
Understand Gamma et al.'s classification of design patterns. What distinguishes creational patterns from structural patterns from behavioral patterns?
Scope: Classes: deals with relationships between classes and subclasses Static; fixed at runtime Objects: deals with relationships between objects Dynamic; changeable at runtime Purpose: Creational: concerned about object creations Structural: concerned about the composition of classes or objects Behavioral: concerned about how classes or objects interact and distribute responsibility
What was the Unix Portability project? Why is important?
The effort to port Unix form PDP-11 to Interdata 8/32 It was the first time a largely used piece of software was ported across systems It also led to the development of Open Systems (standards for the portability and interoperability of software between different systems)
Understand the front end / back end design of the portable C compiler. What are the advantages of this design?
The front end hides the source language and generates an intermediate representation 13% of this code was machine dependent The back end hides the target machine language and takes the intermediate representation as input 70+% of this code was machine independent This design improves portability by allowing multiple back ends to work with the same front-end, and the same front-end to work with multiple back-ends.
What is the information hiding principle?
The principle of isolating design decisions (secrets) to make them easier to change
What is the self-hosting principle for programming languages? Why is self-hosting a desirable design goal for programming languages?
The self-hosting principle states that a language should have enough expression so that you can write a compiler for the language in that language.
What are the benefits of modularity and information hiding?
They make the system easier to understand, build, maintain, modify and develop in collaboration with others
What are the common themes / purpose of the creational patterns?
Two recurring themes in creational patterns 1) Encapsulate knowledge about which concrete classes the system uses 2) Hide how instances of these classes are created and put together
List and describe Vitruvius' three principles of classical architecture.
Utility -Does the building conveniently serve its intended purpose? Strength- Will the building stand? Are the foundations solid and have the materials been wisely selected? Beauty- Is the appearance of the building pleasing and in good taste? Are the elements of the building in due proportion
How do Vitruvius' principles apply to modern software architecture?
Utility- Does the system meet its requirements? Strength- Is the system robust? Will it scale and perform? Is the technology appropriate? Beauty- Is the implementation of the system elegant? Is it easy to understand and modify?
What were the major goals of the Unix Portability project? What were the major conclusions?
Write a portable C Compiler "To write a compiler for C that could be changed without grave difficulty to generate code for a variety of machines." Refine C for portability "To refine and extend the C language to make most C programs portable to a wide variety of machines, mechanically identifying non-portable constructions where possible." Rewrite and port Unix "To revise or recode a substantial portion of UNIX in portable C, detecting and isolating machine dependencies, and demonstrate its portability by moving it to another machine."
TCP and IP were originally a single protocol. Why were they separated into two distinct layers?
XNET, the cross-internet debugger, needed access to whatever got through; better something (best-effort) than nothing. For real-time packet delivery, it was better to drop packets than to have delays while reliably receiving packets Since there were two needed forms of delivery, they were each seperated TCP: reliable delivery, may delay packets IP: speedy delivery, may drop packets
Compare and contrast the different definitions of software architecture that we discussed in class.
a set of structures (each structure answers one or more questions) To structure is to partition the whole into parts and specify the relations among the parts that satisfy the requirements functional requirements; end-user features, ... other engineering requirements: 'ilities non-functional requirements: legal, regulatory, environmental