SOFTWARE ARCHITECTURE
SOFTWARE ARCHITECTURE
Presented by:
Brayan Esneider Guativa Corner
Sheet 1966781B
ADSI Program
Bogota
April 2020
INTRODUCTION
This document contains the definition of software architecture, complemented with
some terms that will help the reader to better understand this concept; it also cites
5 authors such as Beyond Software Architecture: Creating and Sustaining
Winning Solutions by Luke Hohmann, Domain-Driven Design: Tackling
Complexity in the Heart of Software by Eric Evans, among others, who clarify
from their own point of view the conception of this topic in a brief introduction to
their books.
Regarding these studies and theories, I give my analysis of the subject with basic
knowledge on the subject and with the support of the documentation acquired
through the Internet to conclude with this small book.
CONTENT Pages
Theoretical Framework Page 1
Complementary books Page 3
Contextual Analysis of Software Page 6
Architecture
Literature Page 8
Theoretical framework
The SEI has compiled a list of modern, classical, and bibliographic definitions of
software architecture. Modern definitions come from Software Architecture in
Practice and ANSI/IEEE Std 1471-2000, Recommended Practice for Architectural
Description of Software-Intensive Systems. Classical definitions appear in some of
the most prominent or influential books and documents on architecture.
Bibliographic definitions are taken from articles and papers in our software
architecture bibliography. (See link 1)
A recognized definition is that of Clements [Cle96a]: SA is, broadly speaking, a
view of the system that includes the major components of the system, the behavior
of those components as perceived from the rest of the system, and the ways in
which the components interact and coordinate to achieve the system's mission.
The architectural view is an abstract view, providing the highest level of
understanding and the suppression or deferral of detail inherent in most
abstractions.
Software architecture has become an important part of software projects. When
building a solid software architecture, you select the important parts of a system,
think about how these parts fit together, and make crucial decisions when
designing these systems. It is the basis of any software development project. In
fact, you might find it interesting to read an article about the benefits and
importance of software architecture.
There is a big difference between a senior developer and a software architect. As
an architect, you are required to have more experience to be able to design an
end-to-end solution.
In software architecture theory is just as important as practice, therefore our team
of software developers and architects prepared a list of the best books on software
architecture to read this year. These books on software architecture are really
valuable to understand and effectively apply software architecture principles in real
software projects.
A software architecture, also called a logical architecture, consists of a set of
coherent patterns and abstractions that provide a clear and defined framework for
interacting with the software source code.
A software architecture is selected and designed based on objectives
(requirements) and constraints. The objectives are those pre-established for the
information system, but not only those of a functional nature, but also other
objectives such as maintenance, auditing, flexibility and interaction with other
information systems. Restrictions are those limitations derived from the
technologies available to implement information systems. Some architectures are
more suitable for implementation with certain technologies while other technologies
p. 1
are not suitable for certain architectures. For example, it is not feasible to use a
three-tier software architecture to implement real-time systems.
Software architecture defines, in an abstract way, the components that perform
some computing task, their interfaces, and the communication between them.
Every architecture must be implementable in a physical architecture, which simply
consists of determining which computer will be assigned each task.
Complementary books
Below I will cite some brief concepts corresponding to the topic.
p. 2
1.Beyond Software Architecture: Creating and Sustaining Winning Solutions
by Luke Hohmann
First on the list of best books on software architecture is “Beyond Software
Architecture”. This is the business reality of creating software products. If you are a
software architect, or dream of becoming one, this is a must read! Provides
practical techniques that development executives can employ to improve the
productivity of their software organization. The book is very well segmented into
logical chapters, making it an excellent reference. It covers classic architecture
issues such as portability, usability, performance, layering, API design, and
security, as well as other valuable material, e.g. software architecture from the
business and product management side, which is often ignored or left until late.
This book offers valuable insights and lessons on creating winning software
solutions in the context of a real business. Here you can find practical techniques
that development executives can employ to improve the productivity of their
software organization. These include issues such as licensing, implementation,
installation, configuration, support and much more!
2. Domain-Driven Design: Tackling Complexity in the Heart of Software by
Eric Evans
Second on the list of best books on software architecture is DDD by Eric Evans. He
has written a fantastic book on how you can make your software design match
your mental model of the problem domain you are addressing. It's not about
drawing pictures of a domain; it's about how you think about it, the language you
use to talk about it, and how you organize your software to reflect your best
understanding of it. Eric believes that learning about your problem domain is just
as likely to happen at the end of your project as at the beginning, so refactoring is a
big part of his technique. Eric Evans makes a compelling case for the importance
of domain modeling as the central focus of development and provides a solid
framework and set of techniques for achieving it. This book provides readers with a
systematic approach to domain-driven design, presenting a comprehensive set of
design best practices, experience-based techniques, and fundamental principles
that facilitate the development of software projects facing complex domains. This
book is excellent because it incorporates numerous examples based on real
projects to illustrate the application of domain-driven design to real-world software
development. Readers learn how to use a domain model to make a complex
development effort more focused and dynamic.
3. 97 Things Every Software Architect Should Know: Collective Wisdom from
the experts by Richard Monson-Haefel
Third on the list of books on software architecture is “97 Things Every Software
Architect Should Know.” In this truly unique technical book, today's leading
software architects present valuable principles on key development issues that go
beyond technology. More than four dozen architects, including Neal Ford, Michael
p. 3
Nygard, and Bill de Hora, offer advice on communicating with stakeholders,
eliminating complexity, empowering developers, and many more practical lessons
they've learned from years of experience. Among the 97 principles in this book,
you will find useful tips such as: “Simplicity before generality, use before reuse” –
Kevlin Henney. To be successful as a software architect, you must master both
business and technology. This book tells you what the best software architects
think is important and how they approach a project. If you want to improve in your
career, this book is essential reading.
4. Enterprise Integration Patterns: Designing, Building, and Deploying
Messaging Solutions by Gregor Hohpe, Bobby Woolf
Fourth on the list of best books on software architecture is “Enterprise Integration
Patterns.” This book provides an invaluable catalog of sixty-five patterns, with real-
world solutions. The authors also include examples covering a variety of different
integration technologies, such as JMS, MSMQ, TIBCO ActiveEnterprise, Microsoft
BizTalk, SOAP, and XSL. It also explores in detail the advantages and limitations
of asynchronous messaging architectures. The authors present practical advice on
designing code that connects an application to a messaging system, and provide
extensive information to help you determine when to send a message, how to route
it to the appropriate destination, and how to monitor the status of a messaging
system. If you want to know how to manage, control and maintain a messaging
system once it is in use, read this book!
5. Software Architecture in Practice by Len Bass, Paul Clements, Rick
Kazman
Firth's one on the list of best books on software architecture is “Software
Architecture in Practice”. Great book to learn software architecture! It focuses on
key topics in software architecture: “ilities”, patterns/styles, architecture
documentation and architecture evaluation. The authors share their own
experience, covering the essential technical topics for designing, specifying and
validating a system. They also emphasize the importance of the business context
in which large systems are designed. His idea was to present software architecture
in a real-world environment, reflecting both the opportunities and constraints that
companies face. They also show different case studies that describe successful
software architecture.
p. 4
Contextual Analysis of Software Architecture
From my point of view, I consider that software is the main basis of intelligent
systems, where I consider it to be the human body, which is divided into two
p. 5
fractions, which are determined by 1. Like the central nervous system (The
hardware) 2. The muscular and skeletal system (the hardware); which complement
each other and both are required to generate an action between them.
I complement the above as follows:
The central nervous system is the fundamental architecture of the body which
gives consciousness to the same point; this at the point of Software System
Engineering more specifically its architecture in the main base of each of our
computers since they.
The muscular and skeletal system is what I consider to be the complement to all
this visual; this in the point of Systems Engineering is the mouse, monitors,
keyboard, hard drive, among others (This topic will not be touched on in this topic
since the book is focused on Software).
Based on the above, we can consider that the computer system and the body
could be considered similar in many daily actions; where the same action of eating
could be considered as a chain of controlled commands.
I also think it is pertinent to tell you that this information system is very important in
advances and in large companies, where it can also present fatal errors as I will
mention below:
The first known bug was a physical bug. Literally. A moth in the Mark II's relays
caused malfunctions back in 1947.
Unfortunately, rather than being an exception, finding bugs in software is a
common problem. In many cases, these errors are simply an annoyance with no
serious consequences and are fixed with a new version of the software without
causing any further damage.
But we must not forget that software is everywhere and that an error in office
software may make us remember the mother of the programmer on duty, but an
error in medical software or critical systems control software can have much more
fatal consequences.
As this error can be found, with a rigorous examination the fault can be detected
and a pertinent solution can be reached, whether it is software or hardware as
required, which is why I mentioned above, the two are complementary.
p. 6
Literature
Links:
https://apiumhub.com/es/tech-blog-barcelona/libros-sobre-arquitectura-de-
software/
https://es.wikipedia.org/wiki/Software_Architecture
http://cic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:introarq.pdf
https://resources.sei.cmu.edu/library/asset-view.cfm?assetID=513807
https://ingenieriadesoftware.es/grandes-errores-historia-software-informatico/
p. 7