Software Engineering
The Software Engineering is one of the branches of computer science that studies the creation of reliable and quality software, based on engineering methods and techniques, and providing operational and maintenance support. The field of study of software engineering integrates computer science, applied science, and the basic sciences on which engineering is based.
The most recognized definitions are cited, formulated by the following prestigious authors:
- Engineering software is the study of the principles and methodologies for the development and maintenance of systems software (Zelkovitz, 1978).
- Engineering software is the practical application of scientific knowledge to the design and construction of computer programs and the associated documentation required to develop, operate and maintain them. It is also known as development of software production software (Bohem, 1976).
- Engineering software the establishment of engineering principles and methods in order to obtain software profitably, be reliable and work on real machines (Bauer, 1972).
- Engineering software is the implementation of a systematic, disciplined and quantifiable approach to development, operation, and maintenance of software. Standard Glossary of Software Engineering Terminology
In 2004, the U.S. Bureau of Labor Statistics counted 760,840 computer software engineers.[update >]
The term "software engineer", however, is used generically in the business environment, and not everyone who works in the role of software engineer software actually hold engineering degrees from recognized universities.
Some authors consider that "development of software" is a more appropriate term than "software engineering" for the process of creating software. People like Pete McBreen (author of Software Craftmanship) believe that the term IS implies levels of rigor and testing processes that are not appropriate for all kinds of software development.
The terms "software engineering " or "engineering the software"; although less common it is also often referred to as "engineering in software". In Latin America the most commonly used terms are the first two.
The creation of software is an intrinsically creative process and software engineering tries to systematize this process in order to limit the risk of failure to achieve the objective, by means of various techniques that have proven adequate on the basis of previous experience.
The engineering of software can be considered as engineering applied to software, that is, by systematized means and with pre-established tools, their application in the most efficient to obtain optimal results; objectives that engineering always seeks. It is not only about solving problems, but rather taking into account the different solutions, choosing the most appropriate one.
The production of software uses software engineering criteria and standards, which allows it to be transformed into an industrial product using engineering bases such as methods, techniques and tools to develop an innovative product governed by methodologies and good practices. Said product is a means that intervenes in the functions of its users to obtain a more effective and efficient production process; nowadays companies could not function without software because this is a product of massive use; Therefore, the level of a company is determined by the quality of its technological infrastructure and the products developed or acquired according to its needs.
History
When the first digital computers appeared in the 1940s, software development was so new that it was almost impossible to predict project completion dates and many of them exceeded estimated budgets and time. Developers had to rewrite all their programs to run on new machines that came out every year or two, making existing ones obsolete.
The term software engineering first appeared in the late 1950s. Software engineering was stimulated by the software crisis of the 1960s and 1980s. software comes to help identify and correct the processes of development and maintenance of software systems through principles and methodologies.
Aside from the software crisis of the 1960s and 1980s, software engineering is affected by accidents that led to the death of six people; This happened when the Therac-25 radiotherapy machine, which emits a massive overdose of radiation, affected the lives of these 6 people, leaving others more marked for life. This highlights the risks of control by software, directly affecting the name of software engineering.
By the early 1980s, software engineering had already emerged as a bona fide profession, to stand alongside computer science and traditional engineering. Prior to this, tasks were run by putting punch cards as input into the machine's card reader and waiting for the results returned by the printer.
Because of the need to frequently translate old software to meet the needs of new machines, higher-order languages were developed. As free software appeared, user organizations commonly released it.
For a long time, solving the software crisis was of paramount importance to researchers and companies dedicated to producing software tools.
By the 1980s, the cost of ownership and maintenance of the software was twice as expensive as the development of the software itself, and during the 1990s, the cost of ownership and maintenance increased 30% over the previous decade. In 1995, many of the development projects were operational, but not considered successful. The average software project was 50% over the time estimate previously made, plus 75% of all large software products that were delivered to the customer had failures. so serious, that they were not used at all or simply did not meet the customer's requirements.
Some experts argued that the software crisis was due to a lack of discipline on the part of programmers.
Every new technology and practice from the 1970s to the 1990s was heralded as the only solution to all the problems and chaos that led to the software crisis. The truth is that the search for a single key to success never worked. The field of software engineering seems too complex and broad a field for a single solution to improve most problems, and each problem represents only a small portion of all problems. >software.
The rise of Internet use led to a dizzying growth in demand for international information display systems on the World Wide Web. Developers were tasked with handling illustrations, maps, photos, and animations at a rate never seen before, with almost no means of optimizing image display and storage. Systems were also needed to translate the flow of information in multiple foreign languages into natural human language, with many software systems designed for multilanguage use, based on human translators.
Software engineering contributed about $90 billion per year as the Internet came into play. This causes developers to deal with image maps and animations to optimize image display/storage (such as thumbnail usage). The use of browsers and the use of HTML drastically change the vision and reception of information.
Extensive network connections caused the proliferation of computer viruses and junk or spam in emails (Email). This situation put developers in a race against time in order to create new blocking or security systems for said computer anomalies, since they became extremely tedious and difficult to fix.
After a strong and growing demand arises the need to create software solutions at low cost, which leads to the use of simpler and faster methodologies that develop functional software. It should be noted that smaller systems had a simpler and faster approach to managing the development of software calculations and algorithms.
Objectives
The software engineering applies different standards and methods that allow to obtain better results, in terms of the development and use of the software, through the correct application of these procedures it is possible to to satisfactorily meet the fundamental objectives of software engineering.
Among the objectives of software engineering are:
- Improve application or design software so that they better adapt to the needs of the organizations or purposes for which they were created.
- Promote greater quality by developing complex applications.
- Provide greater accuracy in project costs and development time of projects.
- Increase the efficiency of systems by introducing processes to measure by specific standards, the quality of software developed, always looking for the best quality possible according to the needs and results they want to generate.
- A better organization of work teams, in the area of development and maintenance software.
- Detect through testing, possible improvements for better operation of the software developed.
Resources
Human resources
They are all those people who intervene in the planning of any software instances (for example: manager, experienced software engineer, etc.), The number of people required for a software project can only be determined after estimating the development effort...
Environment Resources
It is the environment of the applications (software and hardware) the hardware provides the physical means to develop the applications (software ), this resource is indispensable.
Socioeconomic implications
Economically
In the United States, software contributed one-eighth of all GDP growth during the 1990s (about $90 billion per year), and one-ninth of all productivity growth during the last years of the decade (about 33,000 million US dollars per year). Software engineering contributed to $1 trillion of economic growth and productivity in that decade. Around the globe, software contributes to economic growth in similar ways, although reliable statistics are hard to find. [citation required]
In addition, with the language industry it is finding more and more fields of application on a global scale.
Socially
Software engineering changes the culture of the world due to the widespread use of the computer. Electronic mail (e-mail), the WWW and instant messaging allow people to interact in new ways. The software lowers the cost and improves the quality of health services, fire departments, government agencies and other social services. Successful projects where software engineering methods have been used include GNU/Linux, the space shuttle software, ATMs, and many others.
Notations
LUM (Unified Modeling Language) or UML
It is a widely recognized and currently used modeling language used to describe or specify methods. It is also applicable in software development.
UML stands for Unified Modeling Language, which means that it does not attempt to define a standard development model, but only a modeling language.
A modeling language consists of views, model elements, and a set of syntactic, semantic, and pragmatic rules that indicate how to use the elements.
In this matter we find several diagrams that can be used such as: use cases, classes, components, deployment, etc.
BPMN (Business Process Modeling Notation)
The goal of the business process modeling notation is to provide an easy way to define and analyze public and private business processes by simulating a flowchart. The notation has been specifically designed to coordinate the sequence of processes and the messages that flow between its participants, with a set of related activities. Basic characteristics of BPMN elements
- Flow objects: events, activities, flow control rombos (gateways).
- Connection objects: sequence flow, message flow, association.
- Swimlanes (pool rails): pool, lane.
- Artefacts: data objects, group, annotation.
Data Flow Diagram (DFD)
A data flow diagram allows you to represent the movement of data through a system using models that describe data flows, processes that transform or change data, data destinations, and data stores through which the system has access to.
Its inventor was Larry Constantine, based on the computational model of Martin and Estrin: graphical flow of data. With data flow diagrams it determines the way in which any system can be developed, helps in the identification of the transaction data in the data model and provides the user with a physical idea of how the data will ultimately turn out.
CASE Tool
CASE Tools are computational tools (software) that are intended to assist in the life cycle processes of a software, facilitate the production of the software , several are based primarily on the idea of a graphical model.
Methodology
A goal for decades has been to find processes and methodologies, which are systematic, predictable and repeatable, in order to improve development productivity and product quality software, in short, determines the steps to follow and how to perform them to complete a task.
Stages of the process
Software engineering requires carrying out numerous tasks grouped into stages, the set of these stages is called the life cycle. The stages common to almost all life cycle models are the following:
Getting the requirements
You must identify what you are working on, that is, the main topic that motivates the start of the study and the creation of the new software or modification of an existing one. At the same time, identify the resources that are available, this includes knowing the human and material resources that participate in the development of the activities. It is important to understand the business context to properly identify the requirements.
You have to have control of the information of a problem, which includes the data outside the software (end users, other systems or external devices), the data that leaves the system (for the user interface, network interfaces, reports, graphs, and other media) and data stores that collect and organize persistent data objects (for example, those that are permanently retained).
You also have to see the critical points, which means having a clear understanding of the aspects that hinder and limit the proper functioning of current procedures, the most common and relevant problems that arise, the reasons that create dissatisfaction and those which must be fully covered. For example: Does the content of the generated reports really meet the needs of the user? Are the response times offered appropriate?, etc.
It is necessary to define the functions that the software will perform since these help the end user and the operation of the program itself.
You have to take into account how the software will behave in unexpected situations, such as a large number of users using the software or a large number of data among others.
Requirements analysis
Remove the requirements of a product software is the first stage to create it. During the analysis phase, the client poses the needs presented and tries to explain what should be done software o final product to satisfy that need while the developer acts as a questioner, as the person who solves problems. With this analysis, the system engineer can choose the function to be performed by the software and establish or indicate which is the best interface for it.
Analysis of requirements may seem like a simple task, but it is not because many times clients think they know everything the software needs for it to function properly, however it requires the ability and experience of a specialist to recognize incomplete, ambiguous or contradictory requirements. These requirements are determined taking into account the needs of the end user, introducing techniques that allow us to improve the quality of the systems on which we work.
The result of the requirements analysis with the client is reflected in the ERS document (system requirements specification), whose structure can be defined by various standards, such as CMMI. Likewise, an entity/relationship diagram is defined, which shows the main entities that will participate in the development of the software.
The capture, analysis and specification of requirements (including tests of them), is a crucial part; The achievement of the final objectives depends to a large extent on this stage. Models and various methodical work processes have been devised for these purposes. Although it is not yet formalized, there is already talk of requirements engineering.
IEEE Std. 830-1998 standardizes the creation of software requirements specifications (Software Requirements Specification).
Purposes of requirements analysis:
- Provide the user with everything you need to work together with the software developed by obtaining the best possible results.
- Have more complete control at the stage of creation softwarein terms of development time and costs.
- Use of more efficient methods to enable the best use of software according to the purpose of its use.
- Increase quality software developed by reducing the risks of malfunctioning.
Not always at the "requirements analysis" the different development methodologies are associated with a feasibility study and/or cost estimate. The best known of the software cost estimation models is the COCOMO model
Limitations
The software have the ability to emulate intelligence by creating a model of certain characteristics of human intelligence but it only has predefined functions that encompass a set of solutions that in some fields becomes limited. Even though it has the ability to imitate certain human behaviors, it is not capable of emulating human thought because it acts under conditions.
Another limiting aspect of the software comes from the totally mechanical process that requires a greater effort and high execution times, which leads to having to implement the software on a larger machine.
Specification
The requirements specification describes the expected behavior of the software once it is developed. Much of the success of a software project will lie in the identification of business needs (defined by senior management), as well as the interaction with functional users for the collection, classification, identification, prioritization and specification of the software requirements.
Among the techniques used to specify requirements are:
- Case of use
- User stories
The former being more rigorous and formal, the latter more agile and informal.
Architecture
Infrastructure integration, application development, databases and management tools require capacity and leadership to be conceptualized and projected into the future, solving today's problems. The role in which all these activities are delegated is that of the Architect.
The software architect is the person who adds value to business processes thanks to his valuable contribution of technological solutions.
System architecture in general is a planning activity, either at the network infrastructure and hardware level, or at the software level.
The main thing at this point is to clarify the logical and physical aspects of the outputs, organization models and representation of data, inputs and processes that make up the system, considering the benefits and limitations of the resources available in satisfying the pacifications provided for the analysis.
You have to take into account the architecture of the system in which you are going to work, prepare a work plan considering the priority of time and available resources. In the output designs, it enters what is the interpretation of requirements, which is the information domain of the problem, the functions visible to the user, the behavior of the system and a set of classes of requirements that groups the business objects with the methods. who serve them.
Software architecture software consists of the design of application components (business entities), generally using architectural patterns. The architectural design must allow visualizing the interaction between business entities and also be able to be validated, for example through sequence diagrams. An architectural design broadly describes how an application of software will be built. To do this, it is documented using diagrams, for example:
- Class chart
- Database diagram
- Deployment chart
- Sequence diagram
The class and database diagrams are the minimum necessary to describe the architecture of a project that will begin to be coded. Depending on the scope of the project, complexity and needs, the architect will choose which of the diagrams are required to be drawn up.
The tools for the design and modeling of software are called CASE (Computer Aided Software Engineering) among which are:
- Enterprise Architect
- Microsoft Visio for Enterprise Architects
Programming
Implementing a design in code may be the most obvious part of the software engineering job, but it's not necessarily the most labor-intensive or complicated. The complexity and duration of this stage is closely related to the programming language(s) used, as well as the design previously carried out.
Application development
For the development of the application it is necessary to consider five phases to have an efficient application or program, these are:
- Infrastructure development: This phase allows the development and organization of the elements that shape the infrastructure of the application, in order to end the application efficiently.
- Package adaptation: The main objective of this phase is to understand in a detailed way the operation of the package, which aims to ensure that the package can be used in its maximum performance, both for business or resources. All elements that make up the package are inspected in a detailed way to avoid errors and better understand all the characteristics of the package.
- Development of interactive design units: In this phase, the procedures are carried out by a user-system dialogue. The procedures of this phase are aimed at:
- Specifically set the actions to be carried out by the design unit.
- The creation of components for your procedures.
- Run unit and integration tests in the design unit.
- Development of batch design units: In this phase, a series of techniques are used, such as flow diagrams, structure diagrams, decision tables, etc. Anyone to use will be beneficial in clearly and objectively translating the specifications and so the programmer has greater understanding of when programming and testing the programs that correspond to it.
- Development of manual design units: At this stage the central objective is to project all administrative procedures that will develop around the use of computerized components.
Software testing
It consists of checking that the software correctly performs the tasks indicated in the problem specification. One technique is to test each module of the software separately (unit testing), and then test it as a whole (integration testing), in order to reach the goal. It is considered good practice for testing to be done by someone other than the developer who wrote it, ideally a sandbox; Notwithstanding the foregoing, the programmer must carry out his own tests. In general, there are two great ways to organize a test area, the first is that it is made up of inexperienced personnel who are unaware of the subject of tests, in this way it is evaluated that the documentation delivered is of quality, that the processes described are so clear that anyone can understand them and the software does things exactly as described. The second approach is to have a sandbox made up of experienced programmers, people who know without further indications under what conditions an application might fail, and who can pay attention to details that inexperienced staff would not consider.
According to Roger S. Pressman, the testing process focuses on the internal logical processes of the software, ensuring that all statements have been tested, and on the functional external processes, that is,, carrying out tests to detect errors. It is required to be able to test the software with real subjects who can evaluate the behavior of the software in order to provide feedback to developers. It is important that during the software development process contact is not lost with the interested parties or applicants for the development of software, in this way the objectives of the project will remain current and you will have a clear idea of the aspects that have to be tested during the testing period.
Implementation
An implementation is the realization of a technical specification or algorithms with a program, software component, or other computer system. Many specifications are given according to your specification or a standard. The recommended specifications according to the World Wide Web Consortium, and the software development tools contain implementations of programming languages. The implementation model is a collection of components and the subsystems they contain. Components such as: executable files, source code files and all other types of files that are necessary for the implementation and deployment of the system.
The implementation stage of software design is the process of converting a system specification into an executable system. It always involves the software design and programming processes, but, if an evolutionary approach to development is used, it may also involve a refinement of the software specification. This stage is a description of the structure of the software to be implemented, the data that is part of the system, the interfaces between the system components, and sometimes the algorithms used.
Documentation
It is everything related to the documentation of the software development itself and project management, including modeling (UML), use case diagrams, tests, user manuals, technical manuals, etc; all for the purpose of eventual corrections, usability, future maintenance and extensions to the system.
Maintenance
Phase dedicated to maintaining and improving the software to correct errors discovered and incorporate new requirements. This can take even longer than the development of the initial software. Around 2/3 of the life cycle time of a project is dedicated to its maintenance. A small part of this work consists of removing errors (bugs); being that most of it resides in extending the system to incorporate new functionalities and face its evolution.
Software maintenance, according to Lehman research, 80% of maintenance is not corrective action. They are functionality improvements (and incorporation of new requirements), according to Lehman the software evolves over time. Taking this into account, the maintenance stage itself can include the previous stages between the deployment of each new version, reusing existing software, reforming and adapting it.
Advantages
From a management point of view
- Facilitate the project follow-up task
- Optimize the use of resources
- Facilitate communication between users and developers
- Facilitate the assessment of results and implementation of objectives
From the point of view of software engineers
- Help understand the problem
- Allow reuse
- Facilitate the maintenance of the final product
- Optimize the set and each phase of the development process
From the point of view of the client or end user
- Guarantee the quality of the final product
- Get the right life cycle for the project
- Trust in the time frames shown in the definition of the project
Models and life cycles of software development
Software engineering, in order to order the chaos that was previously the development of software, has several models, paradigms and development philosophies, these are the Known primarily as software development models or life cycles, this includes the process followed to build, deliver, and evolve software, from conception of an idea to delivery and retirement of software. system and represents all the activities and artifacts (intermediate products) needed to develop an application.
The life cycle of a software contains the following procedures:
- Definition of objectives: define the outcome of the project and its role in the global strategy.
- Analysis of requirements and their feasibility: collect, examine and formulate the customer's requirements and examine any restrictions that can be applied.
- General design: general requirements of the architecture of the application.
- Design in detail: precise definition of each subset of the application.
- Programme (programming and implementation): it is the implementation of a programming language to create the functions defined during the design stage.
- Unit test: individual test of each application subset to ensure that they were implemented according to specifications.
- Integration: to ensure that the different modules are integrated with the application. This is the purpose of integration test which is carefully documented.
- Beta test (o) validation), to ensure that the software meets the original specifications.
- Documentation: serves to document information necessary for users software and for future developments.
- Implementation
- Maintenance: for all remedial procedures (remedial maintenance) and secondary updates software (continuous maintenance).
Cascading or classic model
In software engineering, the waterfall model ―also called waterfall development or classic life cycle― is based on a methodological approach that rigorously orders the stages of the software's life cycle. , this suggests a sequential systematic approach to the software development process, starting with the specification of customer requirements and continuing with planning, modeling, building and deployment. to culminate in the support of the finished software.
Prototyping model
In software engineering, the prototype model belongs to the evolutionary development models. This allows the whole system, or some of its parts, to be built quickly to easily understand and clarify certain aspects to ensure that the developer, the user, the client agree on what is needed as well as the solution that is proposed for said need and in this way minimize the risk and uncertainty in the development, this model is in charge of the development of designs so that they can be analyzed and dispense with them as new specifications are adhered to, it is ideal for measuring the scope of the product, but its actual use is not ensured.
This model is mainly applied when a client defines a set of general objectives for the software to be developed without delimiting the input, processing and output requirements in detail, that is, when the person responsible is not sure of the efficiency of an algorithm, the adaptability of the system or the way in which man and machine interact.
This model is mainly in charge of helping the systems engineer and the client to better understand what the result of the construction will be when the requirements are satisfied.
Spiral model
The spiral model, originally proposed by Barry Boehm in 1986, is an evolutionary software process model that combines the iterative nature of prototyping with the controlled and systematic aspects of the model in cascade, that is, when this model is applied, the software is developed in a series of evolutionary deliveries (cycles or iterations), each of these delivering more complete prototypes than the previous one, all this based on risk analysis and customer needs. Although the spiral model represents advantages over the linear development, the calculation of risks can be very complicated and therefore its use in the real field is very scarce.
Staged development model
It is a model in which the software is shown to the client in successively refined stages. With this methodology, the most important capacities are developed, reducing the time necessary for the construction of a product; The staged delivery model is useful for the development of the tool because its use is recommended for problems that can be dealt with by breaking them down into smaller problems and is characterized mainly by the fact that the specifications are not known in detail at the beginning of the project and therefore they are developed simultaneously with the different versions of the code.
In this model the following phases can be distinguished:
- Conceptual specification.
- Requirements analysis.
- Initial design.
- Detailed design (coding, cleansing, testing and release).
When it is in stages, in the global design these phases can be repeated according to the number of stages that are required.
Among its advantages we have:
- Detection of problems before and not until the only final delivery of the project.
- Removing time in reports because each version is a breakthrough.
- Time estimate per version, avoiding errors in the estimation of the overall project.
- Compliance to date by developers.
Incremental or iterative model
Iterative and incremental (or incremental) development is a software development process, created in response to the weaknesses of the traditional waterfall model, that is, this model applies linear sequences like the model in cascade, but in an iterative or escalated way according to how the development process progresses and with each of these linear sequences increments (improvements) of the software are produced.
It must be taken into account that the process flow of any increment can incorporate the prototyping paradigm, since as mentioned before, this type of model is iterative by nature, however it differs in that it seeks the delivery of an operational product with each increment that is made to the software.
Structured model
This model ―as its name indicates― uses the techniques of structured design or structured programming for its development, it is also used in the creation of program algorithms. This format makes it easier to understand the data structure and its control. Among the main characteristics of this model are the following:
- Data processes and structures can generally be more clearly differentiated.
- There are methods that focus mainly on certain data.
- The abstraction of the program is of a much higher level.
- Data processes and structures are represented hierarchically.
This model also has its disadvantages, among which we can mention some:
- Repeated data could be found in different parts of the program.
- When the code becomes very extensive or large its handling is too complicated.
In the structured model the techniques that are commonly used are:
- The entity-relationship model, this technique relates mainly to data.
- The data flow diagram is mainly used for processes.
Object-oriented model
These models have their roots in object-oriented programming and as a consequence of it revolves around the concept of class, so do requirements analysis and design. This, in addition to introducing new techniques, also takes advantage of structured development techniques and concepts, such as state diagrams and transitions. The object-oriented model has two main characteristics, which have favored its expansion:
- Allows reuse software to a significant degree.
- Its simplicity facilitates the development of IT tools for development aid, which is easily implemented in an object-oriented notation called UML.
RAD (rapid application development) model
RAD (rapid application development: 'rapid application development'), is an incremental software process model, initially developed by James Maslow in 1980, which It mainly highlights a short development cycle.
This is a methodology that enables the construction of computer systems that combine CASE (Computer Aided Software Engineering) techniques and utilities, the construction of user-centered prototypes and the linear and systematic monitoring of objectives, increasing the speed with which systems are produced using a component-based development approach.
If the requirements are well understood and the scope of the project is limited, the RAD process allows a development team to create a fully functional product within a very limited period of time without reducing the quality of the product in the least.
Concurrent development model
The concurrent development model is a network type model where all people act simultaneously or at the same time. This type of model can be represented schematically as a series of important technical activities, tasks, and states associated with them.
The concurrent process model defines a series of events that will trigger transitions from state to state for each of the software engineering activities. For example, during the early stages of design, an analysis model inconsistency is not contemplated. This generates the correction of the event parsing model, which will trigger the parsing activity from the done state to the waiting changes state. This development model is often used as the client/server application development paradigm. A client/server system is made up of a set of functional components. When applied to client/server, the concurrent process model defines activities in two dimensions: a systems division and a components division. Systems level issues are addressed through two activities: design and implementation.
Concurrency is achieved in two ways:
- System and component activities occur simultaneously and can be modeled with the object-oriented approach described above;
- A typical customer/server application is implemented with many components, each of which can be designed and performed concurrently.
In reality, the concurrent development model is applicable to all types of software development and provides an accurate picture of the current state of a project. Instead of confining software engineering activities to a sequence of events, it defines a network of activities, all activities in the network exist simultaneously with others. Events generated within a given activity or some other side of the activity network initiate transitions between the states of an activity.
Unified Software Development Process
The unified process is a generic software process that can be used for a large number of types of software systems, for different application areas, different types of organizations, different levels of competition and different sizes of projects.
Provides a disciplined approach to assigning tasks and responsibilities within a development organization. Their goal is to ensure the production of very high quality software that meets the needs of end users, within a predictable schedule and budget.
The unified process has two dimensions:
- A horizontal axis that represents time and shows the aspects of the life cycle of the process throughout its development
- A vertical axis representing disciplines, which group activities in a logical way according to their nature.
The first dimension represents the dynamic aspect of the process as it unfolds, expressed in terms of phases, iterations, and milestones.
The second dimension represents the static aspect of the process: how it is described in terms of process components, disciplines, activities, workflows, artifacts, and roles.
The best known and documented refinement of the unified process is the RUP (rational unified process).
The unified process is not just a process, but an extensible framework that can be tailored to specific organizations or projects. In the same way, the rational unified process is also an extensible framework, so it is often impossible to tell whether a particular refinement of the process has been derived from the unified process or from the RUP. For this reason, the two names are often used to refer to the same concept.
Product
The software has become something very necessary in our current society, it is the machine that drives business decision-making, it serves for modern scientific research, it is a key factor that differentiates products and modern services. This is because the software is embedded in systems of all kinds around us.
Computer software is the product that software engineers design and build. This encompasses programs that run inside a computer of any size and architecture, after being built by almost anyone in the industrialized world, either directly or indirectly.
The products can be classified into:
- Generic products: They are those produced by an organization to be sold to the market.
- Custom-made products: Systems that are developed on request to a specific developer.
These products must meet several characteristics when delivered, these are:
- Maintainable: The software He must be able to evolve while performing his functions.
- Reliability: It should not cause damage in case of errors.
- Efficiency: The software He must not waste resources.
- Appropriate use: You must have an appropriate user interface and documentation.
What constitutes the final product is different for the engineer and the users, for the engineer it is the programs, data and documents that configure the software but for the user the final product is the information that In a way it solves the problem raised by the user.
Nature of Software Engineering
Software engineering is a discipline that is oriented to apply engineering concepts and methods to the development of quality software.
Math
Programs have many mathematical properties. For example, the correctness and complexity of many algorithms are mathematical concepts that can be rigorously tested. The use of mathematics in IS is called formal methods.
Creation
Programs are built in a sequence of steps. The fact of properly defining and carrying out these steps, as in an assembly line, is necessary to improve the productivity of the developers and the final quality of the programs. This point of view inspires the different processes and methodologies found in SI.
Project Management
Developing large-scale software requires proper project management. There are budgets, establishment of delivery times, a team of professionals to lead. Resources (office space, supplies, equipment) to be acquired. For its administration you must have a clear vision and training in project management.
Participants and roles
The development of a software system requires the collaboration of many people with diverse skills, abilities, and interests. The group of people involved in the project are known as participants.
The set of functions and responsibilities within the project or system is known as roles or roles. The roles are associated with the tasks that are assigned to the participants, consequently, a person can play one or multiple roles, as well as the same role can be represented by a team.
Customer
The terms "users", "end users" and "clients" as synonyms, which can cause confusion; Strictly, the client (person, company or organization) is the one who specifies the system requirements, while the user is the one who ultimately uses or operates the software product, and may or may not be the client.
Developers
These kinds of participants are involved in all facets of the software development process. Their work includes research, design, implementation, testing, and debugging of the software.
Managers
In the context of software engineering, the software development manager is a participant, reporting to the CEO of the company providing the development service. He is responsible for the management and coordination of resources and processes for the correct delivery of software products, while participating in the definition of the strategy for the team of developers, giving initiatives that promote the vision of the company. company.
End users
The end user is the one who interacts with the software product once it is delivered. Generally, it is the users who are aware of the problem, since they operate the systems on a day-to-day basis.
Code of Ethics for a Software Engineer
A software engineer must have a code where he ensures, to the extent possible, that the efforts made will be used to do good and must be committed so that software engineering i> is a charitable and respected profession. For compliance with this standard, eight principles related to the conduct and decisions made by the engineer are taken into account; where these principles identify the ethically responsible relationships of individuals, groups and organizations where they participate. The principles to which they must adhere are about society, client and employer, product, judgment, administration, profession, colleagues and finally the staff.
- Society: Engineers software must act in a manner consistent with social interest, accepting the total responsibility of their work, moderating interests with social welfare, adopting the software only if you have a well-founded belief, cooperating in efforts to resolve important issues of social interest, be fair and truthful in all claims relating to software or associated documents.
- Customer and businessman: You must act in such a way that the best interests of customers and entrepreneurs are reconciled, consistent with the social interest. They should provide services in their areas of competence, being honest and frank about limitations, not using a software that is obtained illegally or without ethics, use the property of customers or entrepreneurs in an authorized manner, keep secret any confidential information document.
- Product: We must ensure that the products and their modifications meet the highest professional standards possible, ensuring high quality, acceptable costs and a reasonable agenda ensuring that the costs and benefits are clear and accepted by the businessman and the customer. Ensure that the goals and objectives of any project are adequate and achievable.
- Judgment: An integrity and independence must be maintained in the professional trial, moderating all technical judgements for the need to support and maintain human values, maintaining professional objectivity with respect to any software or related document, not engaging in fraudulent financial practices.
- Administration: Good management should be ensured for any project in which it is worked, using effective procedures to promote quality and reduce risks, while ensuring that entrepreneurial policies and procedures are known to protect passwords, files and confidential information.
- Profession: The integrity and reputation of the profession should be increased in conjunction with the social interest, helping to develop a favourable organizational environment to act, promoting public knowledge of engineering softwareextending knowledge of engineering software through participation in organizations, meetings and professional publications.
- Collectors: Each engineer must support and be fair to colleagues, motivating his colleagues by subjecting himself to the code, also helping their professional development, recognizing the work of others and refraining from being attributed to undue merit, reviewing the work in an objective, sincere and properly documented manner.
- Staff: Engineers software participate in their entire life in learning with practice and promote an ethical approach to the profession, improving their knowledge of progress in analysis, specification, design, development, maintenance, testing of the profession software and documents related jointly to the administration of the development process.
Ethical education
Organizations
- IEEE Computer Society
- Association for Computing Machinery (ACM).
- Software Engineering Institute (SEI).
- British Computer Society (BCS).
- RUSSOFT Association
- Society of Software Engineers (SES).
- General Council of Official Colleges of Technical Engineering in Computers (CONCITI)
Contenido relacionado
Electrical blackout
Server
Multitask