Programaro (aŭ softvaro) estas aro de iloj logikaj (ne fizikaj) de komputilaj sistemoj, kiuj regas kaj lasas regi ĝin por realigado de konkreta laboro. Programaro povas esti, ekzemple, programoj por skribi dosierojn, registri aŭ aŭskulti sondosierojn, esplori interreton, la operaciumon (Linukso, Vindozo) ktp...
Eble la difino plej ĝusta de programaro estas de Instituto de inĝenieroj elektronikaj kaj elektroteknikaj en sia normo 729: "La sumo de la programoj de komputado, procedoj, reguloj, dokumentoj kaj asociataj datumoj, kiuj estas parto de komputada sistemo". Laŭ ĉi tiu difino, la programaro konsistas ne nur el programoj sed ankaŭ el ĉiuj datumoj konserveblaj per komputika memoro aŭ datumportilo.
Pli detalaj informoj troveblas en artikolo Programisto.
Programisto, disvolvigisto aŭ komputilprogramisto, aŭ ankaŭ softvara inĝeniero estas persono kiu kreas komputilan programaron. La termino komputilprogramisto povas referenci al specialisto en unu areo de komputiloj aŭ ĝeneralisto kiu verkas kodojn por multaj tipoj de programaro. La fakulo kiu praktikas aŭ profesias formalan alproksimigon al programado povas esti konata ankaŭ kiel program-analizisto.
Specoj de programaro
Estas malfacile klasigi la diversajn specojn de programaro, sed eblas fari tion jene:
Uzanto-laborprogramoj ebligas al uzantoj fari unu aŭ plurajn konkretajn laborojn, en ia ajn kampo de aktiveco kiun eblas aŭtomatigi aŭ apogi per komputiko.
La libereco por uzi la programon, por iu ajn celo (libereco 0).
La libereco por studi kiel la programo funkcias, kaj ŝanĝi ĝin por viaj bezonoj (libereco 1). Dispono pri la fontkodo de la programo estas antaŭkondiĉo por tio ĉi.
La libereco por disdoni kopiojn, do vi povas helpi vian najbaron (libereco 2).
La libereco por plibonigi la programon, kaj disdoni viajn plibonigojn al la publiko, por helpi ĉiujn (libereco 3). Atingo al la fontkodo estas antaŭkondiĉo por tio ĉi.
Liberan programaron subtenas kaj stimulas la libera programaro-movado. La iniciatinto de tiu movado estas Richard Stallman, kiu fondis organizon Fondaĵo por Libera Programaro (Free Software Foundation) por antaŭenigi ĝin. Ili promesas al ni ke Libera Programaro konservas la kvar suprajn specojn de libereco, por la uzantoj de la programaro.
Mallibera programaro
Mallibera programaro, ankaŭ nomata "ne-libera", "proprieta" aŭ "fermit-fonta" estas programaro kiu ne estas sub la kriterioj por libera programaro. Senpaga programaro (angle freeware) estas speco de mallibera programaro, kiu disponeblas por uzado senpage. Malgraŭ tio, oni ne rajtas modifi, redistribui aŭ studi (inversa inĝenierarto) ĝin sen la permeso de la kreinto.
Mikroprogramaro (ankaŭ nomata integrita programaro aŭ firmprogramo aŭ firmvaro, el la angla firmware) estas speco de programaro kiu ebligas kontrolon, monitoradon kaj datummanipuladon de eletronikaj produktoj kaj sistemoj.
Viruso estas programaro, kies celo estas mem-kopiiĝi en aliajn programojn aŭ al aliajn komputilojn, ofte ne informante la uzanton kiu ĝin lanĉas, kaj fojfoje difektante aŭ kopiante dosierojn.
Neologismo "softvaro"
Kelkaj esperantistoj uzas la vorton softvaro en Esperanto ĉar la angla vorto software estas uzata kiel neologismo en multaj lingvoj tutmonde.
Laŭ ili tiu vorto estas unuradika (softvar + o ), do ili opinias ke nova radiko aldoniĝis al Esperanto laŭ la 15-a regulo de la Fundamento. Aliaj interpretas ĝin kiel kunmetaĵon de la radikoj soft kaj var, sed tio ne estas tre logika, ĉar en Esperanto softa signifas milde mallaŭta, do neniel rilatas al komputikaĵo.
La malvorto de softvaro estas la neologismo hardvaro, nome aparataro. Kiel malvorto de hardvaro, softvaro estas uzata por pli vasta signifo: ekz. datumoj ludataj per aparataro kiel datumoj en registradaj medioj aŭ elektra signo.
La plej ofta esprimo en Esperanto por tiu koncepto estas la kunmetaĵo programaro, kiu bone kaptas la intencitan signifon sen neceso de nova radiko.
Evolua karaktero de la programaro
La programaro estas la produkto generita de la procezo de disvolvigo, laŭ la inĝenierado de programaro. Tiu produkto estas esence alte evolua kaj evoluema dum sia vivociklo: ĝenerale, ĝi evoluas generante versiojn pli kaj pli kompletajn, kompleksajn, plibonigitajn laŭ iu konsidero, plo taŭgajn al novaj platformoj (ĉu de aparataro ĉu de operaciaj sistemoj), ktp.[5]
Cuando un sistema deja de evolucionar, eventualmente cumplirá con su ciclo de vida, entrará en obsolescencia e inevitablemente, tarde o temprano, será reemplazado por un producto nuevo.
El software evoluciona sencillamente porque se debe adaptar a los cambios del entorno, sean funcionales (exigencias de usuarios), operativos, de plataforma o arquitectura hardware.
La dinámica de evolución del software es el estudio de los cambios del sistema. La mayor contribución en esta área fue realizada por Meir M. Lehman y Belady, comenzando en los años 70 y 80. Su trabajo continuó en la década de 1990, con Lehman y otros investigadores[6] de relevancia en la realimentación en los procesos de evolución (Lehman, 1996; Lehman et al., 1998; lehman et al., 2001). A partir de esos estudios propusieron un conjunto de leyes (conocidas como leyes de Lehman)[7] respecto de los cambios producidos en los sistemas. Estas leyes (en realidad son hipótesis) son invariantes y ampliamente aplicables.
Lehman y Belady analizaron el crecimiento y la evolución de varios sistemas software de gran porte; derivando finalmente, según sus medidas, las siguientes ocho leyes:
Cambio continuo: Un programa que se usa en un entorno real necesariamente debe cambiar o se volverá progresivamente menos útil en ese entorno.
Complejidad creciente: A medida que un programa en evolución cambia, su estructura tiende a ser cada vez más compleja. Se deben dedicar recursos extras para preservar y simplificar la estructura.
Evolución prolongada del programa: La evolución de los programas es un proceso autorregulativo. Los atributos de los sistemas, tales como tamaño, tiempo entre entregas y la cantidad de errores documentados son aproximadamente invariantes para cada entrega del sistema.
Estabilidad organizacional: Durante el tiempo de vida de un programa, su velocidad de desarrollo es aproximadamente constante e independiente de los recursos dedicados al desarrollo del sistema.
Conservación de la familiaridad: Durante el tiempo de vida de un sistema, el cambio incremental en cada entrega es aproximadamente constante.
Crecimiento continuado: La funcionalidad ofrecida por los sistemas tiene que crecer continuamente para mantener la satisfacción de los usuarios.
Decremento de la calidad: La calidad de los sistemas software comenzará a disminuir a menos que dichos sistemas se adapten a los cambios de su entorno de funcionamiento.
Realimentación del sistema: Los procesos de evolución incorporan sistemas de realimentación multiagente y multibucle y estos deben ser tratados como sistemas de realimentación para lograr una mejora significativa del producto.