Diferencia entre revisiones de «Desarrollo de software»

(Página creada con '{{Software|nombre=Desarrollo de Software|logo=desarrollo_software.jpg|fecha de creación=|versiones=|sitio web=}}<br> Desarrollar un software significa construirl...')
(Etiqueta: nuestro-nuestra)
 
(Etiqueta: nuestro-nuestra)
Línea 1: Línea 1:
 
{{Software|nombre=Desarrollo de Software|logo=desarrollo_software.jpg|fecha de creación=|versiones=|sitio web=}}<br>  
 
{{Software|nombre=Desarrollo de Software|logo=desarrollo_software.jpg|fecha de creación=|versiones=|sitio web=}}<br>  
  
Desarrollar un [[software|software]] significa construirlo simplemente mediante su descripción. Está es una muy buena razón para considerar la actividad de desarrollo de software como una [[Ingeniería_de_Software|ingeniería]]. En un nivel más general, la relación existente entre un software y su entorno es clara ya que el software es introducido en el mundo de modo de provocar ciertos efectos en el mismo.<br>Aquellas partes del mundo que afectarán al software y que serán afectadas por él será el [[Dominio de Aplicación|Dominio de Aplicación]]. Es allí donde los [[usuarios|usuarios]] o [[clientes|clientes]] observarán si el desarrollo del software ha cumplido su propósito.<br>Una de las mayores deficiencias en la práctica de construcción de software es la poca atención que se presta a la discusión del problema. En general los desarrolladores se centran en la solución dejando el problema inexplorado. El problema a resolver debe ser deducido a partir de su solución.<br>Esta aproximación orientada a la solución puede funcionar en campos donde todos los problemas son bien conocidos, clasificados e investigados, donde la innovación se ve en la detección de nuevas soluciones a viejos problemas.<br>Pero el desarrollo de software no es un campo con tales características. La versatilidad de las [[Computadoras|computadoras]] y su rápida evolución hace que exista un repertorio de problemas en constante cambio y cuya solución software sea de enorme importancia.<br>
+
Desarrollar un [[Software|software]] significa construirlo simplemente mediante su descripción. Esta es una muy buena razón para considerar la actividad de desarrollo de software como una [[Ingeniería de Software|ingeniería]]. En un nivel más general, la relación existente entre un software y su entorno es clara ya que el software es introducido en el mundo de modo de provocar ciertos efectos en el mismo.<br>Aquellas partes del mundo que afectarán al software y que serán afectadas por él será el [[Dominio de Aplicación|Dominio de Aplicación]]. Es allí donde los [[Usuarios|usuarios]] o [[Clientes|clientes]] observarán si el desarrollo del software ha cumplido su propósito.<br>Una de las mayores deficiencias en la práctica de construcción de software es la poca atención que se presta a la discusión del [[Problema|problema]]. En general los desarrolladores se centran en la solución dejando el problema inexplorado. El problema a resolver debe ser deducido a partir de su solución.<br>Esta aproximación orientada a la solución puede funcionar en campos donde todos los problemas son bien conocidos, clasificados e investigados, donde la innovación se ve en la detección de nuevas soluciones a viejos problemas.<br>Pero el desarrollo de software no es un campo con tales características. La versatilidad de las [[Computadoras|computadoras]] y su rápida evolución hace que exista un repertorio de problemas en constante cambio y cuya solución software sea de enorme importancia.<br>  
  
== Desarrollo del Software<br> ==
+
== Desarrollo del Software<br> ==
  
Cuando se va desarrollar un software intervienen muchas personas como lo es el cliente quien es el que tiene el problema en su [[empresa|empresa]] y desea que sea solucionado, para esto existe el analista de sistema quien es el encargado de hacerle llegar todos los requerimientos y necesidades que tiene el cliente a los programadores quienes son las personas encargadas de realizar lo que es la codificación y diseño del sistema para después probarlo y lo instalan al cliente. Es así como intervienen varias personas ya que una sola persona no podría determinar todo lo necesario lo mas seguro que le haga falta algún requerimiento o alguna parte del nuevo sistema y entre mas estén involucradas mejor para cubrir con todos los requerimientos del sistema.<br>
+
Cuando se va desarrollar un software intervienen muchas personas como lo es el cliente quien es el que tiene el problema en su [[Empresa|empresa]] y desea que sea solucionado, para esto existe el [[Analista|analista]] de [[Sistema|sistema]] quien es el encargado de hacerle llegar todos los [[Requerimientos|requerimientos]] y necesidades que tiene el cliente a los programadores quienes son las personas encargadas de realizar lo que es la [[Codificación|codificación]] y [[Diseño|diseño]] del sistema para después probarlo y lo instalan al cliente. Es así como intervienen varias personas ya que una sola persona no podría determinar todo lo necesario lo mas seguro que le haga falta algún requerimiento o alguna parte del nuevo sistema y entre mas estén involucradas mejor para cubrir con todos los requerimientos del sistema.<br>  
  
== Fases del proceso de desarrollo de software<br> ==
+
== Fases del proceso de desarrollo de software<br> ==
  
=== Análisis de requisitos[[Image:Esquema_desarrollo_software.jpg|thumb|left|200x151px|Fases del proceso de desarrollo de software ]]<br> ===
+
=== Análisis de requisitos[[Image:Esquema desarrollo software.jpg|thumb|left|200x151px]]<br> ===
  
Extraer los requisitos de un producto de software es la primera etapa para crearlo. Mientras que los clientes piensan que ellos saben lo que el software tiene que hacer, se requiere de habilidad y experiencia en la ingeniería de software para reconocer requisitos incompletos, ambiguos o contradictorios. El resultado del análisis de requisitos con el cliente se plasma en el documento ERS, Especificación de Requerimientos del Sistema, cuya estructura puede venir definida por varios estándares, tales como CMM-I. Asimismo, se define un diagrama de Entidad/Relación, en el que se plasman las principales entidades que participarán en el desarrollo del software. La captura, análisis y especificación de requisitos (incluso pruebas de ellos), es una parte crucial; de esta etapa depende en gran medida el logro de los objetivos finales. Se han ideado modelos y diversos procesos de trabajo para estos fines. Aunque aun no está formalizada, ya se habla de la Ingeniería de Requisitos. La IEEE Std. 830-1998 normaliza la creación de las Especificaciones de Requisitos Software (Software Requirements Specification).<br>
+
Extraer los [[Requisitos|requisitos]] de un [[Producto|producto]] de software es la primera etapa para crearlo. Mientras que los clientes piensan que ellos saben lo que el software tiene que hacer, se requiere de [[Habilidad|habilidad]] y [[Experiencia|experiencia]] en la ingeniería de software para reconocer requisitos incompletos, ambiguos o contradictorios. El resultado del [[Análisis|análisis]] de requisitos con el cliente se plasma en el documento ERS, Especificación de Requerimientos del Sistema, cuya estructura puede venir definida por varios estándares, tales como CMM-I. Asimismo, se define un [[Diagrama|diagrama]] de [[Entidad|Entidad]]/[[Relación|Relación]], en el que se plasman las principales entidades que participarán en el desarrollo del software. La captura, análisis y especificación de requisitos (incluso pruebas de ellos), es una parte crucial; de esta etapa depende en gran medida el logro de los [[Objetivos|objetivos]] finales. Se han ideado modelos y diversos procesos de trabajo para estos fines. Aunque aun no está formalizada, ya se habla de la Ingeniería de Requisitos. La IEEE Std. 830-1998 normaliza la creación de las Especificaciones de Requisitos Software (Software Requirements Specification).<br>  
  
=== Diseño y arquitectura<br> ===
+
=== Diseño y arquitectura<br> ===
  
Se refiere a determinar como funcionará de forma general sin entrar en detalles. Consiste en incorporar consideraciones de la implementación tecnológica, como el hardware, la red, etc. Se definen los Casos de Uso para cubrir las funciones que realizará el sistema, y se transforman las entidades definidas en el análisis de requisitos en clases de diseño, obteniendo un modelo cercano a la programación orientada a objetos.<br>
+
Se refiere a determinar como funcionará de forma general sin entrar en detalles. Consiste en incorporar consideraciones de la [[Implementación|implementación]] [[Tecnológica|tecnológica]], como el [[Hardware|hardware]], la [[Red|red]], etc. Se definen los [[Casos de Uso|Casos de Uso]] para cubrir las [[Funciones|funciones]] que realizará el sistema, y se transforman las entidades definidas en el análisis de requisitos en [[Clases|clases]] de diseño, obteniendo un modelo cercano a la [[Programación orientada a objetos|programación orientada a objetos]].<br>  
  
=== Programación<br> ===
+
=== Programación<br> ===
  
Reducir un diseño a código puede ser la parte más obvia del trabajo de ingeniería de software, pero no es necesariamente la porción más larga. La complejidad y la duración de esta etapa está intimamente ligada al o a los lenguajes de programación utilizados.<br>
+
Reducir un diseño a [[Código|código]] puede ser la parte más obvia del [[Trabajo|trabajo]] de ingeniería de software, pero no es necesariamente la porción más larga. La complejidad y la duración de esta etapa está intimamente ligada al o a los [[Lenguajes|lenguajes]] de [[Programación|programación]] utilizados.<br>  
  
=== Pruebas<br> ===
+
=== Pruebas<br> ===
  
Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación. Una técnica de prueba es probar por separado cada módulo del software, y luego probarlo de forma integral,para así llegar al objetivo. Se considera una buena practica el que las pruebas sean efectuadas por alguien distinto al desarrollador que la programó, idealmente un área de pruebas; sin perjuicio de lo anterior el programador debe hacer sus propias pruebas. En general hay dos grandes formas de organizar un area de pruebas, la primera es que esté compuesta por personal inexperto y que desconozca el tema de pruebas, de esta forma se evalúa que la documentación entregada sea de calidad, que los procesos descritos son tan claros que cualquiera puede entenderlos y el software hace las cosas tal y como están descritas. El segundo enfoque es tener un area de pruebas conformada por programadores con experiencia, personas que saben sin mayores indicaciones en que condiciones puede fallar una aplicación y que pueden poner atención en detalles que personal inexperto no consideraría.<br>
+
Consiste en comprobar que el software realice correctamente las [[Tareas|tareas]] indicadas en la especificación. Una [[Técnica|técnica]] de prueba es probar por separado cada [[Módulo|módulo]] del software, y luego probarlo de forma integral,para así llegar al objetivo. Se considera una buena práctica el que las pruebas sean efectuadas por alguien distinto al desarrollador que la programó, idealmente un [[Área|área]] de pruebas; sin perjuicio de lo anterior el programador debe hacer sus propias pruebas. En general hay dos grandes formas de organizar un área de pruebas, la primera es que esté compuesta por personal inexperto y que desconozca el tema de pruebas, de esta forma se evalúa que la [[Documentación|documentación]] entregada sea de calidad, que los [[Procesos|procesos]] descritos son tan claros que cualquiera puede entenderlos y el software hace las cosas tal y como están descritas. El segundo [[Enfoque|enfoque]] es tener un área de pruebas conformada por programadores con [[Experiencia|experiencia]], personas que saben sin mayores indicaciones en que condiciones puede fallar una aplicación y que pueden poner atención en detalles que personal inexperto no consideraría.<br>  
  
=== Documentación<br> ===
+
=== Documentación<br> ===
  
Todo lo concerniente a la documentación del propio desarrollo del software y de la gestión del proyecto, pasando por modelaciones (UML), diagramas, pruebas, manuales de usuario, manuales técnicos, etc; todo con el propósito de eventuales correcciones, usabilidad, mantenimiento futuro y ampliaciones al sistema.<br>
+
Todo lo concerniente a la documentación del propio desarrollo del software y de la gestión del [[Proyecto|proyecto]], pasando por [[Modelaciones|modelaciones]] (UML), [[Diagramas|diagramas]], pruebas, [[Manuales|manuales]] de usuario, manuales técnicos, etc; todo con el propósito de eventuales [[Correciones|correcciones]], [[Usabilidad|usabilidad]], [[Mantenimiento|mantenimiento]] futuro y [[Ampliaciones|ampliaciones]] al sistema.<br>  
  
=== Mantenimiento<br> ===
+
=== Mantenimiento<br> ===
  
Mantener y mejorar el software para enfrentar errores descubiertos y nuevos requisitos. Esto puede llevar más tiempo incluso que el desarrollo inicial del software. Alrededor de 2/3 de toda la ingeniería de software tiene que ver con dar mantenimiento. Una pequeña parte de este trabajo consiste en arreglar errores, o bugs. La mayor parte consiste en extender el sistema para hacer nuevas cosas. De manera similar, alrededor de 2/3 de toda la ingeniería civil, arquitectura y trabajo de construcción es dar mantenimiento.<br>
+
Mantener y mejorar el software para enfrentar [[Errores|errores]] descubiertos y nuevos requisitos. Esto puede llevar más tiempo incluso que el desarrollo inicial del software. Alrededor de 2/3 de toda la ingeniería de software tiene que ver con dar mantenimiento. Una pequeña parte de este trabajo consiste en arreglar errores, o [[Bugs|bugs]]. La mayor parte consiste en extender el sistema para hacer nuevas cosas. De manera similar, alrededor de 2/3 de toda la ingeniería [[Civil|civil]], [[Arquitectura|arquitectura]] y trabajo de construcción es dar mantenimiento.<br>  
  
Se puede decir que con la mejora continua garantiza la calidad del producto, ya que el estarla aplicando día con día es lo mejor decisión que puede llegar a tener cualquier empresa, por que de esta manera evita grandes problemas en la elaboración o desarrollo de los productos. Esto es fundamental para todas las empresas ya que se vuelven competitivas, con mayor productividad y eficiencia. No hay que olvidar que la mejora se da por que el cliente es el rey y hay que satisfacer todas y cada una de sus necesidades siempre garantizando la calidad.<br>
+
Se puede decir que con la mejora continua garantiza la [[Calidad|calidad]] del [[Producto|producto]], ya que el estarla aplicando día con día es lo mejor decisión que puede llegar a tener cualquier empresa, por que de esta manera evita grandes problemas en la elaboración o desarrollo de los productos. Esto es fundamental para todas las empresas ya que se vuelven competitivas, con mayor [[Productividad|productividad]] y [[Eficiencia|eficiencia]]. No hay que olvidar que la mejora se da por que el cliente es el rey y hay que satisfacer todas y cada una de sus necesidades siempre garantizando la [[Calidad|calidad]].<br>  
  
== Metodología<br> ==
+
== Metodología<br> ==
  
Todo desarrollo de software es riesgoso y difícil de controlar, pero si no llevamos una metodología de por medio, se obtiene clientes insatisfechos con el resultado y desarrolladores aun mas.<br>Sin embargo muchas veces no se toma en cuenta el utilizar una metodología adecuada, sobre todo cuando se trata de proyectos pequeños de dos o tres meses.<br>Con relación a los proyectos que se desarrollan con mayor envergadura, hay si se toma el sentido de basarse en una metodología de desarrollo y se empieza a buscar cual seria la mas apropiada para dicho caso. A fin de cuenta no encontramos muchas veces la meas adecuada y se termina por hacer un diseño propio de metodología, por supuesto no esta mal siempre y cuando sirva para alcanzar el objetivo.<br>Muchas veces se realiza el diseño del software de manera rígida, tal cual como el cliente lo solicito, de esa manera cuando el cliente en la "etapa de prueba" solicita un cambio se hace muy difícil de realizarlo, pues si se hace altera las cosas que no se habían previsto, y este es uno de los factores que atrasan el proyecto y crea incomodidad al desarrollador y en muchas oportunidades no llegan a cumplir con el cambio solicitado, esto conlleva malestar en el cliente puesto que no se sido tomado en cuenta su pedido; para evitar estos incidentes se debe llegar a un acuerdo formal con el cliente al inicio del proyecto de manera que no perjudique el desarrollo del mismo.<br>Muchas veces los usuarios finales se dan cuenta que dejaron de mencionar algunas cosas y lo manifiestan en la etapa inicial del proyecto cuando se le muestra el prototipo del mismo.<br>
+
Todo desarrollo de software es riesgoso y difícil de controlar, pero si no llevamos una [[Metodología|metodología]] de por medio, se obtiene clientes insatisfechos con el resultado y desarrolladores aun más.<br>Sin embargo muchas veces no se toma en cuenta el utilizar una metodología adecuada, sobre todo cuando se trata de proyectos pequeños de dos o tres meses.<br>Con relación a los proyectos que se desarrollan con mayor envergadura, hay si se toma el sentido de basarse en una metodología de desarrollo y se empieza a buscar cual seria la mas apropiada para dicho caso. A fin de cuenta no encontramos muchas veces la meas adecuada y se termina por hacer un diseño propio de metodología, por supuesto no esta mal siempre y cuando sirva para alcanzar el objetivo.<br>Muchas veces se realiza el diseño del software de manera rígida, tal cual como el cliente lo solicitó, de esa manera cuando el cliente en la "etapa de prueba" solicita un cambio se hace muy difícil de realizarlo, pues si se hace altera las cosas que no se habían previsto, y este es uno de los factores que atrasan el proyecto y crea incomodidad al desarrollador y en muchas oportunidades no llegan a cumplir con el cambio solicitado, esto conlleva malestar en el cliente puesto que no se sido tomado en cuenta su pedido; para evitar estos incidentes se debe llegar a un acuerdo formal con el cliente al inicio del proyecto de manera que no perjudique el desarrollo del mismo.<br>Muchas veces los usuarios finales se dan cuenta que dejaron de mencionar algunas cosas y lo manifiestan en la etapa inicial del proyecto cuando se le muestra el [[Prototipo|prototipo]] del mismo.<br>  
  
'''Algunas Metodologías conocidas:'''
+
'''Algunas Metodologías conocidas:'''  
  
*La metodología RUP es la más adaptable para proyectos de largo plazo.<br>
+
*La metodología [[RUP|RUP]] es la más adaptable para proyectos de largo plazo.<br>  
*La metodología XP en cambio, se recomienda para proyectos de corto plazo.<br>
+
*La metodología [[XP|XP]] en cambio, se recomienda para proyectos de corto plazo.<br>  
*La metodología MSF se adapta a proyectos de cualquier dimensión y de cualquier tecnología.<br>
+
*La metodología [[MSF|MSF]] se adapta a proyectos de cualquier dimensión y de cualquier tecnología.<br>  
*Se puede decir además que lo más importante antes de elegir la metodología que se debe usar para implementar el software, es determinar el alcance que tendrá y luego de allí ver cual es la que mas se acomoda a la aplicación.<br>
 
  
'''Ejemplos:'''
+
Se puede decir además que lo más importante antes de elegir la metodología que se debe usar para [[Implementar|implementar]] el software, es determinar el alcance que tendrá y luego de allí ver cual es la que más se acomoda a la aplicación.<br>
  
El ejemplo del software lo hacen numerosas empresas, cada vez mas gobiernos (registro gratis). Los expertos lo recomiendan, lo hacen particulares a millones. Hasta (a regañadientes) Microsoft. La idea absurda de dejar abierta las tripas del software y permitir que la gente las mire, e incluso que las modifique, copie y use en condiciones diferentes, en la industria de la informática es muy común. De hecho se extiende a los más pequeños rincones del mundo desde una orden mágica hermética de tradición masónica y rosacruciana a telefónica I+D. Si hasta las empresas en filosofía más expuesta o menos rápidas en novación y las sociedades secretas son capaces de ver las ventajas del "OPEN SOURCE" (abierto o libre).<br>No ha sido sencillo la idea conocida como dicho software (abierto o libre) a tenido una vida larga pero difícil, dirigida por polémicas aparentemente absurda pero que contienen un profundo debate ideológico y practico; a veces dividido en partes enfrentadas con mucha pasión; siempre descalificada, lo cierto es que la comunidad del software abierto hoy es una fuerte y sana realidad.
+
'''Ejemplos:'''
  
== Importancia ==
+
El ejemplo del software lo hacen numerosas empresas, cada vez mas gobiernos (registro gratis). Los expertos lo recomiendan, lo hacen particulares a millones. Hasta (a regañadientes) [[Microsoft|Microsoft]]. La idea absurda de dejar abierta las [[Tripas|tripas]] del software y permitir que la gente las mire, e incluso que las modifique, copie y use en condiciones diferentes, en la industria de la informática es muy común. De hecho se extiende a los más pequeños rincones del mundo desde una orden mágica hermética de tradición masónica y rosacruciana a telefónica I+D. Si hasta las empresas en filosofía más expuesta o menos rápidas en novación y las sociedades secretas son capaces de ver las ventajas del "[[OPEN SOURCE|OPEN SOURCE]]" (abierto o libre).<br>No ha sido sencillo la idea conocida como dicho software (abierto o libre) a tenido una vida larga pero difícil, dirigida por polémicas aparentemente absurda pero que contienen un profundo debate ideológico y práctico; a veces dividido en partes enfrentadas con mucha pasión; siempre descalificada, lo cierto es que la comunidad del software abierto hoy es una fuerte y sana realidad.
  
Actualmente la transición que estamos viviendo hacia una sociedad del conocimiento a cambiado profundamente las relaciones entre las personas, empresas y gobiernos: las empresas usan la red para comunicarse con los clientes, utilizan también herramientas de gestión del conocimiento para hacer masa eficientes, los gobiernos mejoran su presencia en Internet y los servicios a los ciudadanos a través de la red, los usuarios usan las herramientas para sus relaciones personales, etc. Se va de forma imparable hacia una sociedad altamente interconectada donde el eje fundamental es la información.<br>El software es el intermediario cada vez mas grande entre la información y la inteligencia humana. De la misma manera que preocupa para poder acceder a la información, si existe la censura, es tema de preocupación de quien controla este intermediario y las garantías de su transparencia y confiabilidad.<br>En principio, el software es un programa informático o conjunto de ellos que tiene un fin determinado, es el de procesar los textos que usamos, el controlador de grabación de nuestros espacios favoritos o las aplicaciones que permiten operar un teléfono móvil.<br>Esta compuesto por un conjunto de instrucciones que el usuario realiza para ejecutar una función especifica. Normalmente los programadores escriben en un lenguaje en el que todos pueden entender y que después es traducido al lenguaje binario el único que las maquinas entienden. El conjunto de órdenes en el lenguaje que todos trabajan se llaman código fuente.<br>Sino se accede al código solo se puede usar el programa, no se puede ver como esta hecho o introducir comentarios. Un ejemplo muy utilizado es el de la receta de cocina, en el que el código fuente son las instrucciones que permite confeccionar un plato. Sin la receta solo se pude degustar el plato, pero no se sabe si se le añade algo vaya en contra de algunos de esos ingredientes ya que se desconocen su composición y proporción. En este sentido, el codigo fuente juega un papel fundamental en la manera como se debe entender el software.<br>Se podrían poner varios ejemplos para entender dicha importancia. A finales de los 90 se pudo ver en todo el mundo la preocupación por parte de empresa y gobiernos por las consecuencias que podían tener el llamado efecto 2000. El famoso error informático era debido al hecho de que muchos programas almacenaban la parte de la fecha correspondiente al año utilizando únicamente dos dígitos, de tal manera, que después del año 99 (el 1999) podíamos pasar al año 00 (¿ año 2000 o año 1900?) causando todo tipo de errores en el calculo de periodo de tiempo.<br>Los ordenadores de las empresas eléctricas, centrales nucleares, sistema de control de aviación, bancos y en general, todo el software de uso cotidiano, tuvieron que ser revisados. Finalmente algunas aplicaciones fueron corregidas, otras ya funcionaban correctamente y no hubo que lamentar ninguna catástrofe, pero hubo miles de predicciones apocalípticas sobre las consecuencias que se podría llegar a obtener este error, así podría ver sido si no se hubiera reparado a tiempo.<br>Es por eso, el software tiene un papel muy importante en la sociedad sobre manera garantizar métodos trasparentes en sus diferentes fases de producción y explotación.
+
== Importancia  ==
  
== Conclusión ==
+
Actualmente la transición que estamos viviendo hacia una sociedad del conocimiento a cambiado profundamente las relaciones entre las personas, empresas y [[Gobiernos|gobiernos]]: las empresas usan la red para comunicarse con los clientes, utilizan también herramientas de gestión del conocimiento para hacer más eficientes, los gobiernos mejoran su presencia en [[Internet|Internet]] y los servicios a los ciudadanos a través de la red, los usuarios usan las herramientas para sus relaciones personales, etc. Se va de forma imparable hacia una sociedad altamente interconectada donde el eje fundamental es la información.<br>El software es el intermediario cada vez mas grande entre la [[Información|información]] y la [[Inteligencia|inteligencia]] humana. De la misma manera que preocupa para poder acceder a la información, si existe la [[Censura|censura]], es tema de preocupación de quien controla este intermediario y las garantías de su [[Transparencia|transparencia]] y [[Confiabilidad|confiabilidad]].<br>En principio, el software es un [[Programa informático|programa informático]] o conjunto de ellos que tiene un fin determinado, es el de procesar los [[Textos|textos]] que usamos, el [[Controlador|controlador]] de [[Grabación|grabación]] de nuestros espacios favoritos o las aplicaciones que permiten operar un [[Teléfono|teléfono]] móvil.<br>Está compuesto por un conjunto de instrucciones que el usuario realiza para ejecutar una función especifica. Normalmente los programadores escriben en un lenguaje en el que todos pueden entender y que después es traducido al lenguaje [[Binario|binario]] el único que las [[Máquinas|máquinas]] entienden. El conjunto de órdenes en el lenguaje que todos trabajan se llaman código fuente.<br>Sino se accede al código solo se puede usar el programa, no se puede ver como esta hecho o introducir comentarios. Un ejemplo muy utilizado es el de la receta de cocina, en el que el código fuente son las [[Instrucciones|instrucciones]] que permite confeccionar un plato. Sin la receta solo se pude degustar el plato, pero no se sabe si se le añade algo vaya en contra de algunos de esos ingredientes ya que se desconocen su composición y proporción. En este sentido, el codigo fuente juega un papel fundamental en la manera como se debe entender el software.<br>Se podrían poner varios ejemplos para entender dicha importancia. A finales de los [[90|90]] se pudo ver en todo el mundo la preocupación por parte de empresa y gobiernos por las consecuencias que podían tener el llamado efecto [[2000|2000]]. El famoso error informático era debido al hecho de que muchos programas almacenaban la parte de la fecha correspondiente al año utilizando únicamente dos dígitos, de tal manera, que después del año [[99|99]] (el [[1999|1999]]) podíamos pasar al año [[00|00]] (¿ año 2000 o año [[1900|1900]]?) causando todo tipo de errores en el cálculo de periodo de tiempo.<br>Los ordenadores de las empresas [[Eléctricas|eléctricas]], [[Centrales nucleares|centrales nucleares]], sistema de control de [[Aviación|aviación]], [[Bancos|bancos]] y en general, todo el software de uso cotidiano, tuvieron que ser revisados. Finalmente algunas aplicaciones fueron corregidas, otras ya funcionaban correctamente y no hubo que lamentar ninguna [[catástrofe|catástrofe]], pero hubo miles de predicciones apocalípticas sobre las consecuencias que se podría llegar a obtener este error, así podría ver sido si no se hubiera reparado a tiempo.<br>Es por eso, el software tiene un papel muy importante en la sociedad sobre manera garantizar [[Métodos|métodos]] trasparentes en sus diferentes fases de producción y explotación.
  
El desarrollo del software y la programación es uno de los pilares fundamentales de la informática y al cual se dedican muchas horas de esfuerzos en empresas, colegios, academias y universidades.<br>Conforme a la tecnología va avanzando, van apareciendo nuevas soluciones, nuevas formas de programación, nuevos lenguajes y un sin fin de herramientas que intentan realizar el trabajo del desarrollador un poco mas fácil.<br>La programación orientadas a objetos o los compiladores basados en maquinas virtuales (en muchos casos, multiplataforma), también a sus puestos unas renovación en la manera de programar.<br>En la actualidad la sociedad se encuentra en una época de transición, que se encamina hacia un nuevo estilo de programación basada en estándares.
+
== Conclusión  ==
  
== Fuente ==
+
El desarrollo del software y la programación es uno de los pilares fundamentales de la [[Informática|informática]] y al cual se dedican muchas horas de esfuerzos en empresas, [[Colegios|colegios]], [[Academias|academias]] y [[Universidades|universidades]].<br>Conforme a la tecnología va avanzando, van apareciendo nuevas soluciones, nuevas formas de programación, nuevos lenguajes y un sin fin de herramientas que intentan realizar el trabajo del desarrollador un poco mas fácil.<br>La programación orientadas a objetos o los [[Compiladores|compiladores]] basados en máquinas virtuales (en muchos casos, [[Multiplataforma|multiplataforma]]), también a supuesto una renovación en la manera de programar.<br>En la actualidad la sociedad se encuentra en una época de transición, que se encamina hacia un nuevo estilo de programación basada en estándares.
  
#Castro, Díaz-Balart, Fidel: CIENCIA, INNOVACIÓN Y FUTURO. Ediciones especiales. Instituto Cubano del Libro, La Habana. 2001.
+
== Fuente  ==
#Franquet, R.: COMUNICAR EN LA SOCIEDAD DE LA INFORMACIÓN. Universidad Autónoma de Barcelona. 2005
+
 
#Ojalvo, V. y otros: LA COMUNICACIÓN EDUCATIVA. Universidad de la Habana. En formato digital.
+
#Castro, Díaz-Balart, Fidel: CIENCIA, INNOVACIÓN Y FUTURO. Ediciones especiales. Instituto Cubano del Libro, La Habana. 2001.  
#Pasquali, A.: COMPRENDER LA COMUNICACIÓN. Caracas: Monte Ávila Editores. 1979.
+
#Franquet, R.: COMUNICAR EN LA SOCIEDAD DE LA INFORMACIÓN. Universidad Autónoma de Barcelona. 2005  
#Presuman, Roger, 2002. Ingeniería de Software. Un enfoque práctico, McGraw.Hill/Interamericana de España, 824 páginas.
+
#Ojalvo, V. y otros: LA COMUNICACIÓN EDUCATIVA. Universidad de la Habana. En formato digital.  
 +
#Pasquali, A.: COMPRENDER LA COMUNICACIÓN. Caracas: Monte Ávila Editores. 1979.  
 +
#Presuman, Roger, 2002. Ingeniería de Software. Un enfoque práctico, McGraw.Hill/Interamericana de España, 824 páginas.  
 
#Urribarri, R.: “EL USO DE INTERNET Y LA TEORÍA DE LA COMUNICACIÓN”. Universidad de Zulia, Venezuela. 10-O3-1999.<br>
 
#Urribarri, R.: “EL USO DE INTERNET Y LA TEORÍA DE LA COMUNICACIÓN”. Universidad de Zulia, Venezuela. 10-O3-1999.<br>
  
<br>
+
<br>  
 +
 
 
[[Category:Software]]
 
[[Category:Software]]

Revisión del 16:42 14 mar 2011

Desarrollo de Software




Desarrollar un software significa construirlo simplemente mediante su descripción. Esta es una muy buena razón para considerar la actividad de desarrollo de software como una ingeniería. En un nivel más general, la relación existente entre un software y su entorno es clara ya que el software es introducido en el mundo de modo de provocar ciertos efectos en el mismo.
Aquellas partes del mundo que afectarán al software y que serán afectadas por él será el Dominio de Aplicación. Es allí donde los usuarios o clientes observarán si el desarrollo del software ha cumplido su propósito.
Una de las mayores deficiencias en la práctica de construcción de software es la poca atención que se presta a la discusión del problema. En general los desarrolladores se centran en la solución dejando el problema inexplorado. El problema a resolver debe ser deducido a partir de su solución.
Esta aproximación orientada a la solución puede funcionar en campos donde todos los problemas son bien conocidos, clasificados e investigados, donde la innovación se ve en la detección de nuevas soluciones a viejos problemas.
Pero el desarrollo de software no es un campo con tales características. La versatilidad de las computadoras y su rápida evolución hace que exista un repertorio de problemas en constante cambio y cuya solución software sea de enorme importancia.

Desarrollo del Software

Cuando se va desarrollar un software intervienen muchas personas como lo es el cliente quien es el que tiene el problema en su empresa y desea que sea solucionado, para esto existe el analista de sistema quien es el encargado de hacerle llegar todos los requerimientos y necesidades que tiene el cliente a los programadores quienes son las personas encargadas de realizar lo que es la codificación y diseño del sistema para después probarlo y lo instalan al cliente. Es así como intervienen varias personas ya que una sola persona no podría determinar todo lo necesario lo mas seguro que le haga falta algún requerimiento o alguna parte del nuevo sistema y entre mas estén involucradas mejor para cubrir con todos los requerimientos del sistema.

Fases del proceso de desarrollo de software

Análisis de requisitos
Esquema desarrollo software.jpg

Extraer los requisitos de un producto de software es la primera etapa para crearlo. Mientras que los clientes piensan que ellos saben lo que el software tiene que hacer, se requiere de habilidad y experiencia en la ingeniería de software para reconocer requisitos incompletos, ambiguos o contradictorios. El resultado del análisis de requisitos con el cliente se plasma en el documento ERS, Especificación de Requerimientos del Sistema, cuya estructura puede venir definida por varios estándares, tales como CMM-I. Asimismo, se define un diagrama de Entidad/Relación, en el que se plasman las principales entidades que participarán en el desarrollo del software. La captura, análisis y especificación de requisitos (incluso pruebas de ellos), es una parte crucial; de esta etapa depende en gran medida el logro de los objetivos finales. Se han ideado modelos y diversos procesos de trabajo para estos fines. Aunque aun no está formalizada, ya se habla de la Ingeniería de Requisitos. La IEEE Std. 830-1998 normaliza la creación de las Especificaciones de Requisitos Software (Software Requirements Specification).

Diseño y arquitectura

Se refiere a determinar como funcionará de forma general sin entrar en detalles. Consiste en incorporar consideraciones de la implementación tecnológica, como el hardware, la red, etc. Se definen los Casos de Uso para cubrir las funciones que realizará el sistema, y se transforman las entidades definidas en el análisis de requisitos en clases de diseño, obteniendo un modelo cercano a la programación orientada a objetos.

Programación

Reducir un diseño a código puede ser la parte más obvia del trabajo de ingeniería de software, pero no es necesariamente la porción más larga. La complejidad y la duración de esta etapa está intimamente ligada al o a los lenguajes de programación utilizados.

Pruebas

Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación. Una técnica de prueba es probar por separado cada módulo del software, y luego probarlo de forma integral,para así llegar al objetivo. Se considera una buena práctica el que las pruebas sean efectuadas por alguien distinto al desarrollador que la programó, idealmente un área de pruebas; sin perjuicio de lo anterior el programador debe hacer sus propias pruebas. En general hay dos grandes formas de organizar un área de pruebas, la primera es que esté compuesta por personal inexperto y que desconozca el tema de pruebas, de esta forma se evalúa que la documentación entregada sea de calidad, que los procesos descritos son tan claros que cualquiera puede entenderlos y el software hace las cosas tal y como están descritas. El segundo enfoque es tener un área de pruebas conformada por programadores con experiencia, personas que saben sin mayores indicaciones en que condiciones puede fallar una aplicación y que pueden poner atención en detalles que personal inexperto no consideraría.

Documentación

Todo lo concerniente a la documentación del propio desarrollo del software y de la gestión del proyecto, pasando por modelaciones (UML), diagramas, pruebas, manuales de usuario, manuales técnicos, etc; todo con el propósito de eventuales correcciones, usabilidad, mantenimiento futuro y ampliaciones al sistema.

Mantenimiento

Mantener y mejorar el software para enfrentar errores descubiertos y nuevos requisitos. Esto puede llevar más tiempo incluso que el desarrollo inicial del software. Alrededor de 2/3 de toda la ingeniería de software tiene que ver con dar mantenimiento. Una pequeña parte de este trabajo consiste en arreglar errores, o bugs. La mayor parte consiste en extender el sistema para hacer nuevas cosas. De manera similar, alrededor de 2/3 de toda la ingeniería civil, arquitectura y trabajo de construcción es dar mantenimiento.

Se puede decir que con la mejora continua garantiza la calidad del producto, ya que el estarla aplicando día con día es lo mejor decisión que puede llegar a tener cualquier empresa, por que de esta manera evita grandes problemas en la elaboración o desarrollo de los productos. Esto es fundamental para todas las empresas ya que se vuelven competitivas, con mayor productividad y eficiencia. No hay que olvidar que la mejora se da por que el cliente es el rey y hay que satisfacer todas y cada una de sus necesidades siempre garantizando la calidad.

Metodología

Todo desarrollo de software es riesgoso y difícil de controlar, pero si no llevamos una metodología de por medio, se obtiene clientes insatisfechos con el resultado y desarrolladores aun más.
Sin embargo muchas veces no se toma en cuenta el utilizar una metodología adecuada, sobre todo cuando se trata de proyectos pequeños de dos o tres meses.
Con relación a los proyectos que se desarrollan con mayor envergadura, hay si se toma el sentido de basarse en una metodología de desarrollo y se empieza a buscar cual seria la mas apropiada para dicho caso. A fin de cuenta no encontramos muchas veces la meas adecuada y se termina por hacer un diseño propio de metodología, por supuesto no esta mal siempre y cuando sirva para alcanzar el objetivo.
Muchas veces se realiza el diseño del software de manera rígida, tal cual como el cliente lo solicitó, de esa manera cuando el cliente en la "etapa de prueba" solicita un cambio se hace muy difícil de realizarlo, pues si se hace altera las cosas que no se habían previsto, y este es uno de los factores que atrasan el proyecto y crea incomodidad al desarrollador y en muchas oportunidades no llegan a cumplir con el cambio solicitado, esto conlleva malestar en el cliente puesto que no se sido tomado en cuenta su pedido; para evitar estos incidentes se debe llegar a un acuerdo formal con el cliente al inicio del proyecto de manera que no perjudique el desarrollo del mismo.
Muchas veces los usuarios finales se dan cuenta que dejaron de mencionar algunas cosas y lo manifiestan en la etapa inicial del proyecto cuando se le muestra el prototipo del mismo.

Algunas Metodologías conocidas:

  • La metodología RUP es la más adaptable para proyectos de largo plazo.
  • La metodología XP en cambio, se recomienda para proyectos de corto plazo.
  • La metodología MSF se adapta a proyectos de cualquier dimensión y de cualquier tecnología.

Se puede decir además que lo más importante antes de elegir la metodología que se debe usar para implementar el software, es determinar el alcance que tendrá y luego de allí ver cual es la que más se acomoda a la aplicación.

Ejemplos:

El ejemplo del software lo hacen numerosas empresas, cada vez mas gobiernos (registro gratis). Los expertos lo recomiendan, lo hacen particulares a millones. Hasta (a regañadientes) Microsoft. La idea absurda de dejar abierta las tripas del software y permitir que la gente las mire, e incluso que las modifique, copie y use en condiciones diferentes, en la industria de la informática es muy común. De hecho se extiende a los más pequeños rincones del mundo desde una orden mágica hermética de tradición masónica y rosacruciana a telefónica I+D. Si hasta las empresas en filosofía más expuesta o menos rápidas en novación y las sociedades secretas son capaces de ver las ventajas del "OPEN SOURCE" (abierto o libre).
No ha sido sencillo la idea conocida como dicho software (abierto o libre) a tenido una vida larga pero difícil, dirigida por polémicas aparentemente absurda pero que contienen un profundo debate ideológico y práctico; a veces dividido en partes enfrentadas con mucha pasión; siempre descalificada, lo cierto es que la comunidad del software abierto hoy es una fuerte y sana realidad.

Importancia

Actualmente la transición que estamos viviendo hacia una sociedad del conocimiento a cambiado profundamente las relaciones entre las personas, empresas y gobiernos: las empresas usan la red para comunicarse con los clientes, utilizan también herramientas de gestión del conocimiento para hacer más eficientes, los gobiernos mejoran su presencia en Internet y los servicios a los ciudadanos a través de la red, los usuarios usan las herramientas para sus relaciones personales, etc. Se va de forma imparable hacia una sociedad altamente interconectada donde el eje fundamental es la información.
El software es el intermediario cada vez mas grande entre la información y la inteligencia humana. De la misma manera que preocupa para poder acceder a la información, si existe la censura, es tema de preocupación de quien controla este intermediario y las garantías de su transparencia y confiabilidad.
En principio, el software es un programa informático o conjunto de ellos que tiene un fin determinado, es el de procesar los textos que usamos, el controlador de grabación de nuestros espacios favoritos o las aplicaciones que permiten operar un teléfono móvil.
Está compuesto por un conjunto de instrucciones que el usuario realiza para ejecutar una función especifica. Normalmente los programadores escriben en un lenguaje en el que todos pueden entender y que después es traducido al lenguaje binario el único que las máquinas entienden. El conjunto de órdenes en el lenguaje que todos trabajan se llaman código fuente.
Sino se accede al código solo se puede usar el programa, no se puede ver como esta hecho o introducir comentarios. Un ejemplo muy utilizado es el de la receta de cocina, en el que el código fuente son las instrucciones que permite confeccionar un plato. Sin la receta solo se pude degustar el plato, pero no se sabe si se le añade algo vaya en contra de algunos de esos ingredientes ya que se desconocen su composición y proporción. En este sentido, el codigo fuente juega un papel fundamental en la manera como se debe entender el software.
Se podrían poner varios ejemplos para entender dicha importancia. A finales de los 90 se pudo ver en todo el mundo la preocupación por parte de empresa y gobiernos por las consecuencias que podían tener el llamado efecto 2000. El famoso error informático era debido al hecho de que muchos programas almacenaban la parte de la fecha correspondiente al año utilizando únicamente dos dígitos, de tal manera, que después del año 99 (el 1999) podíamos pasar al año 00 (¿ año 2000 o año 1900?) causando todo tipo de errores en el cálculo de periodo de tiempo.
Los ordenadores de las empresas eléctricas, centrales nucleares, sistema de control de aviación, bancos y en general, todo el software de uso cotidiano, tuvieron que ser revisados. Finalmente algunas aplicaciones fueron corregidas, otras ya funcionaban correctamente y no hubo que lamentar ninguna catástrofe, pero hubo miles de predicciones apocalípticas sobre las consecuencias que se podría llegar a obtener este error, así podría ver sido si no se hubiera reparado a tiempo.
Es por eso, el software tiene un papel muy importante en la sociedad sobre manera garantizar métodos trasparentes en sus diferentes fases de producción y explotación.

Conclusión

El desarrollo del software y la programación es uno de los pilares fundamentales de la informática y al cual se dedican muchas horas de esfuerzos en empresas, colegios, academias y universidades.
Conforme a la tecnología va avanzando, van apareciendo nuevas soluciones, nuevas formas de programación, nuevos lenguajes y un sin fin de herramientas que intentan realizar el trabajo del desarrollador un poco mas fácil.
La programación orientadas a objetos o los compiladores basados en máquinas virtuales (en muchos casos, multiplataforma), también a supuesto una renovación en la manera de programar.
En la actualidad la sociedad se encuentra en una época de transición, que se encamina hacia un nuevo estilo de programación basada en estándares.

Fuente

  1. Castro, Díaz-Balart, Fidel: CIENCIA, INNOVACIÓN Y FUTURO. Ediciones especiales. Instituto Cubano del Libro, La Habana. 2001.
  2. Franquet, R.: COMUNICAR EN LA SOCIEDAD DE LA INFORMACIÓN. Universidad Autónoma de Barcelona. 2005
  3. Ojalvo, V. y otros: LA COMUNICACIÓN EDUCATIVA. Universidad de la Habana. En formato digital.
  4. Pasquali, A.: COMPRENDER LA COMUNICACIÓN. Caracas: Monte Ávila Editores. 1979.
  5. Presuman, Roger, 2002. Ingeniería de Software. Un enfoque práctico, McGraw.Hill/Interamericana de España, 824 páginas.
  6. Urribarri, R.: “EL USO DE INTERNET Y LA TEORÍA DE LA COMUNICACIÓN”. Universidad de Zulia, Venezuela. 10-O3-1999.