All software development boils down to trying to build a system that meets some requirements.
Functional vs. non-functional
Abstract vs. concrete
Let us now spend a few minutes with Dr. Dan Berry, one of the luminaries of Requirements Analysis.
The hardest single part of building a software system is deciding precisely what to build.

Now, what does all this have to do with Software Architecture? And what is software architecture, for that matter? Broadly, some architectural aspects follow directly from requirements, some architectural choices have an inherent "pain" level, and architectural mismatch with requirements likely may cause project failure. Happy thought! What other things are likely to cause project failure?
Now, let's get back to software architecture.
A fuzzy triangle of thought is formed by architecture, design patterns, and component-based software engineering.
You'll hear many similar concepts when talking about each.
Q: Do they (or any two) mean the same thing?
Q: If not, can they stand on their own?
Perhaps granularity is where these differ. Clint proposes: "There are big coarse-grained (machines, processes), medium-grained (objects with both external interfaces and internal relationships within a process), and fine-grained (atoms, data structures with limited visibility) aspects of software design -- to which ones do architecture, CBSE, and design patterns apply? [Can we] claim that the terms are used with different frequencies at the different granularities of software design. Your triangle elements might also differ in their degree of top-downness versus bottom-upness, and the relative persistence or lifespan of the elements being designed."
Architecture is the high-level design.
Architecture is the pattern of the design.
Architecture is the implementation framework.
Others?
Explanation of proposed system to stakeholders (does this mean it will stand?)
Blueprint for design/implementation
Education of new development team members
Constraint on what is allowed
Q: What sort of requirements are important to the architecture? (21.3 in reading calls these "architectural drivers")
Boxes and arrows
UML diagrams (top-level?)
Domain-specific architectures
Product-line architectures
Can we list known styles?
Note that these styles and categories are not mutually exclusive and may in some cases be redundant.
CORBA, EJB, and many others as well
Conforming to in forward design/implementation
Recovering from existing system
Controlling maintenance changes
2nd Law of Thermodynamics (entropy)
"Clean" design tends to degrade over time
Must work to keep system in line with architecture
Q: Can you combine any two (or N) systems?
FQ: How hard will it be?
Non-formal (anything) vs Formal (ADLs -- architecture description languages)
Views: Philippe Kruchten 4+1 model (IEEE Software, 12(6) Nov 1995):
Formal languages for describing architectures
http://www.sei.cmu.edu/architecture/adl.html has a list of SOME ADLs. Check these out as part of your investigation this week for HW #1. Q: would any of these be useful in whatever project you propose (or in our default, collaborative UML editor project)?
This group in England http://www-dse.doc.ic.ac.uk/Research/architecture.html has done significant s/w architecture research, including the Darwin language http://www.doc.ic.ac.uk/~dg1/tracta/papers/wicsa1.pdf
Components, connectors, configurations
Components and connectors are defined by their interface(s)
Rules for composition
Syntax and semantics
Connectors are first-class objects
Is a connector a component?
Q: Can anyone really use these ADLs on real-world projects?
Requirements are the effects that the computer is to exert in the problem domain, by virtue of the computer's programming. - Ben KovitzRequirements Engineering commonly includes Requirements Gathering/Elicitation, Requirements Specification, and Requirements Validation. Last lecture we talked briefly about some reasons why requirements can be "hard" to do well.
Example functional requirement: the program must be able to export HTML. Example non-functional requirement: the program must be high quality.
Now for a trivial aside (Capers Jones):
| Function Points | Probability of Failure |
|---|---|
| 100 | 6% |
| 1,000 | 17% |
| 10,000 | 45% |
| 100,000 | 80% |
Now it is time to discuss project topics.