Software Engineering Guiding Principles
Software Engineering Guiding Principles
Principles
Software Engineering
CONTENT
1. Objectives
2. Introduction
5. Communication Principles
6. Planning Principles
7. Modeling Principles
8. Building Principles
9. Deployment Principles
10. Summary
11. Bibliography
Software Engineering Guiding Principles | 3
Practice
principles establish a the fundamental
Process
• To define the fundamental principles that guide
the process of software engineering. philosophical principles define a
• To specify the principles that guide the process foundation that set of values and
and practice within software engineering. guides the software rules that serve as a
• To summarize the principles of communication, team as it guide when analyzing
planning, modeling, building and deployment.
performs structural and a problem, designing
Figure 1. Practice of SE
Software Engineering Guiding Principles | 4
• Principle 7. When possible, represent the • Principle 5. Take notes and document decisions.
problem and its solution from several different Things find a way to fall through the cracks.
perspectives. When a problem and its solution are Someone involved in communication should serve
studied from several different perspectives, it is as "secretary" and write down all important issues
more likely to have a better view and to detect errors and decisions. .
and omissions. • Principle 6. Pursue collaboration. Collaboration and
• Principle 8. Keep in mind that someone will consensus occur when the collective knowledge
maintain the software. The software will be of team members is used to describe functions
corrected in the long run, when its defects are or features of the product or system. Each small
discovered, when it adapts to changes in its collaboration serves to build trust among team
environment, and when it is improved when members and creates a common goal for the group.
the participants ask for more capabilities. • Principle 7. Stay focused; make modules out of
These maintenance activities are easier if the discussion. The more people involved in any
a sound software engineering practice is communication, the more likely the conversation
applied throughout the software process. will jump from one topic to another.
These principles are not all that is needed to produce
• Principle 8. If something is unclear, draw a picture.
high quality software, but they lay the foundation
Verbal communication has its limits. Often, an
for all of the software engineering methods studied
outline or drawing provides clarity when words are
and discussed in this document.
not enough to do the job.
The set of modeling principles are defined in [4] and are • Principle 9. If a model is interpreted to be incorrect,
intended for all those who use the agile process model, even though it looks good on paper, there is reason
but are appropriate for all software engineers who to be concerned. If something says that a design
perform modeling actions and tasks: model is destined to fail (even if this cannot be
explicitly demonstrated), there is reason to spend
• Principle 1. The software team's main goal is to more time studying it or developing a different one.
build software, not to create models. Agility means
• Principle 10. Get feedback as soon as possible.
delivering software to the customer as quickly
Every model should be reviewed by team members.
as possible. Models that contribute to this are
The purpose of these reviews is to obtain feedback
beneficial, but those that slow the process or give
to be used to correct modeling errors, change
little insight should be avoided.
misinterpretations, and add inadvertently omitted
• Principle 2. Travel light, do not create more models features or functions.
than necessary. Any model that is created should
be updated if changes occur. More importantly,
any new model requires time that would otherwise Modeling Principles Requirements.
be spent on construction (coding and testing).
Therefore, it is necessary to create only those Each analysis method has a unique point of view.
models that make it easier and faster to build the However, they are all related by certain operational
software. principles:
• Principle 3. Try to produce the simplest model • Principle 1. The information domain of a
that describes the problem or the software. Do not problem must be represented and understood.
overbuild software. By keeping the models simple, The information domain includes data flowing into
the resulting software will also be simple. The the system (end users, other systems or external
result is that you will have software that is easy to devices), data flowing out of the system (through
integrate, easy to test and easy to maintain. the user interface, network interfaces, reports,
• Principle 4. Build models that are susceptible to graphics and other media) and data stores that
change. Assume that models will change, but be collect and organize persistent data objects (e.g.,
careful that this assumption does not make things those that are retained permanently).
sloppy. • Principle 2. The functions to be performed by the
• Principle 5. Be able to state an explicit purpose software should be defined. Software functions
for each model you create. Every time you create a provide a direct benefit to end users and also
model, you need to ask yourself why you are doing provide internal support for features that are visible
it. If you do not find a solid reason for the existence to end users. Some functions transform the data
of the model, it is better not to waste time on it. flowing into the system.
• Principle 6. Adapt the models being developed to • Principle 3. The behavior of the software (as
the system in question. Model notation or rules a consequence of external events) must be
may need to be adapted to the application. represented. The behavior of computer software
• Principle 7. Try to build useful models, but forget is determined by its interaction with the external
about building perfect models. When a software environment.
engineer builds requirements and design models, • Principle 4. Models representing information,
a point is reached where progress diminishes. That function, and behavior should be partitioned to
is, the effort required to completely finish the model reveal details in a layered (or hierarchical) fashion.
and make it internally consistent ceases to benefit Requirements modeling is the first step in solving
from having such properties. a software engineering problem. It provides a
• Principle 8. Do not be dogmatic about model better understanding of the problem and provides
syntax. If you are successful in communicating a basis for the solution (design). This concept is
content, the representation is secondary. Although called partitioning or entity separation, and is a key
each member of the software team should try to strategy in requirements modeling.
use a consistent notation during modeling, the most • Principle 5. The analysis work should progress from
important feature of the model is to communicate the essential information to the implementation in
information that enables the next engineering task detail. El modelado de requerimientos comienza con
to be performed. If a model succeeds in doing this,
incorrect syntax is forgivable.
Software Engineering Guiding Principles | 8
la descripción del problema desde la perspectiva information to the professionals who will generate
del usuario final. the code, to those who will test the software, and
to others who will maintain it in the future. If the
design is difficult to understand, it will not serve as
Principles of Design Modeling an effective means of communication.
• Principle 9. The design should be developed
The design model that is created for the software gives
iteratively. The designer should strive for
several different views of the system.
simplicity in each iteration. As with almost all
• Principle 1. The design must be traceable to the creative activities, design occurs iteratively. The
requirements model. The requirements model first iterations serve to improve the design and
describes the information domain of the problem, correct errors, but subsequent iterations should
the functions visible to the user, the behavior of seek to make the design as simple as possible.
the system, and a set of requirements classes that External quality factors are those properties of the
group the business objects with the methods that software that are easily observable by users. Internal
serve them. quality factors are of importance to software engineers:
• Principle 2. Always take into account the they lead to a high quality design from a technical point
architecture of the system to be built. The software of view. To obtain internal quality factors, the designer
architecture is the skeleton of the system to be built. must understand the basic concepts of design [1].
• Principle 3. The design of the data is as important
as the design of the processing functions. The data
design is an essential element of the architecture
design.
• Principle 4. Interfaces (both internal and external)
must be designed with care. La manera en la
que los datos fluyen entre los componentes de
un sistema tiene mucho que ver con la eficiencia
del procesamiento, la propagación del error
y la simplicidad del diseño. Una interfaz bien
diseñada hace que la integración sea más fácil
y ayuda a quien la somete a prueba a validar las
funciones componentes.
• Principle 5. The user interface design should
be tailored to the needs of the end user.
However, it should always emphasize ease of use.
The user interface is the visible manifestation of
the software. No matter how sophisticated its
internal functions are, no matter how inclusive its
data structures are, no matter how well designed its
architecture is, poor interface design often leads to
the perception that the software is "bad".
• Principle 6. Design at the component
level must have functional independence.
Functional independence is a measure of the
"single-mindedness" of a software component. The
functionality delivered by a component must be
cohesive, that is, it must focus on one and only one
function or subfunction.
• Principle 7. Components must be loosely coupled
with each other and with the external environment.
Coupling is achieved in many ways: with a
component interface, with messaging, through
global data, among others. As the level of coupling
increases, the probability of error propagation
also increases and the overall ease of software
maintenance decreases. Therefore, component
coupling should be kept as low as reasonable.
• Principle 8. Design representations
(models) should be easily understood.
The purpose of the design is to communicate
Software Engineering Guiding Principles | 9
Programming principles: when you start writing code, it • Principle 2. Testing should be planned long before
is necessary to make sure of the following: actual testing begins. Test planning begins as soon
as the requirements model is completed. The
• Algorithms are restricted by use of structured detailed definition of test cases starts as soon as
programming. the design model has been completed. As a result,
• The use of pair programming has been taken into all tests can be planned and designed before any
consideration. code is generated.
• Data structures that meet the needs of the design • Principle 3. The Pareto principle applies to software
should be selected. testing. In this context, the Pareto principle implies
• The software architecture should be understood that 80% of all bugs not detected during testing
and interfaces that are congruent with it should be are related to 20% of all program components.
created. Of course, the problem is to isolate the suspect
components and test them thoroughly.
• Conditional logic is kept as simple as possible.
• Principle 4. Testing should start "small" and move
• Nested loops in a form that can be easily tested are
towards "big". The first tests planned and executed
created.
usually focus on individual components. As testing
• Meaningful variable names are selected and other progresses, the focus shifts to an attempt to find
local coding standards are followed. bugs in integrated groups of components and,
• Code that documents itself is written. ultimately, in the entire system.
• A visual image that assists understanding is created • Principle 5. Exhaustive testing is not possible.
(e.g., indented and blank lines). Even for a program of moderate size, the number
of path permutations is too large. For this reason, it
Validation principles: once the first coding attempt has is impossible to run all path combinations during a
been completed, it is necessary to ensure the following: test. However, it is possible to adequately cover the
• Code walkthrough is performed where appropriate. program logic and ensure that all conditions at the
component level have been tested.
• Unit tests are conducted and any errors that are
detected are corrected.
• Code is redesigned.
Each feedback cycle gives the software team important There is a set of fundamental principles that aid in the
guidance that results in modifications to the functions, application of a meaningful software process and in the
features, and approach taken for the next increment. The execution of effective software engineering methods. At
delivery of a software increment represents an important the process level, the fundamental principles establish a
benchmark for any software project. When the team philosophical foundation that guides the software team
prepares to deliver an increment, certain key principles as it moves through the software process. At the practice
should be followed: level, the fundamental principles establish a set of values
and rules that serve as a guide when analyzing a problem
• Principle 1. Customer expectations must be design and solution, implementing it, testing it, and
managed. Too often, the customer expects ultimately deploying the software to the user community.
more than the team has promised to deliver and
disappointment comes immediately. This results in Communication principles focus primarily on deducing
unproductive feedback and ruins team morale. and clarifying the customer's needs, as well as the need
• Principle 2. The complete package to be delivered to reduce noise and improve the exchange during the
must be assembled and tested. All installation conversation between the developer and the customer.
scripts and other operational features should be Collaboration between both parties is imperative in order
fully executed on as many different computer to achieve the best communication. The principles of
configurations as possible (e.g., hardware, planning are based on the establishment of guidelines
operating systems, peripheral equipment, network to elaborate the best mapping of the process towards
configurations, etc.). a system or finished product. The plan can be designed
for only one software increment or for the whole project.
• Principle 3. Before delivering software, a support
Regardless, it should define what will be done, who will
regime should be established. An end user expects
do it, and when the work will be completed.
an accurate response and information when a
question or problem arises. The principles that guide modeling are designed to
• Principle 4. End users should be provided with include both analysis and design, in turn, describe
appropriate learning materials. The software team increasingly detailed representations of the software.
delivers more than the software itself. Appropriate Creating models is intended to affirm an understanding
training materials should be developed (if required). of the work to be done and to provide technical guidance
Troubleshooting guidelines should be provided to those who will implement the software. Modeling
and, where necessary, "what is different about this principles underpin the methods and notation used to
software increment" should be published. create representations of the software.
• Principle 5. Defective software should be corrected
The coding cycle comes into operation at the construction
first, and then released. When the increment is
stage, as does testing, where source code is generated
released, end users should be invited to comment
for certain components that are tested. The coding
on features and functions, ease of use, reliability
principles define the general actions that should take
and any other characteristics.
place before the code is written, while it is being written,
and after it is completed. Although there are many
principles for testing, only one predominates: testing is
the process of running a program in order to find a bug.
Software Engineering Guiding Principles | 12
Bibliography
[1] R. S. Pressman, “Ingeniería del software. Un enfoque
práctico”. Séptima Edición ed., Mc Graw Hill.
[2] J. Spolsky, “The law of leaky abstraction”, 2002. [En
línea]. Disponible en: https://www.joelonsoftware.
com/2002/11/11/the-law-of-leaky-abstractions/
[Último acceso: 21 04 2022].
[3] B. Appleton, “Patterns and software: essential
concepts and terminology”, 2000. [En línea].
Disponible en: https://www.cmcrossroads.com/
users/brad-appleton [Último acceso: 21 04 2022].
[4] S. W. Amber, “Agile Modeling”, John Wiley, 2002.
[5] G. Myers, “The art of software testing”, Wiley, 1979.