Software

Volver a inicio

Historia del Software

La primera teoría sobre el software fue propuesta por Alan Turing en su ensayo de 1935 sobre números computables, con una aplicación destinada a la toma de decisiones. El término "software" fue utilizado por primera vez de forma escrita por John W. Tukey en 1958. El estudio de los campos académicos sobre el software se divide en informática y la ingeniería de software.

Como los programas cada vez entraban más en el reino de firmware y el hardware por si sólo se hacía más pequeño, más barato y más rápido debido a la ley de Moore, los elementos de la computación que primero se consideraban software, pasan a ser hardware. La mayoría de las compañías de hardware hoy en día tienen más programadores de software en nómina que diseñadores de hardware, ya que las herramientas de software han automatizado muchas de las tareas de los ingenieros de circuitos. Al igual que la industria automotriz, la industria del software ha crecido de unos pocos visionarios que operaban en su garaje con sus prototipos. Steve Jobs y Bill Gates fueron los Henry Ford y Chevrolet Luis de sus tiempos. En el caso del desarrollo de software, el despegue final es generalmente aceptado que se produce con la publicación en la década de 1980 de las especificaciones para el IBM Personal Computer. Hoy su movimiento sería visto como un tipo de público-sourcing.




Hasta ese momento, el software se incluye con el hardware de los fabricantes de equipos originales (OEM), tales como Data General, Digital Equipment y de IBM. Cuando un cliente compra una minicomputadora, esta incluye el software que es instalado por los ingenieros empleados por el OEM. Las empresas de informática de hardware, no sólo incluyen sus paquetes de software, sino que también asesoren sobre la ubicación de los equipos normalmente en un espacio refrigerado llamo sala de ordenadores. La mayoría de las empresas tenían su software en su contabilidad valorados 0 ya que no podían venderlo. Cuando Data General introdujo su software Data General Nova, una compañía llamada Digidyne intentó instalar este software que ya había adquirido en un equipo distinto. Data Gerenal se negó a darle una licencia para poder hacerlo y fueron a los Tribunales. La Corte Suprema dijo que si Digidyne había pagado era propietaria de ese software debía poder instalarlo en el equipo que quisiese, lo que se llamó Digidyne v. Poco después IBM publicó los registros de DOS y nació Microsoft. La decisión de la Corte Suprema permitió valorar el software, patentarlo y comerciar con el. Es difícil imaginar hoy que una vez la gente sentía que el software no valía nada sin una máquina. Hay muchas empresas de éxito hoy en día que venden sólo productos de software, aunque todavía hay muchos problemas comunes de concesión de licencias de software debido a la complejidad de los diseños y documentación, lo que lleva a los trolls de patentes.

Con las especificaciones de software de código abierto y la posibilidad de concesión de licencias de software, nuevas oportunidades se levantaron de herramientas de software que luego se convirtieron en el estándar de facto, como DOS para los sistemas operativos, sino también diversos programas de procesamiento de texto y hojas de cálculo. En un patrón de crecimiento similar, los métodos de desarrollo de propiedad se convirtió en la metodología estándar de desarrollo de software.


El software en la actualidad

Con la creciente demanda de software en organizaciones cada vez más pequeñas, surge la necesidad de soluciones de software de bajo costo. Esta circunstancia, llevó al crecimiento de metodologías de desarrollo y programación más simples que desarrollaran software en ejecución, desde los requisitos hasta la implementación, de manera más rápida y sencilla. El uso de prototipos rápidos evolucionó a metodologías livianas completas, como Extreme Programming (XP), que intenta simplificar muchas áreas de la ingeniería de software, incluida la recopilación de requisitos y las pruebas de confianza para la creciente cantidad de pequeños sistemas de software.

Los sistemas de software más grandes todavía utilizaban metodologías muy documentadas, con muchos volúmenes en el conjunto de documentación; sin embargo, los sistemas más pequeños tienen un enfoque alternativo más simple y rápido para administrar el desarrollo y mantenimiento de cálculos y algoritmos de software, así como el almacenamiento/recuperación de información y su visualización.

Diferencias entre el sistema operativo y los programas informáticos

Entendemos por sistema operativo el cerebro digital del dispositivo. Este hace posible todas y cada una de las tareas en el dispositivo, sean programas o aplicaciones de cualquier tipo.

Por otra parte, un programa informático no puede ser ejecutado sin un sistema operativo que previamente nos permita abrir el programa. Luego, en un dispositivo el corazón es el sistema operativo y los brazos y piernas de este son los programas.

Software y hardware

Todo dispositivo está formado tanto por la parte intangible, el software, como por la parte tangible, el hardware. El hardware es el conjunto de elementos materiales que forman parte de un dispositivo electrónico. Por ejemplo: en el caso de una computadora, el hardware está formado por el monitor, el teclado, el ratón, entre otros.

Tanto el software como el hardware resultan piezas claves para la correcta ejecución de un ordenador o aparato móvil. Los usuarios no podrían ejecutar un software sin la presencia de un hardware y, a su vez, el hardware resulta inútil sin un software. Ambos son opuestos pero complementarios, por lo que trabajan en conjunto.

Cada dispositivo está compuesto por diferentes piezas de hardware que pueden ser electrónicas, eléctricas o mecánicas y que cumplen una función específica. Por ejemplo: una memoria de almacenamiento o una placa de video.

Existe el hardware principal, indispensable para el correcto funcionamiento del aparato, y el hardware complementario, formado por accesorios con funcionalidades específicas.

La programación

El software se desarrolla mediante distintos lenguajes de programación, que permiten controlar el comportamiento de una máquina. Estos lenguajes consisten en un conjunto de símbolos y reglas sintácticas y semánticas que definen el significado de sus elementos y expresiones.

Un lenguaje de programación habilita a los programadores del software a especificar, de forma precisa, sobre qué datos debe operar una computadora.

Metodologías de desarrollo de software tradicionales

Las metodologías de desarrollo de software tradicionales se caracterizan por definir total y rígidamente los requisitos al inicio de los proyectos de ingeniería de software. Los ciclos de desarrollo son poco flexibles y no permiten realizar cambios, al contrario que las metodologías ágiles; lo que ha propiciado el incremento en el uso de las segundas.

La organización del trabajo de las metodologías tradicionales es lineal, es decir, las etapas se suceden una tras otra y no se puede empezar la siguiente sin terminar la anterior. Tampoco se puede volver hacia atrás una vez se ha cambiado de etapa. Estas metodologías, no se adaptan nada bien a los cambios, y el mundo actual cambia constantemente. Las principales metodologías tradicionales o clásicas son:

  • Waterfall (cascada): es una metodología en la que las etapas se organizan de arriba a abajo, de ahí el nombre. Se desarrollan las diferentes funciones en etapas diferenciadas y obedeciendo un riguroso orden. Antes de cada etapa se debe revisar el producto para ver si está listo para pasar a la siguiente fase. Los requisitos y especificaciones iniciales no están predispuestos para cambiarse, por lo que no se pueden ver los resultados hasta que el proyecto ya esté bastante avanzado.
  • Prototipado: se basa en la construcción de un prototipo de software que se construye rápidamente para que los usuarios puedan probarlo y aportar feedback. Así, se puede arreglar lo que está mal e incluir otros requerimientos que puedan surgir. Es un modelo iterativo que se basa en el método de prueba y error para comprender las especificidades del producto.
  • Espiral: es una combinación de los dos modelos anteriores, que añade el concepto de análisis de riesgo. Se divide en cuatro etapas: planificación, análisis de riesgo, desarrollo de prototipo y evaluación del cliente. El nombre de esta metodología da nombre a su funcionamiento, ya que se van procesando las etapas en forma de espiral. Cuanto más cerca del centro se está, más avanzado está el proyecto.
  • Incremental: en esta metodología de desarrollo de software se va construyendo el producto final de manera progresiva. En cada etapa incremental se agrega una nueva funcionalidad, lo que permite ver resultados de una forma más rápida en comparación con el modelo en cascada. El software se puede empezar a utilizar incluso antes de que se complete totalmente y, en general, es mucho más flexible que las demás metodologías.
  • Diseño rápido de aplicaciones (RAD): esta metodología permite desarrollar software de alta calidad en un corto periodo de tiempo. Los costes son mucho más altos y el desarrollo más flexible, aunque requiere una mayor intervención de los usuarios. Por otro lado, el código puede contener más errores, y sus funciones son limitadas debido al poco tiempo del que se dispone para desarrollarlas. El objetivo es iterar el menor número posible de veces para conseguir una aplicación completa de forma rápida.

Ejemplos de software

Existen muchos ejemplos de software, que se clasifican según su función en:

  • Software de edición de imágenes. Por ejemplo: Adobe Photoshop, Paintshop, GIMP.
  • Software de procesador de texto. Por ejemplo: Microsoft Word, Word Pad, Block de notas.
  • Software de audio. Por ejemplo: Adobe Audition, Abelton, Pro Tools.
  • Software de comunicación. Por ejemplo: Facebook, Skype, Zoom.
  • Software de diseño y arquitectura. Por ejemplo: AutoCAD, Adobe Illustrator, Revit.
  • Software de contabilidad. Por ejemplo: Loggro, Xero, Nubox, SAGE.
  • Software de sistema operativo. Por ejemplo: Linux, MacOS, Windows.
  • Software de protección contra virus. Por ejemplo: AVG Antivirus, McAfee, Panda.
  • Software de programación. Por ejemplo: Microsoft Visual Studio, Xcode, Lazarus.




Según su plataforma

Esta es una clasificación bastante evidente, aunque podemos encontrar muchos tipos distintos. Como decimos, el software está en todo tipo de dispositivos, pero nos vamos a quedar solo con los tipos de plataformas que «se nos quedan cerca» a los usuarios:

  • Aplicaciones de escritorio: que funcionan en sistemas operativos de ordenador como macOS, Windows o bajo sistemas Linux.
  • Apps de móvil: que funcionan en sistemas como Android o iOS.
  • Aplicaciones web: que ejecutamos online y que podemos ejecutar (normalmente) desde cualquier plataforma. Corren sobre sus servidores, de los que quienes las usamos no sabemos nada.

Dentro de cada categoría, o incluso entre varias, podemos hablar de software multiplataforma para todo aquel que puede ejecutarse en distintos sistemas operativos. Podríamos continuar la clasificación hablando de aspectos como el software usado en el internet de las cosas, pero en este caso lo dejaremos así.

Tipos de software según su función

Si bien el software posee en común su carácter intangible, su arquitectura en forma de programa o aplicación y que deben estar construidos en base a un lenguaje de programación, a efectos de utilidad y uso, se suelen distinguir tres clases de software:

  • De programación. Se trata del conjunto de herramientas que permiten desarrollar programas informáticos. Son por así decirlo, la carrocería de un automóvil. Ejemplos son los editores de texto o los compiladores de código.
  • De aplicación. Acapara las herramientas que posibilitan una actividad o una acción de forma digital. Siguiendo con el símil, en este caso serían las ruedas y pedales del coche. Ejemplos son los videojuegos o el software de ofimática.
  • De sistemas. Consiste en la correcta relación que se establece entre usuario y software, siendo la cara más visible del proceso de experiencia. Aquí podemos confirmar finalmente, que se trataría del volante y el motor. Ejemplo son los sistemas operativos o los servidores.

Tipos de software según su objetivo

Existen cinco tipos de software que los identifican individualmente en base a su tipología de código y su objetivo:

  1. De pago. Este tipo de software se consigue previo pago del precio de venta.
  2. Gratuito. En cambio, el denominado freeware es el software que se consigue sin coste monetario alguno, es decir, se podría adquirir gratis.
  3. Libre. Por otro lado el software libre hace referencia a los dos anteriores (puede ser de pago o gratuito) pero con la diferencia de que el código está abierto a modificaciones por parte del usuario. En otras palabras, si habláramos de que compramos un coche y nos dejaran modificar su motor sin problema alguno, vendría a ser un símil de adquirir un programa informático y tener acceso a modificar el código que lo conforma.
  4. Con anuncios. Este tipo de software se consigue usualmente de forma gratuita pero a cambio te muestra anuncios para conseguir ingresos.
  5. Demostraciones. Las denominadas “demostraciones” no son más que las archiconocidas “demos”. Las más famosas son las de videojuegos. Consisten en mostrarte durante un periodo determinado un software que originalmente es de pago de forma gratuita hasta que venza dicho periodo. Es una estrategia para enseñar el contenido, y alentar a su compra.

El Software como Servicio, Software as a Service o SaaS

Queremos recoger de manera totalmente separada un tipo de software que está emergiendo últimamente con fuerza: el SaaS, o Software as a Service. Esto es un modelo de distribución y licenciado de software, por lo que debería formar parte de la anterior clasificación, pero tiene una gran importancia por sí solo al relacionarse con la computación en la nube.

Este modelo comprende un software basado en suscripciones pero de una manera muy peculiar: cuando un usuario obtiene una suscripción, no se le proporciona el software para que lo instale en su ordenador, sino que se le permite acceder a él a través de la nube, pues este estará siempre en los servidores de la empresa desarrolladora, incluidos los datos usados por el cliente.

Así, se consiguen importantes ventajas, como es no depender del hardware del usuario para funcionar, ya que tan solo requiere un navegador web, lo que puede reducir la inversión en ordenadores de las empresas (lo mismo ocurre para el almacenamiento, que queda en la nube).

Por la banda de sus desventajas, sin duda encontramos la dependencia del acceso a internet, pues si nos falla no podremos acceder a las aplicaciones, y lo mismo si hay algún tipo de problema de red o de hardware del lado del desarrollador. Aquí no queda otra que confiar en tener un % de disponibilidad alto, con una infraestructura robusta por ambas partes. También nos hace depender del desarrollador en el sentido de que no poseemos el software, sino el derecho de usarlo, y si esa compañía cierra de repente o es hackeada nos podemos quedar sin nada.

En todo caso, todos usamos el SaaS hoy en día, pues también puede ser gratuito, como es el caso de Google Drive y su suite de ofimática. Por la banda empresarial hay SaaS por todas partes, solo hay que ver (por ejemplo) el catálogo de Attlasian.

Fases de construcción del software

Está claro que el software no se construye simplemente a base de programar, ¿no? Y es que una idea no sale de la nada, sino que hay que pensarla primero, ni podemos lanzarnos a desarrollar el código sin una cierta planificación definida. Para más, debemos ser capaces de arreglar todos los problemas y bugs que, con casi total seguridad, se encontrarán luego de que un programa se despliegue al público. Y no nos olvidemos de mejoras constantes para mantener a los usuarios con nosotros.

Hay un montón de conceptos, procesos y maneras de trabajar asociadas a esto. Pero vamos a dar una clasificación bastante sencilla de entender, la del proceso de construcción del software detallado en Ingeniería del Software. Un Enfoque Práctico de Roger S. Pressman.

Desarrollo: ¿Cómo lo vamos a hacer?

En esta fase respondemos a la pregunta de cómo vamos a implementar el software, entrando ya a un nivel de gran detalle, que comprende los siguientes puntos:

  • Diseño y modelado del software: Aquí se hace uso de estándares como UML (Unified Modeling Language). Se crean distintos tipos de diagramas en los que se representan las distintas partes del software, y cómo interactúan entre ellas. Se plantea cómo trasladar el diseño a un lenguaje de programación.
  • Codificación: Por fin, podemos empezar a programar el software, ya con las cosas claras, puesto que una programación sin rumbo puede tener resultados nefastos en programas que sean mínimamente complejos.
  • Antes de publicar el software para su uso por el público o por los clientes del desarrollador, se hacen todas las pruebas posibles para confirmar que el programa está preparado para ello. Si no se le da importancia a esto, vendrán los problemas.

Mantenimiento

Se trata de una última fase que se extiende a toda la vida restante del software, y se centra básicamente en hacer lo necesario para mantenerlo en funcionamiento y darle todas las mejoras posibles, distinguiendo 4 actividades:

  • Adaptación: El contexto sobre el que se ejecuta el software puede cambiar de manera importante. Pensemos en una web cuya base de usuarios crece demasiado, y hay que optimizar los accesos a la base de datos para no saturar el servidor. O, en un caso más realista, en todos los desarrolladores que han adaptado sus programas de macOS para soportar los chips propios de Apple.
  • Corrección: Cuando se detecta o reporta un error o ‘bug’, hay que lanzar una nueva versión que lo corrija.
  • Sin características nuevas, los usuarios se cansarán de este software. Hay que incorporar constantemente mejoras que lo hagan más útil e interesante.
  • Prevención: No tiene sentido estar esperando a que los errores aparezcan. Debemos ser ambiciosos en prevenir que estos ocurran, y ver dónde hay un potencial de fallo importante.

También es muy importante optimizar todos los programas en general, algo que se enmarcaría entre la parte de “adaptación” y la de “mejora”. Dos de los mayores ejes de optimización son los accesos a datos, que si se hacen fuera de la memoria caché del procesador pueden ser muy costosos, y la paralelización. Actualmente todos los procesadores tienen más de un núcleo, pero no todo software es capaz de aprovecharlo.

Software específico para testear hardware

En Profesional Review, somos una web principalmente dedicada al hardware, así que para nosotros hay ciertos tipos de software que son fundamentales estamos hablando de:

  • Software de monitorización: El que usamos para ver parámetros eléctricos, términos o de funcionamiento de los componentes del sistema, para ver si todo va bien.
  • Estos son programas basados en aplicar una carga de trabajo determinada al equipo, normalmente bastante intensiva, con el objetivo de estresar los recursos del ordenador (de un componente o grupo de componentes) y comparar el rendimiento con otros equipos. Así, se puede conocer el rendimiento de un nuevo procesador, tarjeta gráfica o SSD, por ejemplo.
  • Otros software de testeo: Como por ejemplo los que empleamos para probar las características de una pantalla (DisplayCAL, HCFR…)

Dentro del grupo del software de monitorización, quizás el más importante sea HWinfo64, al ser líder en cuanto a compatibilidades y funcionalidades, y totalmente gratuito. Dentro de los benchmarks, todo depende de qué componentes queremos testar:

  • CPU: entre los programas más usados encontramos Linpack Xtreme y Prime95, que consiguen estresar el procesador de manera extrema, haciendo que gaste toda la energía posible. No nos olvidemos de otro clásico, que es Cinebench, que hace una prueba más realista.
  • Tarjeta gráfica: aquí hay una importante distinción entre pruebas destinadas a replicar un juego altamente demandante, como es el caso de 3DMark y Unigine Superposition, o las que son más severas y orientadas a poner más contra las cuerdas al núcleo de la gráfica, como FurMark.
  • Discos duros: hay un montón de programas destinados a medir las velocidades de transferencia, tiempos de acceso, IOPS y otros parámetros. Entre ellos están CrystalDiskMark, ATTO Disk Benchmark, Anvil’s Storage, etc.
  • Suites con benchmarks muy específicos como es el caso de AIDA64 o SiSoft Sandra.

El software libre

El software libre es un software en el que los usuarios pueden acceder a su código fuente para estudiarlo, copiarlo o modificarlo.

El término y las ideas que engloba el software libre fueron introducidas en 1984 por el programador estadounidense Richard Matthew Stallman, quien creó la Free Software Foundation con el fin de extender este tipo de software y rescatar la idea de libertad del usuario.

Un software se considera libre cuando:

  • Se lo puede utilizar con cualquier propósito.
  • Se lo puede estudiar, conocer su funcionamiento y modificar en caso de creerlo necesario.
  • Se pueden distribuir copias.
  • Puede ser mejorado por cualquier usuario.

Se tiende a confundir la idea de software libre con gratuito, pero es importante tener en cuenta que no todo software gratuito es libre, como no todos los softwares libres son gratuitos.

Tampoco se debe confundir el concepto de software libre con el de código abierto, ya que este último no siempre garantiza las cuatro condiciones.

Se considera no libre a todo software que no garantice las cuatro libertades. En esos casos, suelen ser los creadores o dueños de la licencia los que modifican y regulan la distribución del software.
Son ejemplos de softwares libres el sistema operativo GNU o el procesador de textos de Open Office.

Software malicioso o malintencionado

Utilizado también en su forma original en inglés malicious software o simplemente malware, es el que se crea con fines ilícitos como obtener información privada del usuario o dañar el sistema.

Origen del software propietario

Los comienzos del software propietario se dieron entre la década de los 70’ y los 80’. Fueron IBM y Microsoft las empresas que impulsaron las prácticas de creación y desarrollo de programas con restricciones al acceso del código o, dicho de otra forma, de código cerrado.

Fue en esa misma época en la que surgió los movimientos a favor del software libre, que hasta el alzamiento del software privativo era el modus operandi de colaboración, desarrollo y distribución de software más extendido. Nos encontramos pues con dos figuras totalmente distintas en su forma de concebir el software. Por un lado, tenemos a Richard Matthew Stallman, creador de la ‘Free Software Foundation’. Por otra parte, tendríamos a Bill Gates, fundador de Microsoft.

El software propietario es con diferencia el tipo de software que más se ha distribuido. Sin ir más lejos el sistema operativo más utilizado del mundo, Windows, supera con creces al número de usuarios que utilizan Linux o alguna de sus variantes.

Ejemplos de software propietario

Algunos de los ejemplos más conocidos de software propietario que se dan en el mundo de la informática son:

  • Sistemas operativos: Windows, Chrome OS y macOS.
  • Programas de ciberseguridad: Norton, Kasperski o Panda.
  • Programas informáticos empresariales: SAP, SAGE o Matlab.
  • Aplicaciones comerciales: Google Drive, Skype o Microsoft Edge.
  • Videojuegos y software de entretenimiento: FIFA, Spotify o Netflix.

Características del software propietario

Si bien es cierto que el manifiesto y las reglas que rodean al software libre son inclusivas y no discriminan por poder adquisitivo, existen ciertas ventajas a destacar que caracterizan al software propietario:

  • Atención al cliente: Consiste en el soporte especializado que provee la empresa propietaria del software a sus usuarios con actualizaciones y mantenimiento del mismo.
  • Especialización y focalización: Cuando una empresa crea y desarrolla un software concentra sus recursos en hacer que la utilidad y el valor añadido de este sea un elemento diferenciador frente a otras alternativas de software, sean de carácter privativo o de uso libre.
  • Control a favor del autor y el uso malintencionado: Esto es quizás el factor más importante del software propietario, ya que establece una autoría y por ende, un crédito a favor del autor. Por otra parte, el control de un uso fraudulento o no ético del software se asegura al cerrar el código.

Si bien el software libre se rige por el copyleft, un software puede tener características propias del privativo y del libre. Un ejemplo sería un programa que sólo permitiera el acceso a su código para su estudio y fuera además de libre distribución, pero no fuera de libre modificación.

Comentarios

Entradas populares de este blog

Blog sobre la ciencia informática y computacional