For a computer, smartphone or other digital device to function it is necessary to have several elements. Within these elements we have the physical or hardware components of the device. These are the processors, screen, keyboards and many more. Now, something has to tell these devices how they should work or what operations to perform. This is the other fundamental component of these devices and is known as software. There are many types of software with many features. If you want to know what software is, I invite you to continue reading.
Table of Contents
In 1957, John W. Tukey was the first to use the term software to refer to the software of a computer system.
There are many ways to define what software is, however, the IEEE 729 standard defines it as “The set of computer programs, procedures, rules, documentation and associated data, which are part of the operations of a computer system.”
Following this definition, the conceptualization of software is something more than a source code, binary or executable. That is, the documentation, the data, as well as the user information are also part of the software. This part of the computer systems groups together everything intangible, that is, everything that is not physical within the system itself.
The branch of computational science that is responsible for studying and designing software construction processes is known as Software Engineering. Within software engineering, this is defined as all information processed by a computer system, that is, the program and the data as a whole.
All software has a theoretical basis defined in the test “The computable numbers” by Alan Turing published in 1936. The control of operations by reading instructions stored in memories, was introduced by Charles Babbage in the design of your differential machine.
It is really very difficult and cumbersome to establish a software classification. However, for practical purposes these can be grouped into three different types: system, programming and application software.
The purpose of the system software is to make internal processing fully transparent to the user. This type of software controls the communication and execution of tasks by physical devices. This software provides the programmer and the user high-level interfaces, tools, drivers, and various utilities. All this in order to have global control of the entire computer system. The most common system softwares include:
- The operating systems.
- Device drivers.
- Diagnostic tools.
- Optimization and correction utilities.
These softwares are tools that allow the development of other softwares. They are used by qualified personnel within this field known as programmers. There are many tools of this type that use encodings in different programming languages. These softwares are generally composed of:
- A text editor used to write the statements in a specific programming language.
- Compiler in charge of translating the tool’s own language into a low-level language that is understood by the system into the computer system.
- Interpreter which is responsible for analyzing and translating the code into other languages as necessary. They do not save the result of the execution of an instruction.
- Linker in charge of generating a necessary file from the code, libraries and other dependencies generated or utilities during the development process.
- Scrubber to analyze and test your code for errors.
All these tools are generally unified in one integrated development environment IDE. These offer visual interfaces and optimized functions to provide ease during the software creation process.
A app software allows the user to carry out tasks in automated contexts. Can be any management, editing or control tool to run a specific task. They are especially oriented in the field of business. Within these we have:
- Control of other automatic systems.
- Office software (Office Word, Libre Office, etc …)
- Educational applications.
- Business applications.
- Database systems.
- Telecommunications applications.
- Video game.
The process of creating a software is governed by various development methodologies. Each has its own characteristics and generates different components during the software life cycle called artifacts.
The choice of each methodology depends on many factors. In particular, the esize of the application, time available, future support, work team among others. There are agile mechanisms for short-term projects, such as XP, as well as methodologies of large volumes of artifacts and long development times such as RUP.
There are common steps that all methodologies generally implement. Each of these steps has additional threads according to the level of complexity of the software.
Step 1: Requirements Analysis
This is one of the most important steps of software development. At that moment is when you define exactly what you want to create. During this phase, they are in constant exchange with the client, explaining and assimilating information to define the best way to implement the software.
According to the development model taken, the analysis it can be done early in development or gradually modified and given feedback During all the process. All functional and non-functional characteristics of the product are specified here. It is a way of indicating to programmers what are the guidelines to follow and how the software should be modeled.
Step 2: Design
This is another phase of the software life cycle. At this time it is due define how the requirements extracted from the analysis phase will be met. That is, what structure should the software have so that the customer’s requirements are met.
During this phase still no code has been written. You can design prototypes of graphical interfaces and diagrams of relationships between classes and subsystems.
The a is also definedsoftware architecture. This is nothing more than the hierarchy of software modules and the relationships between them. For example, a service-oriented architecture (SOAP, Rest) is a software that consults execution modules on a server and waits for a response from them. This brings the advantage that any interface can make use of these services in future versions or other software without the need to change the processing or business logic.
In the final process of this phase, detailed descriptions of the system. These descriptions are pretty close to the coding process.
Step 3: Coding the software
This is the stage commonly known as system programming. This is where the code is written and implemented that will allow to execute the functionalities that respond to the client’s requirements.
Together with the programming process, code debugs to eliminate possible semantics and syntax errors.
It is possible that the code adopt different states during this stage, these are:
- Source code, which is the base code written by the programmer, of the software and the one that supports its entire structure. Here the system instructions are written in a specific programming language, being divided into packages, libraries, modules, etc.
- Object code, which results from the source code compilation process. This code cannot be executed, being an intermediary between the source code and the executable. If the language used works in pure performer, the object code is not generated. On the contrary, the compiler is in charge of executing each line of code directly.
- Executable code, which is nothing more than the binary code that results from joining the object code fragments with the necessary routines and libraries. This code generates one or more binary files that the operating system then loads into memory RAM for direct execution. This code commonly named as machine code, since it is completely intelligible by the computer.
Step 4: Software testing
The testing period is aimed at finding bugs and business logic that have been introduced during the development phase. These can be divided into the fundamental groups:
- Unitary, which test small independent portions of the software and with specific functionalities.
- Integration, which are in charge of testing the operation of the software as a whole.
To carry out the tests it is necessary to have a real or fictitious data set of the business. Once the data has been obtained, we proceed to develop the test cases that will try to make the system fail or check its correct operation.
The last step of the testing process is known as “Beta Test”. To carry out this test, the software is deployed and released for use by clients, who can catch errors and notify them so that they can be solved.
Step 5: Production
The production process consists of deploy the software in the customer environment and make it ready for use. Here the user training processes, delivery of execution and installation manuals, and of course, the charge for the final product take place.
Step 6: Support and maintenance
This step is optional and may be required by the customer. This process is negotiated between the developers and the client to establish it in a certain period of time.
During this period, the developers must perform maintenance on the software. These tasks can be performance improvements and optimization or correction of bugs found during execution.
Additionally, the customer may include new functional requirements that need to be implemented and added to the tool.
The softwares have evolutionary processes according to its use and acceptance by the client. These softwares generate versions with new functionalities based on the demand for new requirements. When the life cycle of a software is fulfilled, it is not used with the same intensity or no more is required. When this happens, the system is no longer supported and it is impossible to find new versions. It is common for users to migrate to tools that perform the same tasks and have updated versions and active support.