Software

Na Galipedia, a Wikipedia en galego.
Este é un dos 1000 artigos que toda Wikipedia debería ter.
Diagrama que amosa como o usuario interactúa coas aplicacións informáticas nun ordenador persoal típico. A capa da aplicación informática relaciónase co sistema operativo, que á súa vez comunícase co hardware. As frechas indican o fluxo de información.

En informática, a palabra inglesa software utilízase para describir a parte non física ("lóxica") do ordenador, tamén chamada programa ou aplicación informática.

Chámase así en contrapartida á parte física da computadora, o hardware (monitor, teclado, rato, escáner...etc), que é o que fai que os programas se poidan executar e o usuario poida interaccionar co ordenador. O software é o código compilado que se transforma en aplicacións utilizables, que poden ser ofimáticas, de deseño, multimedia etc.

O software de ordenador (ou sinxelamente, software) refírese a un ou máis programas de ordenador e os datos almacenados para algún propósito concreto. O software permite o funcionamento programado previamente codificado, xa sexa dando instrucións de xeito directo, a través de instrucións ao hardware (a parte física), ou servindo como entrada a outro programa. O software de tratamento de datos existe só para o seu uso eventual por outro software de programa.

O termo software foi usado por primeira vez neste senso por John W. Tukey en 1957; de xeito coloquial, o termo utilízase frecuentemente para designar aplicacións, utilidades, o sistema operativo etc.. En informática e enxeñaría de software, software é toda a información procesada polo sistema informático, programas e datos.

Definición de software[editar | editar a fonte]

Existen varias definicións similares aceptadas para software, pero probablemente a máis formal sexa a seguinte:

É o conxunto dos programas de cómputo, procedementos, regras, documentación e datos asociados, que forman parte das operacións dun sistema de computación.
Extraído do estándar 729 do IEEE[1]

Considerando esta definición, o concepto de software vai máis aló dos programas de computación nos seus distintos estados: código fonte, binario ou executable; tamén a súa documentación, os datos a procesar e mesmo a información de usuario forman parte do software: é dicir, abarca todo o intanxible, todo o «non físico» relacionado.

O termo «software» foi usado por primeira vez neste sentido por John W. Tukey en 1957. Na enxeñaría de software e as ciencias da computación, o software é toda a información procesada polos sistemas informáticos: programas e datos.

O concepto de ler diferentes secuencias de instrucións (programa) desde a memoria dun dispositivo para controlar os cálculos foi introducido por Charles Babbage como parte da súa máquina diferencial. A teoría que forma a base da maior parte do software moderno foi proposta por Alan Turing no seu ensaio de 1936, «On Computable Numbers, with an Application to the Entscheidungsproblem» (en galego, "Os números computables, cunha Aplicación ó Entscheidungsproblem"), cunha aplicación ao problema de decisión.

Historia[editar | editar a fonte]

Estatua en homenaxe a Alan Turing, situada nos Xardíns de Whitworth, Manchester (Inglaterra).

A primeira teoría sobre o software foi proposta por Alan Turing no seu ensaio do 1935 denominado "On Computable Numbers, with an application to the Entscheidungsproblem" (Sobre os números calculables, cunha aplicación ó Entscheidungsproblem)[2][3] O termo "software" foi utilizado por primeira vez nun documento impreso en 1958 por John Tukey nun artigo publicado na revista de matemáticas American Mathematical Monthly. Coloquialmente, o termo utilízase a miúdo no sentido de software de aplicación. En informática e en enxeñaría de software, o software é toda a información procesada por un sistema informático, os programas e os datos.[4] No ámbito académico o estudo do software inclúese dentro dos campos da informática e a enxeñaría de software actual.

A miúdo considérase que a historia dos programas informáticos remóntase ata o primeiro erro de software, en 1946. Como que cada vez hai máis programas que pasan a formar parte do mundo do firmware debido a que o hardware faise cada vez máis pequeno, máis barato e máis rápido debido á lei de Moore, hai elementos que antes eran considerados como software que hoxe en día pasaron ao dominio do hardware. A maioría das compañías de hardware actuais teñen máis programadores de software en nómina que deseñadores de hardware, posto que as ferramentas de software automatizaron moitas das tarefas dos enxeñeiros que crean os circuítos impresos.

Do mesmo xeito que o fixo a industria automotriz, a industria do software evolucionou a partir duns poucos visionarios que traballaban con prototipos no seu garaxe. Steve Jobs e Bill Gates foron o Henry Ford e o Louis Chevrolet da súa época, que aproveitaron e capitalizar as ideas xa coñecidas antes de que iniciasen o seu negocio. No caso do desenvolvemento de software, acéptase de maneira xeneralizada que o momento inicial foi a publicación na década de 1980 das especificacións do IBM Personal Computer por parte do empregado de IBM Don Estridge. Hoxe este movemento podería verse como un tipo de crowdsourcing (subcontratación aberta).

Ata este momento, o software era empaquetado xunto co hardware polos OEMs (fabricantes de equipos orixinais), como Data General, Digital Equipment ou IBM. Naquel momento, cando un cliente compraba un miniordenador, o ordenador máis pequeno da época, o equipo non viña con ningún software preinstalado, senón que tiña que ser instalado por enxeñeiros empregados polo OEM. A maioría das empresas tiñan o seu software nos catálogos sen prezo, de forma que non se podía considerar como un activo (de maneira similar a algúns casos de música popular de hoxe en día). Cando Data General presentou o seu miniordenador de 16 bits chamado Data General Nova, unha compañía chamada Digidyne quixo utilizar o seu sistema operativo RDOS (Real-time Disk Operating System) no seu propio clon do hardware. Data General negouse a licenciar o seu software (cousa que era difícil, posto que era publicado como un ben libre), e reclamou os seus dereitos. A Corte Suprema creou un precedente chamado Digidyne v. Data General in 1985 e finalmente Data General viuse obrigada á concesión de licenzas de software do sistema operativo, posto que se fallou que a restrición da licenza ao hardware de Data General era ilegal.[5] Pouco despois, IBM publicaba o código fonte do seu sistema operativo de disco de maneira gratuíta, e naceu Microsoft. Data General acabou sendo absorbida por EMC Corporation ao ser incapaz de soportar as perdas causadas polos honorarios dos avogados. A decisión da Corte Suprema permitiu valorar o software e tamén comprar patentes de software. Naquel momento a decisión de IBM de publicar o código era case como unha protesta. Poucos dentro da industria crían que alguén fóra da mesma IBM (grazas á publicidade gratuíta da súa decisión) podería chegar a sacar algún beneficio. Microsoft e Apple foron capaces de sacar proveito dos produtos software. Hoxe en día faise difícil de imaxinar que houbo unha vez que a xente pensaba que o software non valía nada sen unha máquina. Hoxe en día hai moitas empresas de éxito que venden só produtos de software, a pesar de que habitualmente aínda hai moitos problemas relacionados coa concesión de licenzas debido á complexidade dos deseños e á pouca documentación, o que leva ás patentes troll.

Coas especificacións de software de código aberto e a posibilidade de concesión de licenzas de software, apareceron novas oportunidades para ferramentas de software que despois se converteron en estándares de facto, por exemplo DOS para os sistemas operativos, pero tamén diferentes sistemas propietarios de tratamento texto e follas de cálculo. Seguindo un patrón de similar, os métodos de desenvolvemento propietarios xeraron metodoloxías estándar de desenvolvemento de software.

Clases de software[editar | editar a fonte]

Calquera ordenador moderno de uso xeral (en oposición aos sistemas embebidos) conta con varias "capas" de software que realizan cada unha certas tarefas determinadas. Divídense habitualmente en tres categorías principais:

Software de sistema
O software de sistema inclúe o sistema básico de entrada e saída ("BIOS", chamado tamén firmware en vez de software), os controladores dos dispositivos, un sistema operativo e, normalmente, unha interface gráfica de usuario ("GUI") que, en conxunto, lle permiten ao usuario poder interaccionar co ordenador e os seus periféricos. O software de sistema ven normalmente co ordenador e quen ten coñecementos de informática só "a nivel de usuario" non é consciente sequera de que existe.
Software de aplicación
O software de aplicación permítelle ao usuario realizar unha ou máis tarefas concretas, como as aplicacións de ofimática coas que é posíbel redactar documentos (procesador de textos), realizar cálculos en follas de cálculo, ou xogar cos videoxogos. O software de aplicación cómprase á parte ou descárgase de internet. Nas aplicacións é no que a maior parte da xente pensa cando se fala de software.
Software de usuario
O software de usuario adecúa os sistemas ás necesidades específicas de cada usuario. Inclúe os modelos de follas de cálculo, as macros dos procesadores de texto, as simulacións científicas, os gráficos e os guións. Mesmo os filtros de correo son un tipo de software de usuario. É fácil pasar por alto a súa importancia real.

Linguaxes de programación[editar | editar a fonte]

Artigo principal: Linguaxe de programación.
Código fonte dun programa escrito na linguaxe de programación java.

Para introducir ordes na computadora temos que usar unha linguaxe específica coñecida como linguaxe máquina, que consiste en longas cadeas de números binarios (1s e 0s). Esta linguaxe, que a computadora entende directamente, é excesivamente complicada para unha persoa. Para facer o traballo máis fácil os primeiros operadores de computadoras decidiron pór nomes mnemónicos ás instrucións que antes só se especificaban con códigos binarios. Esta nova linguaxe denominárona linguaxe ensambladora. Así por exemplo, para sumar úsase a instrución "add". Escribir en linguaxe ensamblador é equivalente a facelo en linguaxe máquina, pero as instrucións son máis fáciles de lembrar xa que non se se escriben como unha serie de números.

A medida que foi aumentado a complexidade dos programas escritos en ensamblador fíxose necesario dispor dunha linguaxe máis potente e sinxela. Entón, creáronse as linguaxes de alto nivel. Unha tarefa tan sinxela como sumar dous números pode necesitar varias instrucións nunha linguaxe de baixo nivel como o ensamblador, pola contra nunha linguaxe de alto nivel só é necesaria unha.

Unha vez escrito un programa, tanto en linguaxes de baixo como de alto nivel, é necesario compilalos, isto é, traducilos a linguaxe máquina (un executable), que é o único que un computador entende. Isto non é así con linguaxes interpretadas como C#, Java ou Javascript.

Proceso de creación de software[editar | editar a fonte]

Defínese un proceso ao conxunto ordenado de pasos a seguir para chegar á solución dun problema ou obtención dun produto, neste caso particular, para conseguir a obtención do software que resolva un problema ou satisfaga unha necesidade.

Este proceso de creación de software pode chegar a ser moi complexo, dependendo das súas características. Por exemplo, a creación dun sistema operativo é unha tarefa que require un proxecto, xestión, numerosos recursos e todo un equipo de traballo moi disciplinado traballando durante varios anos. No outro extremo, se se trata dun programa sinxelo, por exemplo un para a resolución dunha ecuación de segunda orde, este pode ser realizado facilmente por un só programador, mesmo por un programador afeccionado. Normalmente, os proxectos divídense en tres categorías segundo a medida do software (as liñas de código) e/ou o custo: de pequeno, medio e gran tamaño. Hai varias metodoloxías para facer as estimacións pertinentes; unha das máis populares é o sistema COCOMO que prové métodos e un programa que calcula e proporciona unha estimación de todos os custos de produción nun "proxecto software" onde hai, entre outras cousas, unha relación de horas por individuo, o custo económico e a cantidade de liñas fonte de acordo coa linguaxe de programación utilizada.

Considerando os de tamaño grande, é necesario realizar moitas tarefas e moi complexas, técnicas, de xerencia, cunha intensa xestión, e fan falta análises diversas para o seu estudo e realización e todo o apoio da enxeñaría: a enxeñaría de software.

Nos proxectos de tamaño mediano, pequenos equipos de traballo, que mesmo poden consistir nun avezado e solitario analista-programador, poden realizar a tarefa. Pero, sempre en casos de proxectos de medio e gran tamaño -e ás veces, dependendo da súa complexidade, tamén nalgún de pequeno tamaño-, téñense que seguir certas etapas que son necesarias para a construción do software. Estas etapas, aínda que teñen que existir, son flexibles na súa forma de aplicación, segundo a metodoloxía ou Proceso de Desenvolvemento escollido e utilizado polo equipo de desenvolvemento ou analista-programador solitario (se é o caso).

Os "procesos de desenvolvemento de software" posúen regras preestablecidas, e teñen que ser aplicados na creación do programa de medio e gran tamaño, posto que en caso contrario o máis seguro é que o proxecto ou non consiga concluír ou acabe sen cumprir os obxectivos previstos e con variedade de erros inaceptables (fracasan, en poucas palabras). Entre estes "procesos" hai aproximacións áxiles ou lixeiras, por exemplo a programación extrema (XP), pesadas e lentas como o RUP, e variantes intermedias; e normalmente aplícanse segundo o tipo, tamaño e tipoloxía do software a desenvolver, a criterio do líder (se hai) do equipo de desenvolvemento. Algúns destes procesos son a Extreme Programmin (XP) (Programación Extrema), o Rational Unified Process (RUP), e o Feature Driven Development (FDD).

Calquera que sexa o "proceso" utilizado e aplicado nun desenvolvemento de software (RUP, FDD, etc.), e case independentemente del, sempre se ten que aplicar un "modelo de ciclo de vida".

Estímase que, do total de grandes proxectos de software iniciados, un 28% fracasan, un 46% caen en severas modificacións que atrasan o remate do proxecto, e un 26% desenvólvense de maneira adecuada. Cando un proxecto fracasa, poucas veces é debido a erros técnicos; a principal causa de erros e fracasos é a carencia dunha boa metodoloxía ou dun desenvolvemento axeitado. Desde hai algunhas décadas, hai unha clara tendencia a mellorar as metodoloxías ou procesos de desenvolvemento, ou a crear novas metodoloxías e a concienciar aos profesionais para que a súa utilización sexa a axeitada. Normalmente, os especialistas no estudo e desenvolvemento destas metodoloxías e áreas afíns (por exemplo modelos e ata a xestión mesma dos proxectos) son os enxeñeiros de software.

É normal que para o desenvolvemento de software de tamaño medio os equipos humanos que participan apliquen as súas propias metodoloxías, que normalmente son un híbrido dos procesos anteriores e ás veces úsanse con criterios propios.

Posible modelo a seguir na creación dun software.

O proceso de desenvolvemento pode involucrar numerosas e variadas tarefas, desde o ámbito administrativo, pasando polo técnico e a xestión e a xerencia. Pero case, de maneira rigorosa, sempre se cumpren unhas determinadas etapas, que se poden resumir en:

  • Captura e obtención de información. Especificación e Análise de requisitos
  • Deseño
  • Codificación
  • Probas (unitarias e de integración)
  • Instalación e Produción
  • Mantemento

Nas anteriores etapas poden variar lixeiramente os seus nomes, ou ser máis globais, ou contrariamente máis refinadas; por exemplo indicar como unha única fase de "Análises e Deseño", ou indicar como "Desenvolvemento" o que está indicado como "Codificación"; pero en rigor, todas existen e inclúen, basicamente, as mesmas tarefas específicas.

Hai moitas linguaxes de programación, como son o C, PHP, Perl, Python, Java, BASIC, etc. que se poden utilizar para escribir programas. As ferramentas mínimas que se necesitan son un editor de texto e un compilador ou intérprete da linguaxe que se utilice.

Pódese crear software seguindo diferentes paradigmas, por exemplo a programación estruturada ou a programación orientada a obxectos

Dereitos de autor[editar | editar a fonte]

Frecuentemente clasifícase o software segundo as liberdades que ofrece (libre ou propietario) ou se é de pago ou non (software de proba (shareware), abandonware, freeware...).

Software libre[editar | editar a fonte]

Artigo principal: Software libre.
Firefox, un dos programas máis coñecidos de software libre.

O software libre (en inglés free software) é o software que pode ser utilizado, estudado e modificado sen restricións, e que pode ser copiado e redistribuído ben nunha versión modificada ou sen modificar sen ningunha restrición, ou ben cunhas restricións mínimas para garantir que os futuros destinatarios tamén terán estes dereitos.

En xeral, pódese dicir que un programa é libre se permite catro liberdades definidas pola Free Software Foundation:

  • A liberdade de executar o software para calquera propósito (liberdade 0).
  • A liberdade de ver como funciona o programa e adaptalo ás propias necesidades (liberdade 1). Isto implica o acceso ao código fonte como requisito.
  • A liberdade de redistribuír copias (liberdade 2)
  • A liberdade de mellorar o programa e de distribuílo de novo coas melloras realizadas, para que toda a comunidade se poida beneficiar (liberdade 3). Igual que no caso da liberdade 1, o acceso ao código fonte é un requisito imprescindible.

Como que este tipo de software pode redistribuirse libremente, en xeral pódese atopar gratuitamente en Internet, ou cun custo baixo se o adquirimos por medio doutros apoios (Cd-rom ou DVD por exemplo). Debido a iso, os modelos de negocio baseados en software libre normalmente baséanse a proporcionar servizos de valor engadido por exemplo apoio técnico, cursos de formación, personalización, integración, ou certificación.

Software propietario[editar | editar a fonte]

Artigo principal: Software propietario.

O software propietario ou non libre é calquera software sometido a restricións na súa utilización, modificación privada, ou con restricións na copia e publicación de versións modificadas ou non modificadas. Normalmente o seu código fonte non está dispoñible, ou só baixo restricións. As restricións derivadas dos dereitos de autor, patentes, propiedade intelectual, etc., do propietario aplícanse por medios legais pero ás veces tamén técnicos. Aínda que o código fonte poida facerse público, o software pode continuar sendo de propiedade se se manteñen as restricións antes mencionadas.

Software gratuíto[editar | editar a fonte]

O software gratuíto ("freeware" en inglés) é un software que se distribúe sen ningún custo. Ás veces inclúese o código fonte, pero non é un requisito necesario. O software gratuíto adoita incluír unha licenza de uso, que permite que se redistribúa, pero con algunhas restricións como a prohibición de modificar a aplicación ou vendela, ou que só pode usarse para uso persoal, non comercial, académico, etc. É habitual a utilización deste tipo de software para dar a coñecer un produto e poder conseguir usuarios dispostos a pagar por unha versión máis completa ou avanzada.

Software de proba[editar | editar a fonte]

O software de proba ou shareware é un tipo de software que ten permiso de redistribución, pero que advirte a todo o mundo que o uso continuado da copia recibida implica o pago dunha licenza de uso.

Software descatalogado[editar | editar a fonte]

Modelo:APAbandonware O software descatalogado (abandonware) é un software que xa non se desenvolve nin se mantén polo titular dos seus dereitos (copyright). Habitualmente trátase de xogos ou programas sen funcións avanzadas que teñen máis de 5 anos de antigüidade e que poden ser descargados e utilizados.

Industria do software[editar | editar a fonte]

Software de navegación con GPS para móbiles co sistema operativo Android.

A industria do software está constituída por unha gran variedade de empresas de software e programadores. O software pode ser unha industria moi rendible, Bill Gates, o fundador de Microsoft, foi a persoa máis rica do mundo en 2009 en grande parte grazas ás vendas de Microsoft Windows e Microsoft Office, dous produtos de software. O mesmo pasa con Larry Ellison, que obtén en gran parte as súas ganancias a través do seu software de base de datos denominado Oracle Database.

Ao longo do tempo a industria do software foise especializando cada vez máis e hai varios tipos de negocios. Atopamos campos como o do software de sistemas e infraestrutura, que inclúe os sistemas operativos, software intermediario (middleware) e bases de datos, e créano empresas como Microsoft, IBM, Sybase, EMC, Oracle ou VMware. O software empresarial que automatiza os procesos empresariais nas finanzas, a produción, a loxística, as vendas e a mercadotecnia fano empresas como Oracle Corporation, SAP AG, Sage ou Infor. O software de seguridade está feito por empresas como Symantec, Comodo, Trend Micro ou Kaspersky.

Varios fabricantes de software específico para a industria tamén se atopan entre as maiores compañías de software do mundo: SunGard fai software para bancos, BlackBoar fai software para as escolas, e empresas como Qualcomm ou Cybervision fan software para empresas de telecomunicacións. Outras empresas realizan contratos de programación para desenvolver un software único e a medida para unha empresa en particular, ou céntranse na configuración e personalización dos paquetes de grandes fabricantes como SAP ou Oracle.

Tamén hai organizacións sen ánimo de lucro que se dedican á creación de software, neste grupo inclúense a Free Software Foundation, GNU (GNU/Linux) ou a Fundación Mozilla (creadora do navegador Firefox entre outros populares produtos). Xunto a estas hai outras organizacións dedicadas á estandarización do software como a W3C ou a IETF que desenvolven e promoven estándares de software de forma que a maior parte do software poida interaccionar a través de estándares por exemplo XML, HTML, HTTP ou FTP.

Notas[editar | editar a fonte]

  1. IEEE Std, IEEE Software Engineering Standard: Glossary of Software Engineering Terminology. IEEE Computer Society Press, 1993
  2. Hally, Mike (2005:79). Electronic brains/Stories from the dawn of the computer age. British Broadcasting Corporation and Granta Books, Londres. ISBN 1-86207-663-4.
  3. Turing, A.M. (1936). On Computable Numbers, with an Application to the Entscheidungsproblem. Proceedings of the London Mathematical Society. 2 42. pp. 230–65. doi:10.1112/plms/s2-42.1.230.  (e Turing, A.M. (1938). On Computable Numbers, with an Application to the Entscheidungsproblem: A correction. Proceedings of the London Mathematical Society. 2 43. pp. 544–6. doi:10.1112/plms/s2-43.6.544. )
  4. Leonhardt, David (28 xullo de 2000). "John Tukey, 85, Statistician; Coined the Word 'Software'". New York Estafes. 
  5. Tying Arrangements and the Computer Industry: Digidyne Corp. vs. Data General

Véxase tamén[editar | editar a fonte]

Outros artigos[editar | editar a fonte]