Software Architecture
Professionally, I'm a software architect and I'm very interested in all aspects
of IT architecture. This recently culminated in me writing a
software architecture book, with another
experienced software architect
Nick Rozanski.
On this page, I've gathered together various resources that I've found useful
in my architecture work. Some of it is just links to other people's stuff, but
over time, I'll try to add more of my own resources too. For more architecture related
resources, also check out the
resources page on my book's web site.
Organisations
There seems to be a real rising tide of interest in software and enterprise
architecture and one of the results of this is that a number of IT-architecture
focused professional organisations are starting to emerge.
- IASA - the International
Association of Software Architects. A fairly new, but very active, organisation
that aims to represent the professional interests of IT architects. Quite a
number of regional chapters, with more appearing regularly. I'm a member of the
London chapter as well as being an
IASA Fellow.
Nick Rozanski and I have also produced some material for the IASA web site.
- BCS SPA Group - the
British Computer Society's Software
Practice Advancement group. Not strictly a software architecture specific organisation,
but a group of UK-based software people interested in all aspects of
software development practice. Quite a number of people in the group have a
strong interest in software architecture. Nick Rozanski and I are both fairly
involved in the group.
- WWISA - the WorldWide Institute of Software Architects. An older, but much less active organisation. I'm a
member of this one too, but it doesn't seem to be active any more.
UML Related
Quite honestly, UML isn't a very good architectural description notation (or language)
but it's the best we've got in mainstream practice. At least quite a number of
people understand it at a basic level. Some of the things I've found useful when
using UML for architectural description are listed below.
- UML Visio Template - There are lots of tools out there to allow you
to create UML models (Rational Rose/Software Architect, MagicDraw, Enterprise Architect,
ArgoUML and so on). However, I often end up creating UML diagrams using Microsoft Visio
because it's available wherever I work and it integrates neatly into
other Office applications. The problem with Visio is that the UML template supplied
with it really sucks. An excellent, UML 2.0 compliant, replacement is the Visio
template from
Pavel Rhuby that provides a very
usable, flexible Visio stencil, making creating UML diagrams in Visio very
straightforward. (By the way, if you do use this template make sure you send Pavel
a little money as suggested on the
download page. He's
put an insane amount of time into developing it.)
-
OCL Reference Card - One of the ways you can sharpen up a UML model and
make it more precise is to define Object Constraint Language (OCL) constraints on
it, as invariants on the
class model or as pre/post conditions on operations. This can really help to
make a UML model much more precise and reduce the vagueness you often find with
UML models today. My problem with OCL is remembering the syntax, so I've created
a quick reference card to help me look it up when I need it. The card is
here in PDF format. Note that the
syntax is as of UML 1.5 as that was the syntax I used last time I did some serious
work in OCL. I will try to update to UML 2 in the future.
-
OCL Evaluation Environment - If you do write OCL for your UML models,
it is useful to be able to "compile" it to check its syntax and check it is
valid to be applied to your model. A useful, free, tool that I've used previously is
OCLE that allows you to
import a UML model, write OCL against it, compile the OCL and even generate
Java code to enforce the OCL constraints. However this tool doesn't appear to have
been touched since 2005 and newer tools (that I haven't used in practice) appear to have
taken over from it, such as
Dresden OCL for Eclipse and Jos Warmer's tool
Octopus (Jos is one of the
inventors of OCL).
Books
A number of good software and enterprise architecture books have been published
over the years. Some of the books that I've found really useful for information
systems architecture are listed below.
There is also an online bibliography on my book's web site.
Creating Software Architectures
-
Software Systems Architecture, Working with Stakeholders Using Viewpoints and Perspectives - OK, so I'm biased. This is
my book but other people think it's OK too. Check out the 5*
Amazon reviews!
-
Software Architecture in Practice, 2nd edition (Len Bass, Paul Clements, and Rick Kazman, Addison-Wesley, 2003). This is the SEI's view of what software
architecture is all about and it's a really good introduction to the background
theory in the field.
-
Evaluating Software Architectures (Paul Clements, Rick Kazman, and
Mark Klein, Addison-Wesley, 2002). This book explains how to go about evaluating
your architecture to work out if it's any good or not. The SAAM and ATAM methods
are described here, along with some practical information about how to run a
large scale evaluation exercise.
-
Large Scale Software Architecture (Jeff Garland and Richard Anthony,
Wiley, 2003). A book with similar aims to the one Nick and I wrote, but
published a year or so earlier. Also written by two practitioners, it contains
lots of good advice on creating a software architecture and describing it using
UML.
Enterprise Architecture
There appear to be as many opinions on what enterprise architecture is as there
are books in the area. However, based on my initial survey of the market, there are some really
awful handwaving texts in this group. Having read quite a number though, I have managed to find
a couple of books that are useful references for that moment when you realise that your job now
entails responsibility for more than the design of a single system.
-
The Practical Guide to Enterprise Architecture (James McGovern, Scott Ambler, Michael Stevens, James Linn, Elias Jo and Vikas Sharan, Addison-Wesley, 2003).
This book is one of relatively few books around that tries to provide a broad
overview of the whole enterprise architecture field. It's partially successful and contains
some really quite good bits, although most of it is at a reasonably shallow level of detail (as it
covers a lot of ground in only 280 pages). To be honest, it's also quite disjointed because so many
authors were involved. However highlights include the Enterprise Unified Process (EUP)
description, some useful thoughts on what "agile architecture" means and how to
go about using SOA in an enterprise. Plenty of "motherhood and apple pie" but
there's good stuff in the book too.
-
Guide to Enterprise IT Architecture (Col Perks and Tony Beveridge, Springer, 2002).
I found this to be a fairly practical enterprise architecture book, defining what
the authors mean by "enterprise architecture" and providing an explanation of
how to use their particular interpretation of the Open Group's
TOGAF framework to
create one.
Functional Design
-
Designing Object Systems: Object-Oriented Modelling with Syntropy (Steve Cook and John Daniels, Addison-Wesley, 1994).
This book describes a pioneering object oriented analysis and design method that Cook and
Daniels published in the 1990s. The method makes modelling useful and practical by clearly
separating and relating models that address different levels of abstraction and showing how to
make models precise using ideas from formal languages like Z. The book has been out of
print for a while and the text has recently been made available online (follow the link
above to find it). As I think
Paul Dyson said when the text was made
freely available, "timeless wisdom from Cook and Daniels". It's a classic - read it.
-
UML Components (John Daniels and John Cheesman, Addison-Wesley, 2000).
This book provides a very practical approach to designing a component based system,
that happens to use UML as its description notation. This approach can help you
to create a really firm foundation for the functional structure of your system.
-
Design by Contract by Example (Richard Mitchell and Jim McKim,
Addison-Wesley, 2002). A very accessible explanation of how to design good
interfaces using the DbyC approach. Distills it all down to a simple set of
rules you can photocopy and give to developers. Great book to hand out to
people to help them define better interfaces (and after all, interfaces are
a pretty key part of software architecture - right?)
Quality Properties
-
Architecting Enterprise Solutions: Patterns for High-Capability
Internet-Based Systems (Paul Dyson and Andy Longshaw, Wiley, 2004). This
book is one of the few architecture books out there that provides useful
guidance on the deployment environment for the system. Contains a set of
patterns that
Paul and
Andy identified based
on their experiences creating large Internet systems.
-
Blueprints for High Availability (Evan Marcus and Hal Stern, Wiley, 2000).
Another book that considers what happens to you system once you've put it in
production: specifically, how you can keep the system running when things go
wrong. The best book I've come across on high availability techniques.
-
In Search of Clusters, 2nd edition (Greg Pfister, Prentice Hall, 1998).
OK, so perhaps you don't need this book, but you'll enjoy it anyway!
The best review and tutorial I'm aware of on both scalable and high
availability clusters, this book is also funny
enough that you probably don't want to read it in a quiet public environment.
-
Performance Solutions: A Practical Guide to Creating Responsive,
Scalable Software (Connie Smith and Lloyd Williams, Addison-Wesley, 2002).
If you have system performance challenges, then buy this book. It explains how
you can create performance models based on your architecture, that allow the
likely performance of the system to be assessed.
-
Security Engineering 2nd Edition (Ross Anderson, Wiley, 2008). This book is a
comprehensive overview of the IT security field, providing a really good
introduction to the area. It's also written in a very engaging style, with
lots of stories and colourful background along the way.
Web Sites
There are a huge number of technology specific web sites and the ones that will
be relevant to you depends on the kind of systems you work on. Some of the sites
I try to keep up to date with include
InfoQ, The Server Side, Sybase SDN, BEA dev2dev, Oracle OTN and IBM DeveloperWorks. However, some of the general architecture sites that I find worth reading are
listed below.
-
Bredemeyer Consulting
- Dana Bredemyer and Ruth Malan's consultancy company site. DB is a software and
enterprise architecture consultant, who used to run HP's internal software
architecture programmes and now runs public training in the same sort of
area. This site is maintained by
Ruth Malan and Dana Bredemeyer and contains
lots of useful enterprise and software architecture references, links and
resources.
-
Software Engineering Institute
- To many people, the SEI are software architecture. That's
not really true, lots of other good research goes on too, but the SEI do
spend a lot of time communicating their results in an accessible way and
that's important. This site is their software architecture project (which
is only one part of what they do). It contains lots of whitepapers on
various aspects of the field, including the longest
list of definitions I've ever seen!
-
Gerrit Muller's Gaudi Project
- Another software architecture research powerhouse is, rather
surprisingly, the research arm of Philips, the Dutch consumer electronics
and medical systems company. They employ quite a number of well-known software
architecture researchers (like Gerrit Muller and Henk Obbink). The Gaudi project
was started by
Gerrit Muller
when at Phillips Research and collects much of the Phillips architecture research
together, as well as Gerrit's personal PhD research in the area. The
result is lots of very usable software architecture stuff, particularly for
embedded systems (which is what Philips are into for the most part).
-
EWITA
- Enterprise Wide IT Architecture (EWITA) is a community site for
enterprise architecture, now run by Dana Bredemyer and Ruth Malan. It contains a number of useful
links, book reviews and so on.
-
Microsoft MDSN Architecture Site
- As you might expect, there's a lot here on Microsoft technology, but they
do actually seem to be taking architecture and architects quite seriously today
and so there are some interesting articles in there on software and
enterprise architecture in general.
-
IBM Developer Works
- IBM are another company that talks about architecture quite a lot, although it can
be difficult to find the architecture content on developerWorks. This link displays their
content tagged as "architecture". A mixed bag of stuff, quite honestly, but some interesting
articles in there.
|