Categorie: Tutti - comunicación - planeación - modelado - codificación

da Jesus Hernandez mancano 3 anni

315

La ingeniería de software

La ingeniería de software se centra en una serie de principios y prácticas esenciales para el desarrollo efectivo de sistemas informáticos. Antes, durante y después de la codificación, se deben seguir ciertos principios que aseguran un desarrollo organizado y eficiente del software.

La ingeniería de software

Where to next?

Although this analysis is fairly simplistic, it may take some time to develop, because it needs good insight into the behavior of each industry or market in which you compete.

It is worth collaborating with your colleagues, who may each have specialist knowledge in one or two sectors. Inputs can then be combined to prioritize strategic actions.

Share your mind map

La ingeniería de software

Begin by typing in the name of your organisation.

LINEA DEL TIEMPO DEL SOFTWARE

1990
La actualidad
1980
1980 – 1981

Ingeniería de software vs Ciencias de la computación

Grace Hopper: sugirió que la programación es un arte práctico Edsger Dijkstra: llamó al arte de programar el arte de organizar la complejidad Donald Knuth: se refirió a la programación como arte porque producía objetos de belleza David Parnas: existe una distinción entre la "informática" y las otras cosas que hacemos.

1970
Friedrich Bauer - Conferencia OTAN

Muchas personas sugieren que fue Friedrich Bauer quien acuño este termino en la conferencia de ingeniería de software de la OTAN

1966
Anthony Oettinger

Utilizó el término "ingeniería de software" para hacer la distinción entre informática y la construcción de sistemas intensivos en software

1965
Anuncio Clasificado en "Computers and Automation

Apareció un anuncio de trabajo buscando un "ingeniero de sistemas de software".

1963
Margaret Hamilton

Fue la primera persona en usar el término de "Ingeniería en Software", este echo no fue documentado pero se sabe mediante una relato oral que ella comenzó a usar el término en algún momento de 1963-1964 para distinguir su trabajo de la ingeniería de hardware mientras trabajaba en el programa espacial Estadounidense.

1960

La Crisis Del Software

Margaret Hamilton acuñó el término "ingeniería de software" y en el que la OTAN declaró que había una "crisis de software". -La mayoria de proyectos de software fallaban por la mala organización y costos elevados. -El software era ineficiente y surgieron varios problemas

1947-1948
1947 – 1948

Madurez de la computación y el nacimiento de la ingeniería de software

a Guerra Fría generó otro conjunto de fuerzas que llevaron a la ingeniería de software a la madurez. Se desarrollo el sistema SAGE que era una programación en tiempo real. Se desarrollo de interfaces humano-computador

1940
1945 – 1965

Auge de la informática y nacimiento de la ingeniería de software.

Después de la segunda guerra mundial hubo un auge en la informática. Herman Goldstine junto a John von Neumann, desarrollarían los diagramas de flujo. Maurice Wilkes, David Wheeler y Stanley Gill crerían el concepto de subrutinas, descomponer algoritmos. John Backus desarrollaría el famoso lenguaje de alto nivel Fortran. John Pinkerton tenía la idea de que el software podía tratarse como un componente en sí mismo. Grace Hopper, Robert Bemer, Jean Sammet y otro crearon Cobol

1930
1929 – 1945

El nacimiento de la computadora electrónica

Las ideas de Frederick Taylor y los Gilbreth promocionaron el concepto de diagramas de proceso. En 1940, Wallace Eckert desarrollara la 1ra metodología de computación. Nace el concepto de un ordenador electrónico programable, surge ENIAC Grace Hooper: Se percato de que se podría crear un lenguaje más cercano a los humanos (alto nivel), esto marca el inicio del primer compilador. En plena Segunda Guerra Mundial, Alan Touring, daría las bases de la computación moderna

Practica y principios de la ingeniería de software

Cinco
Número de actividades estructurales que se encuentran dentro de un proceso de de desarrollo de software
Nivel de proceso
En este nivel los principios fundamentales establecen un fundamento filosófico que guía al equipo de software.
Nivel de la práctica
En este nivel éstos principios establecen un conjunto de valores y reglas que sirven como guía al analizar el diseño de un problema y su solución.
Despliegue
Éstos principios nos permiten lograr la administración de las expectativas del cliente y brindarle información adecuada sobre el software.
Codificacion
Son aquellos principios que definen las acciones que se deben de desarrollar antes de escribir código, mientras se escribe y una vez terminado.
Modelado
Principios que dan fundamento a los métodos y notación que se utiliza para crear representaciones del software. Su principal finalidad es asegurarse que se comprenda que se va a hacer y proporcionar una guía técnica a quienes implementarán el proyecto.
Planeacion
Principios que permiten elaborar el mejor mapa del proceso hacia un sistema o producto terminado.
Comunicaion
Principios que se centran en la necesidad de mantener una buena relación y conversaciones productivas entre el desarrollador y el cliente

El proceso del software

Uso y mantenimiento
Esta es una de las fases más importantes del ciclo de vida de desarrollo del software. Puesto que el software ni se rompe ni se desgasta con el uso, su mantenimiento incluye tres puntos diferenciados: Eliminar los defectos detectados durante su vida útil (mantenimiento correctivo). Adaptarlo a nuevas necesidades (mantenimiento adaptativo). Añadirle nuevas funcionalidades (mantenimiento perfectivo).
Instalación o despliegue
La siguiente fase es poner el software en funcionamiento, por lo que hay que planificar el entorno teniendo en cuenta las dependencias existentes entre los diferentes componentes del mismo. Es posible que haya componentes que funcionen correctamente por separado, pero que al combinarlos provoquen problemas. Por ello, hay que usar combinaciones conocidas que no causen problemas de compatibilidad.
Pruebas
Como errar es humano, la fase de pruebas del ciclo de vida del software busca detectar los fallos cometidos en las etapas anteriores para corregirlos. Por supuesto, lo ideal es hacerlo antes de que el usuario final se los encuentre. Se dice que una prueba es un éxito si se detecta algún error.
Implementación
Forces from buyers

Looking at the answers above, how do you rate the bargaining power of buyers in this market?

Customers can control price negotiations by having the freedom to take important business elsewherePrice negotiations do happen but are balancedCustomers cannot negotiate terms
También hay que tener en cuenta la adquisición de recursos necesarios para que el software funcione, además de desarrollar casos de prueba para comprobar el funcionamiento del mismo según se vaya programando.

Do customers make enough purchases to negotiate their pricing?

Rate their purchasing power by choosing an option below:

Customers make significant purchases and demand discountsSome discounts are expected, but we can control themPricing is not usually negotiable and customers accept our pricing
Al programar, hay que intentar que el código no sea indescifrable siguiendo distintas pautas como las siguientes:

Is it easy for customers to switch between comparable products and services?

It is easy and inexpensive for a customer to switch from one vendor to anotherCustomers can switch if they are motivated toCustomers are generally locked into a product or service, and it is costly to switch

Evitar bloques de control no estructurados. Identificar correctamente las variables y su alcance. Elegir algoritmos y estructuras de datos adecuadas para el problema. Mantener la lógica de la aplicación lo más sencilla posible. Documentar y comentar adecuadamente el código de los programas. Facilitar la interpretación visual del código utilizando reglas de formato de código previamente consensuadas en el equipo de desarrollo.

En esta fase hay que elegir las herramientas adecuadas, un entorno de desarrollo que facilite el trabajo y un lenguaje de programación apropiado para el tipo de software a construir. Esta elección dependerá tanto de las decisiones de diseño tomadas como del entorno en el que el software deba funcionar.
Diseño
En esta fase se estudian posibles opciones de implementación para el software que hay que construir, así como decidir la estructura general del mismo. El diseño es una etapa compleja y su proceso debe realizarse de manera iterativa. Es posible que la solución inicial no sea la más adecuada, por lo que en tal caso hay que refinarla. No obstante, hay catálogos de patrones de diseño muy útiles que recogen errores que otros han cometido para no caer en la misma trampa.
Análisis
Por supuesto, hay que averiguar qué es exactamente lo que tiene que hacer el software. Por eso, la etapa de análisis en el ciclo de vida del software corresponde al proceso a través del cual se intenta descubrir qué es lo que realmente se necesita y se llega a una comprensión adecuada de los requerimientos del sistema (las características que el sistema debe poseer).
Planificación
Antes de empezar un proyecto de desarrollo de un sistema de información, es necesario hacer ciertas tareas que influirán decisivamente en el éxito del mismo. Dichas tareas son conocidas como el fuzzy front-end del proyecto, puesto que no están sujetas a plazos. Algunas de las tareas de esta fase incluyen actividades como la determinación del ámbito del proyecto, la realización de un estudio de viabilidad, el análisis de los riesgos asociados, la estimación del coste del proyecto, su planificación temporal y la asignación de recursos a las diferentes etapas del proyecto.

Importancia de la ingeniería de software

diseñar la lógica y las relaciones entre todas las partes de nuestro sistema
Una vez que tengamos la arquitectura diseñada, debemos profundizar más y diseñar la lógica y las relaciones entre todas las partes de nuestro sistema, para finalmente comenzar a codificar. Cuando es programa esté acabado debemos probarlo para comprobar que cumple todos los requisitos y funciona como es previsto.
mantenimiento
Aunque parezca que aquí acaba todo, existe otra pase que se prolonga durante toda la vida del programa que es el mantenimiento. Añadir nueva funcionalidad o modificar aspectos del programa son tareas que se realizan en la fase de mantenimiento. Las actualizaciones de Windows son un ejemplo del mantenimiento. Si la gente de Microsoft no realizará mantenimiento a Windows, nuestro sistema operativo se quedaría desfasado y sería menos funcional y menos seguro que otros.
diseñar la arquitectura
No será igual un programa que tenga que usar datos de una base de datos a uno que todos los datos que necesita están en el propio ordenador donde se instala. Es muy importante en esta fase diseñar una arquitectura capaz de adaptarse a la tecnología que se esté usando actualmente así como a nuevas tecnologías. Por ejemplo si estamos usando un fichero XML para recoger los datos, es importante que nuestra arquitectura nos permita cambiar el XML por una base de datos.
capturar y analizar los requisitos
Puede que sea un cliente el que nos haya mandado construir un programa. Pues entonces tendremos que cumplir sus condiciones y expectativas. Sin embargo, si lo que pretendemos es desarrollar un programa para el público en general, tendremos que tener en cuenta que aspectos son necesarios para que la gente use nuestro programa en vez de otro.

How essential is your product or service to customers? Are there many alternatives to buying from you?

Assess the range of alternatives:

Our product or service is optional, and/or it is easy for customers to find substitutesCustomers prefer to buy, but can find substitutes if motivatedOur product or service is essential, and/or there are very few acceptable substitutes
Fases de la ingeniería del software
Para finalizar esta introducción a la ingeniería del software, explicaré un poco por encima las fases principales para la construcción de software medianamente complejo (más adelante explicaré todos estos conceptos).
¿Por qué es importante la ingeniería del software?
seguro que mucha gente a la que le gusta programar se preguntará y ¿por qué tengo que perder el tiempo haciendo diagramas de clases y diseñando la arquitectura del sistema (ya veremos todo lo que es eso en otros artículos) si yo programo de lujo y mis programas funcionan perfectamente? Seguro que estaremos de acuerdo en que cualquier persona con tiempo y que le guste programar puede hacer software que funcione y sin haber estudiado nada.

Conceptos básicos de ingeniería de software

Type in the name of an industry or sector in which your organisation competes.

This mind map will help you to analyse your position in that industry.


Productos de Software
Productos hechos a medida. Sistemas que son desarrollados bajo pedido a un desarrollador específico.
Productos genéricos. Productos que son producidos por una organización para ser vendidos al mercado.
La mayor parte del gasto del software es en productos genéricos, pero hay más esfuerzo en el desarrollo de los sistemas hechos a medida.

Looking at the positive and negative forces in each market, type in a strategic action based on the importance and volume of the market, and the strength of negative forces.

Strategies may include:

Que es el Software ?
Como se desarrolla el software ?

Looking at the answers above, how do you rate the bargaining power of suppliers of materials and services used in this market?

There are only a few suppliers and we are locked inWe have limited freedom for negotiation with our suppliersWe can control price negotiations with our suppliers
Que contiene el software

Do you make big enough purchases to be able to negotiate pricing with your suppliers in this market?

Rate your purchasing power:

Our purchase volumes are not really important to our suppliersWe get the same discounts as everyone elseOur purchases are big enough to make suppliers deal with us personally
Cual es el costo del software.
Como saber si un software tiene calidad.
Que tipos de software hay ?
Sistemas o Productos de software grandes y complejos.

Is it easy for you to switch between suppliers for the materials and services you purchase?

Rate your mobility by choosing an option below:

We are locked into single suppliers and it would be expensive to change themWe could switch if we needed toIt is easy for us to use materials and services from multiple suppliers
Programas de cómputo y su documentacion asociada

How many choices do you have in terms of suppliers? Are there many suppliers for the materials you use?

Assess your range of choice by choosing an option below:

We have trouble finding alternative sources of supply for the materials and services we needThere are a few suppliers for the materials and services we buyWe can purchase similar materials and services from multiple suppliers
Ingenieria de Sistemas e Ingenieria de Software
La Ingeniería de Sistemas concierne a todos los aspectos del desarrollo de sistemas basados en cómputo, que incluyen hardware, software y el proceso de Ingeniería. La Ingeniería de Software es solo parte de este proceso.

Are there multiple sources of comparable products and services?

Assess the customer's freedom of choice by choosing an option below:

There are many vendors with very similar products or servicesThere are only a few vendors of comparable products and servicesMost of the products and services have special features
Diferencia entre Ingenieria de Software y Computacion
La Ingeniería de Software todavía esta lejos de ser una ciencia como los son la Química, la Ingeniería Civil o la Electrónica.

Looking at the answers above, how do you rate the position of new entrants in the market?

It is both easy and attractive for new entrants to join this marketNew entrants could join if they perceive enough advantagesIt is both difficult and unattractive for new entrants to join
La Ingeniería de software concierne solo al desarrollo de sistemas o productos de software

Rate the probability by clicking an icon below:

Probable: it is a profitable market and demand keeps prices highPossible: it is a growing market and could be profitable in the futureUnlikely: profits are low, and the market is already saturated, or even shrinking
La computación concierne a la teoría y fundamentos de cualquier sistema de computo, sea de hardware o de software.

If a new organization wanted to join this industry, how big are the barriers to entry?

Assess the barriers by choosing an option below:

Few barriers, making it easy for others to walk inAnother organization could join with some dedicationSerious investment is needed to join this industry
Que es la Ingeniería de Software
Los Ingenieros de Software adoptan un enfoque sistematico para llevar a cabo su trabajo y utilizan las herramientas y tecnicas necesarias para resolver el problema planteado, de acuerdo a las restricciones de desarrollo y recursos disponibles.

Rate your competitiveness by choosing an option below:

We often lose to competitorsWe win sometimes and lose sometimesWe win most of the time
La Ingeniería de Software es una diciplina de la Ingeniería que concierne a todos los aspectos de la producción de software

Assess the amount of competition by choosing one of the options below:

Lots of competitors, making it hard to get noticedA few competitorsAlmost no competitors and little choice