Saturday, April 23, 2011

Software Architecture: In Spirit and Letter

“You employ stone, wood and concrete, and with these materials you build houses and palaces. That is Construction. Ingenuity is at work. But suddenly you touch my heart, you do me good, I am happy and I say ‘This is beautiful.’ That is Architecture.” – Le Corbusier (1923), quoted in Architecture: From Prehistory to Post-Modernism.

The above quotation captures the spirit of architecture. We recognize good architecture when we see it, but it is difficult to define what good architecture is. Seeing the Taj Mahal, one of the greatest architectural wonders of the world, one is struck by its beauty, symmetry, poise, and proportion. But one is also aware, there is something nameless beyond these obvious attributes that endows the Taj with its architectural majesty. This sense is imparted to us by the underlying architecture. Whenever we deal with complex structures, we need to explore architectural ideas to simplify the task as well as make the end-product beautiful and resilient.

If architecture is difficult to define, software architecture is more so. One of the first organized attempts at studying software architecture can be traced back to the 1995 November/December issue of the IEEE Software magazine (Volume 12, Issue 6). Many of the articles published in that issue introduced foundational notions of software architecture, such as Kruchten’s 4+1 view model.

Rumbaugh et al. capture the essence of software architecture as ``The organizational structure of a system, including its decomposition into parts, their connectivity, interaction mechanisms, and the guiding principles that inform the design of a system.” Key themes of software architecture revolve around taking some fundamental decisions about the structure of subsystems, components, and their interactions that together make up the entire system, and relates to reusing some of the wisdom that other people have gathered in working with similar systems.

Architectural patterns facilitate such reuse. As Alexander defines them, “Each pattern is a three-part rule, which expresses a relation between a certain context, a problem, and a solution.” Relation is a key term in the above definition—patterns connect problems, solutions, and contexts through relationships. The model-view-controller (MVC) pattern is among the most widely used architectural patterns in Web development, where we have a presentation layer, often called the graphical user interface (GUI), a middle layer to handle business logic for fetching and manipulating data, and a back-end database for storing data.

Software architecture as a discipline can also be seen from different angles: as a strategy for organizing a system’s constituents, as a high-level abstraction of a system’s design, as a vehicle for communicating fundamental ideas about a system’s development. Software architecture is not software design, although there is no clear line where the former ends and the latter starts. Design relates to choices about how specific functionality is to be delivered, architecture is more about decisions regarding the system’s structure. In future, with software systems becoming larger and more complex, software architecture ideas will need to address deeper issues around delivering more sound and durable solutions to user needs.


Anonymous said...

A N P Praveen(MT2010079)
Software architecture as a discipline can also be seen from different angles.
Here sir has described all the possible ways to describe software architecture.I think software architecture can also be viewed as a model.Since Models are useful for understanding problems, communicating with
everyone involved with the project.
Models are abstractions that portray the essentials of a complex problem or structure by
filtering out nonessential details, thus making the problem easier to understand.
Models help us organize,
visualize, understand, and create complex things. They are used to help us meet the
challenges of developing software today and in the future.
Hence software architecture can be viewed as a model.

manu said...

We discussed earlier one of software property as it is invisible i.e., it cannot be seen. Now, architecture is all about the way we feel by seeing at things (that formed the entire system) how we are able to figure architecture from software. If software is viewed in terms of model then it is visible.(G.Manoj Kumar).

Aditya Sriram M said...

I would like to summarize the differences between Architecture and Design in an intuitive way; S/w Architecture addresses the what and where sections of a system. This gives the highest level of abstraction that can be thought of about a software system. Examples: MVC, 3-tier and 4-tier architectures.

And Design, more of, addresses the how part of the software. Examples: Functional behaviors, which modules and design patterns to be used etc.

Design specifications and realization complements the Architectural decisions and thus completes the system development!

Sandeep Donthula(MT2010128) said...

Architecture serves as the blueprint for both the system and the project developing it, defining the work assignments that must be carried out by design and implementation teams. The architecture is the primary carrier of system qualities, such as performance, modifiability, and security, none of which can be achieved without a unifying architectural vision.The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both.The term also refers to documentation of a system's software architecture.

This definition of architecture i found which i liked:

“Architecture is the linchpin for the highly complex, massively large-scale, and highly interoperable systems that we need now and in the future"
—Rolf Siegers, Raytheon

Shreya Barsaiyan said...

I have few questions, whenever people talk about software architecture so far I have heard about Model View Controller Architecture only. What can be the other possible generic Architecture kinds?
Although taking popularity into account its fairly obvious that MVC is the best amongst all (my assumption) but what are the factors that make us choose a specific architecture.
Another question is can System Design substitute architecture? Knowing the fact that architecture is specific to system. If not then what is the difference between these two?

Shashank Gudipati said...

I feel software architectures are also subject to change for various reasons like, the software system you thought of using earlier may become outdated by the time you start implementation, or there might be better versions or systems available that can do the same thing in a better way but you discover them later in the development process and so on. I don't know if this happens in practice in industry or elsewhere. If it happens , i am curious to know about how versioning is handled in such cases as sometimes , a new architecture proposed may have no bearing on the previous one.