Mar 16, 2007

Introduction to Software Architecture for Games and Simulations Part I - Origins of Software Architecture - Excerpt from my book in progress

    The following is an excerpt from a book I am attempting to write on the topic of Software Architecture and the Games Domain.

Origins of Software Architecture

     The field of software architecture may have started when Edsger Dijkstra first noted the benefits of planning a software system’s structure rather than just hacking out code to produce the desired functionality [Dijkstra 68]. While writing about an operating system, Dijkstra presented a layered structure where logical groupings of programs could only communicate with the programs in the adjoining layers. Using such a simple concept, Dijkstra was able to note significant improvements in the system’s development and maintainence.
The concept of software architecture was furthered by David Parnas with his work in information hiding [Parnas 72], software structures [Parnas 74], and program families [Parnas 76]. Parnas reasoned that early design decisions tend to ripple through the entire project and are likely to have the largest impact when they change. These early design decisions are the very definition of software architecture.
     Independent of academia, software architecture begins to emerge as various software domains begin to mature. For example, consider compilers, one of the earliest areas in computer science. What originally began with a few unique efforts, has become a simple standardized construction. Regardless of the language being compiled, a compiler will contain parsers, lexical analyzers, etc. As the simple side-effect of more systems being developed within a domain, reusable structures common to the domain are identified.
     The games domain is one such domain beginning to progress towards maturity. Consider describing a 3D graphics engine without the notion of a renderer or scene management. The fact the almost every game developer would even know the term “graphics engine” suggests that common, reusable structures are already beginning to emerge from the games domain.


     While most computer scientists can agree that software architecture is of critical importance in large systems, you would be hard pressed to get those same scientists to agree on a single definition for the term. Perhaps this is due to the newness of the field or the fact that it is simply a study of what software engineers already do [].
In the April 1995 IEEE Transactions on Software Engineering David Garlan and Dewayne Perry proposed the following definition for software architecture.
The structure of the components of a program/system, their interrelationships, and principles and guidelines governing their design and evolution over time.
While this definition is short and concise, it is definitely not simple. By dissecting this definition we can see the term is comprised of several complex and interrelated parts.
  • Structure of the components – Software systems can have both physical and logical structures. For example, a system may be composed of hundreds of physical classes divided into multiple logical layers allocated into several physical libraries representing multiple logical subsystems.
  • Component interrelationships – Components can communicate in many different ways. Examples include direct method invocation, publish/subscribe, client/server, etc.
  • Design principles and guidelines – Software will grow and evolve over time, and the architecture provides guidance as to how the structures and relationships should evolve. For example, consider a software system that has functionality separated into logical layers where entities can only communicate with other entities in adjacent layers using messages, but can communicate through direct method invocation with entities in the same layer. The architecture would guide future developments to follow that same pattern.
    So while this definition seems simple, it really holds a great deal of meaning. The waters become even muddier when you consider that most architectures are of a heterogeneous nature. Large applications often make use of many different architectural constructs to meet both the quality and functional needs of the system.
    So how exactly do we describe the architecture of a complex software system like a game? Consider this, game developers often refer to the client-server architectural model when describing a multiplayer game. The client-server model implies that when multiple players play their the game over a network, one computer acts as the data server. All other players connect to the server as clients. Each client player sends their data to the server, and the server in turn reports that data to all other clients, keeping everyone synchronized.
Figure 1 - Client Server
    Is client-server really the game’s architecture? Yes and No. For a network engineer responsible for setting up your development prototype network environment, this simple view might provide enough architectural information. For a developer writing AI, graphics, or some other programming, the client-server description provides little to no information about how to integrate that code into the system.
    Architecture means different things to different people. To a component developer, it may be enough to show how and with whom the component communicates. To the game logic developer, functional use cases or detailed descriptions that show how the game plays is an important piece of information.
Since the requirements of an architecture depends on who is using it, a more precise definition might be
The structure of the components of a program/system, their interrelationships, and principles and guidelines governing their design and evolution over time as required by each role involved with the system lifecycle.

Views are how you can demonstrate the architecture to the different roles, but I'll leave that to a later post.


Documenting Software Architectures: Views and Beyond by Paul Clements, Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Robert Nord, Judith Stafford


paultpreiss said...

It's good to see you writing on the origins of architecture as that has been left out of many a book. Id like to see you explore some of the other history as well. For example, take a look at for a timeline of architecture ideas/profession.

One interesting lack in your discussion is Brooks who described architecture as more of a user interface design. He was describing the architect as the "end users agent". If you follow that progression you find Zachmann waiting for you in 87 with a framework that is the culmination of "end user agent" thinking. Zachmanns framework of views is completely targeted on describing architecture to end users whereas Parnas and Dikstra took more of an engineering approach.

Given this dont you think there is an interesting correlation in the overall field today. The SEI led by Paul Clements, who worked with Parnas, takes an almost engineering approach, while the EA approach is still set on "end user agent".

Also it may do to have more of the definitions of architecture in the work. The SEI currently lists many on their site. While Perry's is good there are issues with it. Dewayne lives nearby and we've discussed this a couple of times. The definition of software architecture is in fact difficult not because what it says but what it doesnt say. Either way, it would be great to see someone expand on the differences between the common definitions.

Jeff Plummer said...

Paultpreiss - Wow. Good comment!

The real definition is software architecture is everything I need it to be, no more no less. :)

I will definitely add "comparing definitions of software architecture" and "an indepth look at the history of software architecture" to my list of topics to write about.

You know one thing I have not seen much writing on from the SEI (and maybe because it is counter to their profit strategy as a process consultant) is adapting and minimizing the architecture design process. The agile philosophies of doing only what is necessary combined with the artistic aspects of design.

Juane Weg said...

michael kors bags
cheap nfl authentic jerseys
fitflop outlet store
ralph lauren polo shirts
louboutin shoes
celine outlet
coach outlet online
coach factory online
kevin durant basketball shoes
guess clothing
rolex watches outlet
cheap rolex watches
cheap nike shoes from china
coach outlet store online
columbia jackets
fitflop outlet
asics shoes
cheap nfl
jordans for girls
michael kors sale
air jordan 11
jordan retro 11 legend blue
prada handbags
vans shoes sale
hermes belt
nike factory outlet
coach wallets outlet
red sole shoes christian louboutin
jordan 11 concord
gucci outlet
coach factory outlet
cheap wholesale jordans
michael kors outlet online
celine handbags
wholesale jordans
cheap nike shoes
michael kors handbags clearance 75% off
ralph lauren shirts

Hua Cai said...

ray-ban sunglasses
louis vuitton bags
michael kors outlet online
lululemon uk
louis vuitton outlet
swarovski outlet
louis vuitton outlet stores
michael kors factory outlet
burberry outlet
mulberry outlet
hermes outlet store
ray ban sunglasses
michael kors handbags
cheap oakley sunglasses
hermes outlet
air max 2015
fitflops outlet sale
louis vuitton handbags
ferragamo outlet
tiffany and co
nike tn pas cher
rolex uk
mulberry sale
replica watches
bottega veneta outlet online
cheap michael kors handbags
fitflops clearance
toms shoes
christian louboutin outlet
chaussure louboutin
celine outlet online
toms outlet
cheap jordan shoes
nike blazer pas cher
ferragamo outlet

xumeiqing said...

sac longchamp pliage
coach factory outlet
coach outlet
coach factory outlet
adidas nmd runner
converse shoes
burberry outlet
fitflops sale clearance
nike roshe run women
gucci handbags
burberry outlet
ray ban outlet
cheap oakley sunglasses
ray ban sunglasses
louis vuitton outlet
burberry outlet
asics outlet
yeezy boost 350
reebok uk
ray bans
hermes belt
kate spade outlet
canada goose
holliste sale
cartier watches
yeezy boost 350 black
michael kors outlet
nike trainers
chaussure louboutin
kate spade outlet
christian louboutin shoes
louis vuitton factory outlet
nike free flyknit 4.0
bottega veneta handbags
running shoes
reebok pump said...

discount jordans
air jordans
coach factory outlet
retro 11
louboutin shoes
ray ban sunglasses
kobe 8
rolex watches
giuseppe zanotti
oakley sunglasses
adidas running shoes
tiffany jewelry
adidas superstar trainers
gucci handbags
louis vuitton purses
lebron 12
louis vuitton outlet
burberry handbags
air jordan femme
timberland outlet
michael kors outlet online
michael kors outlet
nike store
coach outlet online
ray ban sunglasses
fit flops
coach factory outlet online
louis vuitton handbags
supra for sale
coach outlet online