FUNDAMENTALS OF SOFTWARE ENGINEERING
THE SOFTWARE
It is an essential ingredient for the functioning of the computer. It is made up of
for a series of instructions and data that make it possible to take advantage of all the resources that the
computer has, in such a way that it can solve a large number of problems. A
the computer itself is just a conglomerate of electronic components; the software gives it
life to the computer, making its components function in an orderly manner.
Software is a set of detailed instructions that control the operation of a
computational system.
Software functions
Manage computational resources
Provide the tools to optimize these resources.
Act as an intermediary between the user and the stored information.
Software Programs
Program: Set of arguments or instructions for the computer, stored in
the primary memory of the computer along with the data required to be executed,
In other words, making the instructions carried out by the computer.
Types of Software
System software: It is a set of programs that manage the resources of the
computer. Examples: Central processing unit, communication devices and
peripheral devices, the system software manages and controls access to
hardware.
Application software: Programs that are written for or by users to perform
a specific task on the computer. Example: software to process a text, to
generate a spreadsheet, the application software must be on top of the software of
system to be able to operate.
End-user software: It is the software that allows the development of some
applications directly by end users, the end user software with
frequency must work through the application software and finally through the
system software
QUALITIES OF SOFTWARE
Correct: A program is functionally correct if it behaves according to the
specification of functions (specification of functional requirements) that should
provide
Reliability: Informally, the software is reliable if the user can trust it.
trust. Formally, reliability is defined in terms of behavior
statistic: the probability that the software operates as expected within an interval of
specified time.
Robustness: A program is robust if it behaves reasonably even in
circumstances that were not anticipated in the requirements specification; for
example when it encounters incorrect input data or some malfunction of the
hardware such as disk breakage.
Performance (also Efficiency): In Software Engineering generally
performance is equivalent to efficiency. A software system is efficient if it uses resources
computationally in an economical way.
Friendliness: A software system is friendly if a human user
finds it easy to use. This definition reflects the subjective nature of friendliness.
Verifiability: A software system is verifiable if its properties
can be easily verified. For example, the correctness or the performance of a
system are properties that are of interest to verify.
Maintainability: The term software maintenance is used
generally refers to the modifications made to a software system
after its initial release, being seen merely as "bug fixes".
Repairability: A software system is repairable if it allows for
correction of its defects with a limited workload.
Evolvability: A system is evolvable if it accepts changes that it
allow to meet new requirements. In other engineering products the
modifications are preceded by activities such as feasibility studies, design
associate, approvals, evaluations and finally the introduction of the modification.
Reusability: Reusability is similar to evolvability: in the
a second modifies a product to build a new version of the same product, in
the first one uses a product, possibly with minor modifications, to build
another product.
Portability: Software is portable if it can be run on different
environments, referring to the latter both to hardware platforms and to environments of
software such as a certain operating system.
Understandability: Some software systems are easier to
understand that others, some tasks are inherently more complex than others.
Interoperability: Interoperability refers to the ability of a
system of coexisting and cooperating with other systems, for example, the ability of a
word processor to include graphics produced by a graphics package.
Productivity: Productivity is a quality of the process of
software production, measures the efficiency of the process and as seen before, it is the quality
of performance applied to the process.
Opportunity (Timeliness): Opportunity is a quality of the process that refers to the
ability to deliver a product on time.
Visibility: A software development process is visible if all its steps
and their current status is clearly documented. Other terms used are
transparency and openness.
SOFTWARE QUALITY FACTORS
Software development has become one of the main axes of knowledge and
professional and business growth in recent years, due to globalization and
flattening of the world we live in. Everything is being done around software
the Internet. And it is for these reasons and thousands more, that the development of these large systems,
it must be almost perfect, and certain quality factors must be followed to ensure this.
continuation some of the most important ones such as reusability, readability
and security.
Reusability: The need for reuse arises from the observation that systems
software often follows similar patterns; it should be possible to exploit this similarity and
avoid reinventing solutions to problems that have already been found previously.
By capturing such a pattern, a reusable software element can be applied in many
different developments.
Reusability-Type of factor: Reusability is an external type factor, as it is
perceptible by users or clients, for example when using parts of a
software in a different one. Also in the case of users who are programmers,
use parts of code created in other developments for your own work (libraries).
Reusability-Metric: Reusability is within the context of quality metrics.
Quality metrics are all the software metrics that define in one way or another
the quality of software; such as accuracy, structuring or modularity, testing,
maintenance, reusability, among others. These are the critical points in design,
coding, testing, and maintenance.
Readability: Readability within the context of software development refers to the
the way in which the information we work with is structured, that is, everything must be
clearly documented, spaced, error-free, and with an agile and fast ease of use
understanding. This achieves a greater comprehension of the project, and the modifications
relevant ones are easier to carry out.
Readability-Type of factor: Readability is an internal type factor, as it is only
perceptible to developers or computer professionals. The client is not
It matters that the underlying system is readable, they only care that it works optimally.
Readability-Metric: Readability is within the context of Quality metrics.
Security
There are two types
Safety is a quality factor of use, defined by ISO 9126 and refers to the way
where the attributes measure the ability to prevent unauthorized access, whether
accidental or deliberate, both to programs and to data.
It is a software quality activity that focuses on identifying risks that
they can have a negative impact on the software, an analysis process is directed, it
risks are identified and classified by their importance and level of risk. When they have been
Identified the risks, the software requirements related to the
security.
Security-Type of factor: According to the two previous definitions, it can be concluded that it is
a factor that is both external and internal, as developers must take into account
software security matters at the time of development, but it is up to the clients to
that when the time comes, they demand a completely reliable and secure final system.
Security-Metric: Security is within the context of quality metrics.
SOFTWARE ENGINEERING
Software engineering is a discipline made up of a set of methods,
tools and techniques used in program development
computer scientists (software). This discipline transcends the activity of programming, which is the
fundamental pillar when creating an application. The software engineer is responsible for
the entire project management so that it can be developed within a certain timeframe and
with the planned budget.
Software engineering, therefore, includes the prior analysis of the situation, the
project design, software development, the necessary tests to confirm its
correct functioning and implementation of the system. It is important to note that the process of
software development involves what is known as the software life cycle, which is
formed by four stages: conception, elaboration, construction, and transition.
The conception defines the project's scope and develops the business model; the
elaboration defines the project plan, details the characteristics and substantiates the
architecture; construction is the development of the product; and transition is the transfer
of the finished product to the users.
OVERVIEW OF THE SOFTWARE DEVELOPMENT PROCESS
This process is affected by the creativity and judgment of the people involved.
In software development, there are a series of additional challenges, essentially related to
the nature of the product obtained. A software development process aims to
purpose the effective and efficient production of a software product that meets the requirements
of the client. They are activities required to develop high-quality software systems.
quality and provides the framework from which a plan can be established
detailed for software development. Activities: Design, validation, evolution,
specification. It is known that the greater the help of users in a project
software development, the greater the chances of success it will have. Not
however, it is important to make some clarifications:
1) The project does not happen on its own, because even with significant help from the
users, if it is not possible to accurately interpret what they want and a dynamic is not created
continuous feedback from them throughout the development process will be increased
the possibilities that some functional requirement has not been properly captured or of
that a software with uncomfortable usability for users has been developed. These
circumstances are a source of countless problems in the final phases of the project and
they cause delays, cost overruns, and great difficulties in closing the project, in addition to
create conflicts with the client that may harm future relationships with them.
It is important that among the group of users assigned to the project, there are users who will go
to be involved in the future use of the information system, that is, it is not enough that
the team of users is made up of ideologues or theorists who will draw from the result
of the tool's work, but it is essential that users who later
put on the work overalls and go work with the software.
3) Analysts are there to help and collaborate with users in the specification and
design of the solution, but they are not there to give lessons to the users and teach them how
they must do their work. If users do their work in a certain way, even though
even if it is not the most orthodox, it will always have a justification that would only be understood if one truly
they had been doing their job for a while and saw the problems they faced
they face daily.
4) It is essential to document the project, first of all with the documentation that is
specify in the development regulations of the organization for which it is carried out
service, with the clarifications indicated by the Project Director, secondly with the
documentation that establishes the internal quality standards of the organization (not
it will require extra effort, since in most cases it will coincide) and to everything
previously add all the necessary work documentation to work with the
users, who do not need to understand data models, case diagrams of
use.
PARTICIPANTS IN THE SOFTWARE DEVELOPMENT PROCESS
Since user participation in the design of information systems is a
Relevant aspect, it is necessary to clarify what participation means and what it entails.
It implies. One thing is certain: participation is not a new concept in the extensive plan.
of information sciences.
Given that every unit of information operates for the sake of benefit
social; the most important participant in it is, therefore, the user. In this way, it
you can define participation as a process in which two or more involved parties
they influence their decisions, plans, and policies regarding the systems, services, and resources that
offers a certain unit. However, it must be recognized that there is little debate that
it is about the decisions made, that is, the different interests that influence
them. If a broader approach to system design is desired, it is necessary
consider the functions, structure, interests, and the problems themselves that influence
among the involved participants. Within any system, there are various types of
participants who necessarily intervene in the systems they themselves
They implement to expedite the recovery of their resources.
Likewise, there are also three types of participants: unitary participants, pluralists, and
coercive. The unitary type relationship implies that its participants possess values,
identical beliefs and interests; they share the same purpose. In relationships
pluralists, their participants share the same interests, but not their values or beliefs,
what should promote a space for exchanging ideas, agreements, and even conflicts. In
total contrast, in coercive relationships there are few or no common interests, the
freedom of expression is very low and the values and beliefs of each individual turn out to be
very conflictive. Decisions are made through absolutist approaches by people with
power.
SOFTWARE LIFE CYCLE
It is the way in which the different steps that should be followed are described.
for the development of software, starting from a need to reaching the deployment of it
march of a solution and its appropriate maintenance. The lifecycle for software
it begins when there is a need to solve a problem, and ends when the
The program that was developed to meet the requirements is no longer being used.
There are several versions of the software development life cycle, among which the cycle stands out:
classic or waterfall life cycle, the spiral model, prototyping, the model
by increments and the extreme model.
Stages of the software life cycle
The classic software life cycle being one of the most used as
different authors suggest, it is composed in its expanded version of seven stages that are
they can be represented by a waterfall model like this:
Systems engineering: At this stage, the analyst, after a thorough and detailed study
from the systems of an organization, detects a problem or a need that for its
solution and/or satisfaction is necessary to carry out a software development.
Analysis: At this stage, it is necessary to understand and comprehend in detail what the
problem to be solved, checking the environment in which the problem is located,
in such a way that the necessary and sufficient information is obtained to address its respective
solution. This stage is known as the WHAT will be solved.
Design: Once enough information about the problem to be solved is gathered, it is
It is important to determine the strategy that will be used to solve the problem. This stage
it is known by HOW it will be solved.
Implementation: starting from the analysis and design of the solution, in this stage, the process proceeds to
develop the corresponding program that solves the problem using a
determined computational tool.
Tests: Human errors in computer programming are many.
and increase considerably with the complexity of the problem. When one finishes
writing a computer program, it is necessary to carry out the necessary tests that
ensure the proper functioning of said program under the largest number of
possible situations one might face.
Documentation: It is the guide or written communication in its different forms, whether in
statements, procedures, drawings or diagrams that are made about the development of a
program. The importance of documentation lies in the fact that often a program
written by one person, is modified by another. Therefore, documentation serves to
to help understand or use a program or to facilitate future modifications
(maintenance). The documentation consists of three parts:
Internal Documentation: These are the comments or messages that are added to the source code.
to make the understanding of the processes that comprise it clearer, including the
preconditions and postconditions of each function.
External Documentation: It is defined in a written document with the following points:
Problem Description
Author Details
Algorithm (flowchart or Pseudocode)
Data Dictionary
Source Code (program)
User Manual: Describe step by step how the program works, with the
so that the user can manage it to achieve the desired result.
Maintenance: Once a program is installed and started to operate
solution to the previously raised problem or to satisfy a certain need, is
it is important to maintain a structure of updating, verification, and validation that
allow this program to be useful and keep it updated according to needs or
requirements raised during their useful life. To perform proper maintenance,
It is necessary to have good documentation for it. To finish understanding the
the problem in which this book develops is important to have some clear concepts and
you need what is the Analysis and Design of Algorithms.
THEORETICAL FOUNDATIONS OF THE PROGRAMMING PARADIGM
Programming paradigms are the way that determine the methods and the
tools that a programmer will use in the construction of software. Mostly the
programming languages are based on one or more paradigms, these can be
call multiparadigms. It also mentions the different types of paradigms that are
they know, but only the most important ones are referenced because there are usually
many more that will not be mentioned in this research.
A programming language can support different programming paradigms.
with the aim that a programmer uses the most convenient when solving a
problem. No paradigm is capable of solving all problems easily and
efficient, therefore, it is useful to be able to choose between different programming styles
depending on the type of problem. There are also languages that allow mixing the
paradigms that, in principle, would seem irreconcilable.
It should be clarified that there are subparadigms that are included in more general paradigms.
but there are others that use totally different programming methods from each other and
there are also languages that combine them. For example, the Oz language uses
logical programming, functional, object-oriented and others. Languages such as Delphi, C++ and
Visual Basic combines the imperative, procedural, and object-oriented paradigms.
Even languages that are purer in their paradigms like Prolog (logical paradigm) or Scheme
(functional paradigm) have iterative structures typical of paradigm languages
imperative.
METHODOLOGY OR SOFTWARE DEVELOPMENT PROCESSES
The comparison and/or classification of methodologies is not an easy task due to the
diversity of proposals and differences in the level of detail, available information and
scope of each of them. Broadly speaking, if we take as a criterion the notations
used to specify artifacts produced in analysis and design activities,
we can classify the methodologies into two groups: Structured Methodologies and
Object-Oriented Methodologies.
On the other hand, considering its development philosophy, those methodologies with
greater emphasis on project planning and control, in precise specification of
requirements and modeling, are referred to as Traditional Methodologies (or also
called Heavy Methodologies, or Heavyweight). Other methodologies, called
Agile methodologies are more oriented towards code generation with very short cycles.
of development, they target small development teams, placing special emphasis on
human aspects associated with teamwork and actively involve the client in the
process.
Structured Methodologies
Structured methods began to be developed in the late 70s with the
Structured Programming, then in the mid-70s techniques appeared for the
Design (for example: the Structure diagram) first and subsequently for the Analysis
(for example: Data Flow Diagrams). These methodologies are particularly
appropriate in projects that use third and fourth generation languages for implementation
generation.
Object-Oriented Methodologies
Its history is linked to the evolution of object-oriented programming languages.
objects, the most representative: in the late 60's SIMULA, in the late 70's Smalltalk-
80, the first version of C++ by Bjarne Stroustrup in 1981 and currently Java or C# of
Microsoft. In the late 80s, some object-oriented methods began to consolidate.
Object. In 1995, Booch and Rumbaugh proposed the Unified Method with the ambitious idea
to achieve a unification of their methods and notations, which is subsequently reoriented
to a more modest objective, to give way to the Unified Modeling Language (UML), the
the most popular Object-Oriented notation today.
Some object-oriented methodologies that use UML notation are:
Rational Unified Process (RUP), OPEN, MÉTRICA (which also supports the notation
structured) .
Traditional Methodologies
Non-agile methodologies are those that are guided by a strong
planning throughout the development process; also called methodologies
traditional or classical, where an intense stage of analysis and design is carried out beforehand
from the construction of the system. All the aforementioned methodological proposals
they can be considered as traditional methodologies. Although in the particular case
of RUP, due to the special emphasis it places on its adaptation to the
project conditions (through its prior configuration before being applied), performing
a proper setup could be considered Agile.
Agile Methodologies
A process is agile when software development is incremental (deliveries
small software, with rapid cycles), cooperative (client and developers
they work together constantly with close communication), simple (the method
in itself, it is easy to learn and modify, well documented, and adaptable (it allows
make last minute changes). Among the identified agile methodologies are:
Extreme Programming, Scrum, Crystal Methodologies Family, Feature Driven
Development, Rational Unified Process, an agile configuration, Dynamic Systems
Development Method
Development.
SYSTEMS MODELING
A widely used technique is to document the system specification as a
set of system models. These models are graphical representations that
They describe the business processes, the problem to be solved, and the system that has to be.
developed. Due to the graphic representations used, the models are often more
understandable than the detailed descriptions in natural language of the requirements
of the system. They also serve as an important bridge between the analysis process and
design. Models can be used in the analysis process to understand the system
existing that must be replaced or improved, or to specify the new system that is
required. Different models can be developed to represent the system from
different perspectives. For example:
The most important aspect of a system model is that it omits the details.
A model of the system is an abstraction of the system that is being studied instead of
An alternative representation of that system.
Ideally, a representation of a system should maintain all the information about the
entity that is being represented.
An abstraction simplifies and deliberately highlights the most important characteristics.
relevant. For example, in the unlikely event that this book were published by
chapters in a newspaper, the presentation in this case would be an abstraction of the points
key of the book. If it were translated from English to Italian, this could be a representation
alternative. The translator's intention should be to maintain all the information as it is
is presented in English.
Different types of system models are based on different approaches of
abstraction. A data flow model focuses on the flow of data and the
functional transformations on those data. Details of the structures are omitted.
data. In contrast, a data entity model and its relationships document the
data structures of the system instead of its functionality.
TECHNIQUES AND TOOLS IN THE DEVELOPMENT PROCESS
SOFTWARE
Software development tools (HDS) have played an important role
paper in application development. As a result of technological advancement, these have
also experienced continuous changes. Just as it is currently accounted for
documentation on the numerous HDS available, and with research work that
advances in particular tools are revealed.
The Process / Techniques. It allows for a rational development of IS and includes activities.
techniques and management practices associated with the software lifecycle. It is determined by
a model, a formal representation of a system. In IS, a model behaves
also as a development strategy.
The Method. A method is a general guide to assist in the performance of an activity. In
the IS, the methods indicate how to build the software. The methods have dimensions of
efficiency and effectiveness, meaning of the process and the product, qualities that are attributed
directly to the quality of the software.
The Tools. Every method has one or more instruments and techniques associated with it.
he, with a degree of adequacy that generally depends on the context of application.
Software Development Tools
Currently, HDS are considered computer-based tools.
that assist the software life cycle process, consolidated in the literature in the
Computer-Aided Software Engineering (CASE).
This is software used to assist in the activities of the software process or
software that is used to design and implement other software.
They allow the automation of well-defined actions, also reducing cognitive load.
of the software engineer, who requires freedom to focus on the aspects
creatives of the process. This support translates into improvements in quality and productivity
in design and development. The HDS automate software methodologies and development of
systems and are linked to the different concepts involved in development.
Tools as a Knowledge Area of IS
The disciplines form a contextual vision of the IS. Internally, there are
a set of areas of knowledge that facilitate the understanding of the scope and the
limitations of different topics in IS. These areas are: Requirements, Design,
Construction, Testing and Maintenance of software, Configuration management, Management
of engineering and the software engineering process, Tools and methods of
software, and Software Quality. In this way, software tools and methods,
they integrate a specific area of the IS, and contribute to the production of high-quality software
quality, at low cost and in the shortest time possible.