Chámase así en contrapartida á parte física da computadora, ohardware (monitor,teclado,rato,escáner...etc), que é o que fai que os programas se poidan executar e o usuario poidainteraccionar co ordenador. O software é o códigocompilado que se transforma enaplicacións utilizables, que poden serofimáticas, de deseño,multimedia etc.
O software de ordenador (ou sinxelamente, software) refírese a un ou máisprogramas de ordenador e osdatos almacenados para algún propósito concreto. O software permite o funcionamento programado previamentecodificado, 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 outrosoftware de programa.
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.
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 ouexecutable; 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 concepto de ler diferentes secuencias de instrucións (programa) desde amemoria dun dispositivo para controlar os cálculos foi introducido porCharles Babbage como parte da súamáquina diferencial.A teoría que forma a base da maior parte do software moderno foi proposta porAlan 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.
Estatua en homenaxe a Alan Turing, situada nos Xardíns de Whitworth,Manchester (Inglaterra).
A primeira teoría sobre o software foi proposta porAlan 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)[4][5] O termo "software" foi utilizado por primeira vez nun documentoimpreso en1958 porJohn Tukey nun artigo publicado na revista de matemáticasAmerican Mathematical Monthly. Coloquialmente, o termo utilízase a miúdo no sentido de software de aplicación. Eninformática e enenxeñaría de software, o software é toda ainformación procesada por unsistema informático, os programas e osdatos.[6] 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 primeiroerro de software, en 1946. Como que cada vez hai máis programas que pasan a formar parte do mundo dofirmware debido a que ohardware 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 dosenxeñeiros que crean oscircuítos impresos.
Ata este momento, o software eraempaquetado xunto co hardware polosOEM (fabricantes de equipos orixinais), comoData General,Digital Equipment ou IBM. Naquel momento, cando un cliente compraba unminiordenador, 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 unactivo (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 chamadoData General Nova, unha compañía chamada Digidyne quixo utilizar o seusistema operativo RDOS (Real-time Disk Operating System) no seu propio clon do hardware. Data General negouse alicenciar 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 chamadoDigidyne 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.[7] Pouco despois, IBM publicaba ocódigo fonte do seusistema operativo de disco de maneira gratuíta, e naceuMicrosoft. Data General acabou sendo absorbida porEMC Corporation ao ser incapaz de soportar as perdas causadas polos honorarios dosavogados. A decisión da Corte Suprema permitiu valorar o software e tamén comprarpatentes 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 eApple foron capaces de sacar proveito dos produtossoftware. 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 áspatentes trol.
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ándaresde facto, por exemploDOS para os sistemas operativos, pero tamén diferentes sistemas propietarios detratamento texto efollas de cálculo. Seguindo un patrón de similar, os métodos de desenvolvemento propietarios xeraron metodoloxías estándar de desenvolvemento de software.
Calquera ordenador moderno de uso xeral (en oposición aossistemas embebidos) ten varias "capas" de software que realizan cada unha certas tarefas determinadas. Divídense habitualmente en tres categorías principais:
Osoftware de aplicación permítelle ao usuario realizar unha ou máistarefas concretas, como as aplicacións deofimática coas que é posíbel redactar documentos (procesador de textos), realizar cálculos enfollas de cálculo, ou xogar cosvideoxogos. O software de aplicación cómprase á parte ou descárgase deInternet. Nas aplicacións é no que a maior parte da xente pensa cando se fala de software.
Software de usuario
Osoftware de usuario adecúa os sistemas ás necesidades específicas de cada usuario. Inclúe os modelos de follas de cálculo, asmacros dos procesadores de texto, as simulacións científicas, os gráficos e osguións. Mesmo osfiltros de correo son un tipo de software de usuario. É fácil pasar por alto a súa importancia real.
Para introducir ordes na computadora temos que usar unha linguaxe específica coñecida comolinguaxe máquina, que consiste en longas cadeas de númerosbinarios (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áronalinguaxe 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, é necesariocompilalos, isto é, traducilos a linguaxe máquina (un executable), que é o único que un computador entende. Isto non é así con linguaxesinterpretadas como C#, Java ou Javascript.
Cando falamos de procesos de creación ou desenvolvemento de software estámonos a referir a un conxunto ordenado de pasos para chegar a obtención dun produto de software, que resolva un problema ou satisfaga unha necesidade.
Os procesos de creación de software poden chegar a ser moi complexos, dependendo das súas características. Por exemplo, a creación dunsistema operativo é unha tarefa que require o deseño dun proxecto, unha xestión, numerosos recursos económicos e materiais, e todo un equipo de traballo moi disciplinado traballando durante varios anos. No outro extremo, desenvolver un programa sinxelo para resolver unhaecuación de segundo grao é unha tarefa que pode facer doadamente unha persoa soa, que nin sequera ten que ser unha programadora profesional, e con medios moi accesibles.
Normalmente[Cómpre referencia], os proxectos divídense en tres categorías segundo o tamaño do software (as liñas de código) ou o custo: de pequeno, medio e gran tamaño. Existen varios métodos para determinar o volume dun proxecto; unha das máis populares é o sistemaCOCOMO, ou Modelo Construtivo de Custos (MOCOCU), que realiza unha relación de horas por individuo, o custo económico e a cantidade de liñas de código necesarias, que dependen dalinguaxe de programación que se empregue.
Nos proxectos de desenvolvemento de grande tamaño cómpre realizar moitas tarefas e moi complexas, tanto técnicas como de xestión, e fan falta análises diversas e todo o apoio da enxeñaría especializada, aenxeñaría de software. Nos proxectos de tamaño mediano e pequeno, estes traballos poden realizalos equipos de menor tamaño, ás veces mesmo só compostos por unha persoa que sexa analista-programadora. Pero, en calquera caso, sexa de forma intuitiva ou planificada, hai que seguir certas etapas necesarias de construción do software. Estas etapas varían en número e orde dependendo da metodoloxía de desenvolvemento de software que se decida empregar.
Os procesos de desenvolvemento de software posúen regras preestablecidas: o non seguimento dunhametodoloxía concreta fai que aumenten as posibilidades de que o proxecto non se conclúa ou remate sen cumprir os obxectivos previstos e con variedade de erros inaceptables (fracasan, en poucas palabras).
Do total de grandes proxectos de software iniciados, un 28% fracasan, un 46% vense sometidos a modificacións moi importantes 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 os anos noventa as metodoloxías de desenvolvemento cobraron unha maior importancia nos proxectos. Normalmente, a área de especialización no estudo e desenvolvemento destas metodoloxías é a enxeñaría de software.
Entre outras, existen metodoloxías lineais, como odesenvolvemento en fervenza, enuve, ou endentes de serra, onde unha fase comeza cando remata a anterior e onde non se regresa ao principio, ou modelos iterativos como os modelosen espiral ou a maior parte dos procesosáxiles, comoscrum, aprogramación extrema, olean, o Proceso Unificado Racional (RUP), e o desenvolvemento por aspectos (FDD). É habitual 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 que ás veces se modifican para axeitarse a proxectos concretos con criterios propios.
O proceso de desenvolvemento pode involucrar distintas persoas con diferentes papeis, desde o ámbito administrativo, pasando polo técnico e a xestión ou a comercialización. Pero de forma moi xeral podemos enumerar unha serie de etapas, que se poden resumir en:
Especificación e análise de requisitos (captura e obtención de información)
Deseño
Programación
Testaxe (testaxes unitarias e de integración)
Instalación e produción
Mantemento
Estas etapas poden mudar lixeiramente de nome, ser máis globais, ou máis concretas; agrupárense ou escindírense en etapas máis específicas.
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...).
Firefox, un dos programas máis coñecidos de software libre.
O software libre (en inglésfree 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 polaFree 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 aocó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 aocódigo fonte é un requisito imprescindible.
Como que este tipo de software pode redistribuírse libremente, en xeral pódese atopar gratuitamente enInternet, ou cun custo baixo se o adquirimos por medio doutros apoios (Cd-rom ouDVD 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.
O software propietario ounon 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 seucódigo fonte non está dispoñible, ou só baixo restricións. As restricións derivadas dosdereitos 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.
Osoftware gratuíto ("freeware" en inglés) é un software que se distribúe sen ningún custo. Ás veces inclúese ocó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.
Osoftware de proba oushareware é 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.
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.
Software de navegación con GPS para móbiles co sistema operativoAndroid.
Aindustria 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 deMicrosoft, foi a persoa máis rica do mundo en 2009 en gran parte grazas ás vendas deMicrosoft Windows eMicrosoft Office, dous produtos de software. O mesmo pasa conLarry Ellison, que obtén en gran parte as súas ganancias a través do seu software de base de datos denominadoOracle 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 ossistemas operativos,software intermediario (middleware) e bases de datos, e créano empresas comoMicrosoft,IBM,Sybase,EMC,Oracle ouVMware. 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 ouInfor. O software de seguridade está feito por empresas comoSymantec,Comodo,Trend Micro ouKaspersky.
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 comoQualcomm ouCybervision fan software para empresas detelecomunicació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 aFree Software Foundation,GNU (GNU/Linux) ou aFundación Mozilla (creadora do navegadorFirefox entre outros populares produtos). Xunto a estas hai outras organizacións dedicadas á estandarización do software como aW3C ou aIETF 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 exemploXML,HTML,HTTP ouFTP.
↑IEEE Std, IEEE Software Engineering Standard: Glossary of Software Engineering Terminology. IEEE Computer Society Press, 1993
↑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.
↑Turing, A.M. (1936).On Computable Numbers, with an Application to the Entscheidungsproblem.Proceedings of the London Mathematical Society. 242. pp. 230–65.doi:10.1112/plms/s2-42.1.230. (eTuring, A.M. (1938).On Computable Numbers, with an Application to the Entscheidungsproblem: A correction.Proceedings of the London Mathematical Society. 243. pp. 544–6.doi:10.1112/plms/s2-43.6.544.)
Campbell-Kelly, Martin; Garcia-Swartz, Daniel D. (2015).From Mainframes to Smartphones: A History of the International Computer Industry(eninglés). Harvard University Press.ISBN978-0-674-28655-9.
Dooley, John F. (2017).Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring(eninglés). Apress.ISBN978-1-4842-3153-1.
O'Regan, Gerard (2022).Concise Guide to Software Engineering: From Fundamentals to Application Methods(eninglés). Springer Nature.ISBN978-3-031-07816-3.
Osterweil, Leon J. (2013). "What Is Software? The Role of Empirical Methods in Answering the Question".Perspectives on the Future of Software Engineering: Essays in Honor of Dieter Rombach(eninglés). Springer. pp. 237–254.ISBN978-3-642-37395-4.
Rahman, Hanif Ur; da Silva, Alberto Rodrigues; Alzayed, Asaad; Raza, Mushtaq (2024). "A Systematic Literature Review on Software Maintenance Offshoring Decisions".Information and Software Technology172: 107475.doi:10.1016/j.infsof.2024.107475.
Rosati, Pierangelo; Lynn, Theo (2020). "Measuring the Business Value of Infrastructure Migration to the Cloud".Measuring the Business Value of Cloud Computing(eninglés). Springer International Publishing. pp. 19–37.ISBN978-3-030-43198-3.
Sebesta, Robert W. (2012).Concepts of Programming Languages(eninglés) (10 ed.). Addison-Wesley.ISBN978-0-13-139531-2.
Stull, Edward (2018).UX Fundamentals for Non-UX Professionals: User Experience Principles for Managers, Writers, Designers, and Developers(eninglés). Apress.ISBN978-1-4842-3811-0.
Tracy, Kim W. (2021).Software: A Technical History(eninglés). Morgan & Claypool Publishers.ISBN978-1-4503-8724-8.
Tripathy, Priyadarshi; Naik, Kshirasagar (2014).Software Evolution and Maintenance: A Practitioner's Approach(eninglés). John Wiley & Sons.ISBN978-0-470-60341-3.
Tucker, Allen; Morelli, Ralph; de Silva, Chamindra (2011).Software Development: An Open Source Approach(eninglés). CRC Press.ISBN978-1-4398-8460-7.
Ulziit, Bayarbuyan; Warraich, Zeeshan Akhtar; Gencel, Cigdem; Petersen, Kai (2015). "A conceptual framework of challenges and solutions for managing global software maintenance".Journal of Software: Evolution and Process27 (10): 763–792.doi:10.1002/smr.1720.
Watt, Andy (2023).Building Modern SaaS Applications with C# And . NET: Build, Deploy, and Maintain Professional SaaS Applications(eninglés). Packt.ISBN978-1-80461-087-9.
Varga, Ervin (2018).Unraveling Software Maintenance and Evolution: Thinking Outside the Box(eninglés). Springer.ISBN978-3-319-71303-8.