Software, concepto y clasificación
El software, también conocido como logicial o soporte lógico, se refiere al sistema formal de un sistema informático. Consiste en un conjunto de componentes lógicos necesarios para llevar a cabo tareas específicas, a diferencia del hardware, que se refiere a los componentes físicos. La interacción entre el software y el hardware permite que un ordenador u otro dispositivo funcione correctamente. El software envía instrucciones al hardware, que las ejecuta, permitiendo así su operación.
Indice de Contenido
Introducción
Dentro de los componentes lógicos se encuentran diversas aplicaciones informáticas, como por ejemplo el procesador de texto, el cual posibilita al usuario llevar a cabo todas las labores relacionadas con la edición de textos. Asimismo, existe el denominado software de sistema, como el sistema operativo, el cual tiene la función primordial de permitir el correcto funcionamiento de los demás programas. Además, facilita la interacción entre los componentes físicos y el resto de las aplicaciones, al tiempo que proporciona una interfaz amigable para el usuario.
La mayoría del software se desarrolla en lenguajes de programación de alto nivel debido a que son más accesibles y eficientes para los programadores, ya que se asemejan más al lenguaje natural en comparación con el lenguaje de máquina.
Estos lenguajes de alto nivel se traducen al lenguaje de máquina utilizando compiladores, intérpretes o una combinación de ambos. También es posible escribir software en lenguaje ensamblador, que es de bajo nivel y se corresponde directamente con las instrucciones de la máquina. El ensamblador se traduce al lenguaje de máquina mediante un ensamblador.
El término "software" es ampliamente utilizado, especialmente en la jerga técnica, como un anglicismo que se refiere a este concepto. Sin embargo, el término sinónimo "logicial", derivado del francés "logiciel", se utiliza principalmente en países y áreas de influencia francesa.
La palabra "software" es de origen inglés y en español no tiene una traducción exacta que se ajuste al contexto, por lo que se utiliza comúnmente sin traducir, y ha sido aceptada por la Real Academia Española (RAE). Aunque no sea estrictamente lo mismo, a menudo se sustituye por expresiones como programas informáticos, aplicaciones informáticas o soportes lógicos.
El término "software" se refiere al producto en el campo de la ingeniería de software. El término "logicial" es una adaptación del término francés "logiciel", una palabra creada en 1969 a partir de las palabras "logique" (lógica) y "matériel" (material) como traducción de la Delegación de Informática responsable del Plan Calcul.
Clasificación del software
Si bien esta distinción puede resultar arbitraria y, en ocasiones, confusa, a efectos prácticos se puede clasificar el software en tres tipos distintos.
El software de sistema
tiene como objetivo principal facilitar la interacción entre el usuario y el programador con los detalles específicos del sistema informático utilizado, aislando especialmente al usuario y al programador de los procesamientos internos relacionados con la memoria, los discos, los puertos y dispositivos de comunicación, impresoras, pantallas, teclados, entre otros. Este tipo de software proporciona al usuario y al programador interfaces de alto nivel, controladores, herramientas y utilidades de apoyo que permiten el mantenimiento del sistema en su conjunto.
El software de programación
se refiere al conjunto de herramientas que permiten al programador desarrollar programas informáticos de manera práctica. Estas herramientas proporcionan diferentes alternativas y lenguajes de programación para que el programador pueda escribir, depurar y probar el código de manera eficiente. El software de programación incluye editores de código, compiladores, depuradores, entornos de desarrollo integrados (IDE), bibliotecas y otros recursos que facilitan el proceso de desarrollo de software.
El software de aplicación
se refiere a aquel que permite a los usuarios realizar una o varias tareas específicas en diversos campos de actividad que pueden ser automatizados o asistidos. Este tipo de software se enfoca especialmente en el ámbito empresarial, brindando herramientas y funcionalidades diseñadas para facilitar las operaciones y procesos comerciales.
Los software de aplicación pueden abarcar una amplia gama de áreas, como gestión de proyectos, contabilidad, recursos humanos, ventas, marketing, atención al cliente, entre otros, adaptándose a las necesidades particulares de cada sector y empresa. Su objetivo principal es optimizar y agilizar las actividades diarias, mejorar la productividad y proporcionar soluciones específicas para cada negocio.
Proceso de creación del software
El proceso de desarrollo de software se define como el conjunto ordenado de pasos a seguir para resolver un problema o crear un producto de software que satisfaga una necesidad específica.
La complejidad del proceso puede variar según el tamaño, las características y la criticidad del software. Por ejemplo, el desarrollo de un sistema operativo requiere de un proyecto, gestión y una amplia cantidad de recursos, así como un equipo disciplinado de trabajo. Por otro lado, la creación de un programa sencillo, como la resolución de una ecuación de segundo grado, puede ser realizado por un solo programador, incluso si es aficionado.
Para clasificar el tamaño o costo del software, se suelen dividir en tres categorías: pequeño, mediano y gran porte, utilizando como referencia la cantidad de líneas de código. Existen metodologías como el sistema COCOMO que ayudan a estimar los costos de producción en un proyecto de software, considerando variables como horas de trabajo, costo monetario y cantidad de líneas de código según el lenguaje utilizado.
En el desarrollo de software de gran porte, se requieren tareas complejas tanto técnicas como de gestión, incluyendo análisis diverso. Esto ha llevado al desarrollo de una disciplina específica conocida como ingeniería de software.
En el caso de software de mediano porte, pueden ser realizados por equipos pequeños o incluso por un analista-programador experimentado de manera individual. Sin embargo, en ambos casos, es necesario seguir ciertas etapas necesarias para la construcción del software. Estas etapas pueden variar en su aplicación según la metodología o proceso de desarrollo seleccionado por el equipo de desarrollo o el analista-programador.
Los procesos de desarrollo de software tienen reglas preestablecidas que deben ser aplicadas en proyectos de mediano y gran porte para asegurar el cumplimiento de los objetivos y evitar fallos inaceptables. Existen diferentes enfoques en los procesos de desarrollo, como los ágiles (por ejemplo, XP), los pesados y lentos (por ejemplo, RUP) y variantes intermedias. La elección del enfoque depende del tipo y tamaño del software a desarrollar, a criterio del líder del equipo de desarrollo.
Independientemente del proceso utilizado, es necesario aplicar un modelo de ciclo de vida en el desarrollo del software. Se estima que aproximadamente el 28% de los proyectos de software grandes fracasan, el 46% se enfrenta a modificaciones severas que retrasan el proyecto, y solo el 26% tiene éxito total.
Cuando un proyecto de software falla, la causa principal suele ser la falta de aplicación de una metodología o proceso de desarrollo adecuado. En las últimas décadas, ha habido un esfuerzo por mejorar las metodologías y crear conciencia entre los profesionales de la informática sobre su uso adecuado. Los ingenieros de software suelen ser los especialistas en estas áreas, que incluyen el estudio y desarrollo de metodologías, modelos y gestión de proyectos. Otros profesionales informáticos, como analistas, programadores, licenciados en informática, ingenieros en informática o ingenieros de sistemas, aplican sus conocimientos especializados utilizando los modelos, paradigmas y procesos existentes.
En el desarrollo de software de mediano porte, es común que los equipos involucrados apliquen "metodologías propias", que suelen ser una combinación de los procesos existentes y criterios propios.
El proceso de desarrollo puede involucrar numerosas tareas, desde aspectos administrativos hasta técnicos y de gestión. Sin embargo, hay etapas mínimas que suelen cumplirse, como la captura y elicitación de requisitos, especificación y análisis de requisitos, diseño, codificación, pruebas (unitarias y de integración), instalación y puesta en producción, y mantenimiento.
Carácter evolutivo del software
Estas leyes de Lehman proporcionan una comprensión profunda de la dinámica de evolución del software y ayudan a los profesionales de la ingeniería de software a entender los cambios y desafíos que surgen durante el ciclo de vida de un sistema.
Según estas leyes, el software experimenta cambios continuos para adaptarse a su entorno y seguir siendo útil. A medida que evoluciona, tiende a volverse más complejo, lo que requiere esfuerzos adicionales para mantener y simplificar su estructura.
La evolución del software es un proceso prolongado y autorregulativo, donde ciertos atributos del sistema, como su tamaño, el tiempo entre entregas y la cantidad de errores documentados, se mantienen aproximadamente constantes en cada entrega.
La velocidad de desarrollo del software es estable a lo largo de su vida útil, independientemente de los recursos dedicados al desarrollo. Además, se conserva la familiaridad del sistema, con cambios incrementales constantes en cada entrega.
La funcionalidad del software debe crecer continuamente para satisfacer las necesidades de los usuarios y mantener su satisfacción. Sin embargo, si el software no se adapta a los cambios del entorno, su calidad comenzará a disminuir.
Finalmente, los procesos de evolución del software incorporan sistemas de retroalimentación multiagente y multibucle, que deben ser tratados como sistemas de retroalimentación para lograr mejoras significativas en el producto.
Estas leyes de Lehman ofrecen una base teórica sólida para comprender y abordar la evolución del software a lo largo del tiempo, y son de gran relevancia en el campo de la ingeniería de software.