Thursday, February 15, 2007

Software Architectures

Software architecture is the high level component design of the software. Eoin Woods defines that software architecture is the set of design decisions which, if made incorrectly, may cause your project to be canceled [1]. This definition shows clearly the importance of the software architecture in a software development project. Since architecture design is in the early stage of a software development process before the detailed design, a good design with less mistakes could save a lot of money and manpower in the software development.
One of the important tasks of the software architecture design is to decompose the whole system into components or subsystems. The software architecture discipline is centered on the idea of reducing complexity through abstraction and separation of concerns [2]. A good decomposition satisfies the principle of loose coupling between components (or pieces), facilitated by clean interfaces, simplifying the problem by dividing it into reasonably independent pieces that can be tackled separately [3].
There are a lot of kinds of software architectures that can be used when designing a software system, such as client-server, peer-to-peer, three-tier model, structured, service-oriented architecture, etc [2]. Software architects should make used of them when designing software architectures.

[1] http://www.sei.cmu.edu/architecture/definitions.html
[2] http://en.wikipedia.org/wiki/Software_architecture
[3] http://www.bredemeyer.com/whatis.htm

No comments: