Ingenieria de software
Construir sistemas que sean confiables es uno de los principales desafíos que los desarrolladores de software se enfrentan. Las preocupaciones relacionadas con la fiabilidad han acompañado a los desarrolladores desde el primer día en que los sistemas se construyeron e implementaron. Obviamente varias cosas han cambiado desde entonces, incluyendo, la naturaleza de los errores y fallas, la complejidad de los sistemas, los servicios que prestan y la forma en que nuestra sociedad utiliza estos sistemas. Pero la necesidad de lidiar con errores (como falla en relación de componentes, incompatibilidad de entornos, errores humanos y errores de software) sigue estando en el núcleo de la investigación y el desarrollo de software. A medida que las computadoras están penetrando en varios campos de la industria, y la complejidad de los sistemas modernos está creciendo, lograr la fiabilidad sigue siendo central para los desarrolladores y usuarios del sistema.
Factores de fracaso en un proyecto de software.
La mayoría de los proyectos de software fracasan parcial o totalmente porque no cumplen todos requisitos. Estos pueden los costos, tiempos de entrega, la calidad o los objetivos de los requisitos. Hay una variedad de causas de fallas de software, pero dentro de mi experiencia, los más comunes son los siguientes:
· Gestión pobre de Proyecto. A mala gestión del proyecto, habrá falla en el mismo. La gestión debe hacerse correctamente. Deben establecerse diferentes equipos que establezcan estrategias y que implementen las estrategias.
· Objetivos del proyecto no articulados o poco realistas. Antes de que se establezca algo, debe haber un enfoque realista y un plan, entonces el trabajo viene a implementarlo. Tanto la estrategia y el plan de implementación deben ir de la mano para una coordinación adecuada. La ausencia de objetivos realistas o no articulados también es casa de falla en el proyecto.
· Estimación inexacta de los recursos que se necesitan. El trabajo debe asignarse (y dividirse) de manera adecuada y a los departamentos correspondientes.
· Requisitos del sistema mal definidos. Los requisitos deben definirse y establecerse de forma adecuada y sistemática. En caso de que esto no se haga, el fracaso del software es inevitable.
· Tiempos de entrega y presupuesto mal calculados. Los clientes están siempre quieren tener sus proyectos listos antes de tiempo y a un muy bajo costo. En la mayoría de los casos, esta agudeza del cliente lleva a los desarrolladores a acordar un plazo más corto o poco realista para la entrega del proyecto y a un precio bajo. El resultado es obvio: proyecto fracasado.
· Mala comunicación entre clientes, desarrolladores y usuarios. En caso de que haya poca (o nula) comunicación entre los clientes, desarrolladores y usuarios, el porcentaje de éxito del software es de 0%.
· Mala elección en el uso de herramientas para desarrollar el software. Se debe tener cuidado al seleccionar la herramienta a usar. Se debe recordar como regla general que lo barato sale al final caro.
· Incapacidad para manejar la complejidad del proyecto. La planificación y las estrategias son algunos de los puntos más importantes que uno necesita hacer. Es importante definir y prever la complejidad del proyecto y tomar las medidas adecuadas para que evitar el fracaso del proyecto. Por lo que es obligatorio que una persona experimentada se le da la responsabilidad de supervisar tales cosas.
· Gestión nula de riesgos: Cada vez que se emprende cualquier proyecto, es necesario comprender que los riesgos deben ser atendidos y anticipados.
Aunque hay muchos factores que son consecuencia del fracaso de un proyecto, los antes mencionados son los que yo he visto en mi vida laboral, podría mencionar otros más, tales como los cambios constantes en los requisitos, la falta de recursos y las malas prácticas de desarrollo.
Consideraciones en un proyecto de software.
Con el fin de entender la estimación de costos de desarrollo de software, primero debemos entender qué es el proceso de estimación de costos de software. Por definición, el proceso de estimación de costes de software es un conjunto de técnicas y procedimientos que se utilizan para derivar la estimación de coste de software. Generalmente hay un conjunto de entradas a este proceso y luego este mismo proceso utiliza estas entradas para generar las salidas y calcular los costos del desarrollo del software.
Hoy en día existen métodos o modelos para estimar costos en el desarrollo de software. Pero una vista general y que aún hoy muchos desarrolladores siguen ocupando, donde los factores a tomar en cuenta son los siguientes:
· Requisitos - Lo que el proyecto requiere.
· Mano de obra - número de personal (que también incluye personal directivo) que se asignan al proyecto en función del tiempo.
· Duración del proyecto - tiempo que se necesita para completar el proyecto.
· Dedicación (esfuerzo, empeño) - cantidad requerida para completar el proyecto y generalmente se mide en unidades como hombre-mes (HM) o persona-mes (PM).
Ahora bien, para que la información sea fiable, se deben tener en cuenta factores extra que determinen el costo real (o más cercano a la realidad) para el desarrollo de software.
· Requerimientos (parciales y/o completos).
· Restricciones de presupuestos.
Recomendado por LinkedIn
· Factores de riesgo.
· Arquitectura de desarrollo.
· Procesos de desarrollo.
· Mano de obra.
· Dedicación.
· Implementación.
· Contingencia (en caso de necesitarse).
Durante el proceso de estimación, un estimador experimentado detectará las ambigüedades e incoherencias en todos los factores y todos los requisitos. Como parte del proceso de estimación, el estimador intentará resolver todas estas ambigüedades modificando los requisitos. Si las ambigüedades o los requisitos inconsistentes permanecen sin resolver, entonces la estimación de costos resultara afectada negativamente.
Como lo mencione anteriormente, existen métodos / modelos de estimación de costos, los cuales describo brevemente:
Modelo algorítmico. Este método se basa en un análisis de los factores que afectan al costo de desarrollo. Los factores son ponderados y utilizados como parámetros en una función que estima el costo. Los beneficios del uso de modelos algorítmicos incluyen su naturaleza reutilizable y su uso intuitivo. Un inconveniente a esta forma de estimación de costos es que no puede predecir con exactitud los costos cuando hay una relación no lineal entre los factores de costo.
Juicio experto. El costo se estima utilizando el método de juicio de expertos mediante la creación de reglas de votación basadas en el juicio y la experiencia de expertos. Este modelo es simple de usar, pero sin duda tiene demasiada incertidumbre y poca objetividad debido al factor humano.
Análisis de regresión. Los factores de control de costos se tratan como variables independientes con el costo de desarrollo como variable dependiente. Se puede entonces buscar una relación lineal o no lineal entre éstos, basada en datos históricos de proyectos anteriores. Aunque la exactitud suele ser alta para este método, desafortunadamente requiere alta calidad de datos de naturaleza cuantitativa.
Estimación análoga. El principal método utilizado para calcular los costos de desarrollo compara esencialmente los costos de proyectos terminados similares para estimar el costo del nuevo proyecto, utilizando otros métodos como 'enjambre de partículas', 'teoría difusa' y otros métodos matemáticos.
Ingeniería de software.
La ingeniería de software es la aplicación de los principios utilizados en el campo de la ingeniería, que generalmente se ocupa de los sistemas físicos, para el diseño, desarrollo, pruebas, despliegue y gestión de sistemas de software.
El campo de la ingeniería de software aplica el enfoque disciplinado y estructurado de la programación que se utiliza en la ingeniería para el desarrollo de software con el objetivo de mejorar la calidad, tiempo y eficiencia presupuestaria, junto con la garantía de pruebas estructuradas.
Las aplicaciones de ingeniería de software son prácticamente ilimitadas. De hecho, la ingeniería de software ha crecido tan rápidamente en las últimas décadas que se ha conectado firmemente con todas las otras áreas de la informática (por ejemplo, inteligencia artificial, procesamiento paralelo, gráficos por computadora, interacción hombre-computadora, sistemas de gestión de bases de datos y muchos otros), así como con algunas áreas fuera del dominio informático tradicional (como las ciencias cognitivas y las artes visuales).
Para asegurar el éxito del sistema, se debe tener en cuenta varios factores:
1. No saltarse ninguna fase dentro del diseño y desarrollo, pues a mediano y largo plazo, esto resulta en un fallo del sistema o en un sistema inadecuado que no satisface las necesidades de los usuarios.
2. Auditar de cada uno de las fases y/o módulos que se entregan para corrección y por calidad.
3. Supervisar cuidadosamente el proyecto. Debemos asegurarnos que el cliente y/o los usuarios están conscientes del progreso del proyecto.
4. El liderazgo en el proyecto debe ser el adecuado, sea por parte del personal y/o el proceso de desarrollo del proyecto.
En cuanto a los costos, nadie trabaja gratis. Si insisten en mantener los costos bajos y acelerar el proyecto, entonces la calidad será baja (y pésima) y el riesgo al fracaso será bastante alto, independientemente de lo bien que se administre el proyecto.