¿Cuál es la diferencia entre diseño de software e ingeniería de software?

Varias buenas respuestas, ya, pero permítanme hacer algunas distinciones adicionales.

Y permítanme presentar esto diciendo que el “diseño” ocurre en múltiples niveles de desarrollo de sistemas y software.

Comenzando de arriba hacia abajo:

Ingeniería: hay una variedad de definiciones de diccionario, pero en general se trata de resolver un problema, generalmente terminando construyendo y desplegando algo (ya sea un puente, un sistema informático, un producto, obras hidráulicas, una planta química, lo que sea).

Ingeniería de sistemas: el panorama general, incluido el concepto de operaciones, arquitectura, integración, gestión del equipo de diseño y proceso, a menudo desglosado en:

  • Análisis de requerimientos
  • Arquitectura de sistemas: el panorama técnico general. Todas las piezas principales (p. Ej., Hardware, software, red), especificaciones funcionales para cada pieza, interfaces. Y, por lo general, diseño de nivel superior (por ejemplo, selección de tecnologías clave, enfoque y plan de prueba, procesos de diseño / construcción que se aplicarán).
  • Integración de sistemas: unir todas las piezas y hacer que las cosas funcionen como un sistema.
  • Gestión de ingeniería de sistemas: planificación, tareas, supervisión, etc.

Ingeniería de software: El proceso general de arquitectura, diseño, construcción, prueba e implementación de software. Dentro de la Ingeniería del Software, las cosas se descomponen en:

  • Arquitectura del software: el panorama general del software: concepto general del sistema (p. Ej., Centrado en la base de datos, controlado por eventos versus bucle principal), subsistemas de software principales (p. Ej., Servidores web, servidores de bases de datos, nivelación de carga), flujos de datos y control, selección de tecnología (por ejemplo, qué tipo de base de datos), módulos principales, interfaces, arquitectura de datos y bases de datos (particularmente para datos compartidos entre subsistemas).
  • Diseño de nivel superior: Agregar algunos detalles a la arquitectura. Algoritmos y heurística clave (selección y / o diseño), evaluación y selección de tecnología, diseño / documentación / estándares y procesos de prueba, especificaciones detalladas para cada módulo, quizás un enfoque de nivel superior para módulos clave.
  • Diseño de software: diseño detallado para cada pieza de software. Por ejemplo, definir todas las variables y estructuras de datos, definir cada función dentro de un módulo, algoritmos y heurística, datos y flujos de control dentro de un módulo, generalmente a nivel de pizarra, diagrama de flujo o pseudocódigo. (Piense en ello como el esbozo detallado de un capítulo de libro). Algunas personas adoptan el enfoque de “escribir la documentación primero”.
  • Codificación: Realmente escribiendo el código.
  • Documentación
  • Examen de la unidad
  • Pruebas de integración
  • Despliegue (en un sistema) o Empaque (p. Ej., De un producto, para entrega e instalación).

Ahora, no todos estos se aplican a un proyecto específico. Si uno está creando un nuevo sistema de transacciones, debe hacer todo esto. Si uno está escribiendo una herramienta de software para su implementación en computadoras portátiles con Windows, entonces no hay mucha Ingeniería de Sistemas, y uno va directamente a Ingeniería de Software (en el nivel de Sistemas, el entorno ya está especificado, y uno podría no necesitar hacer más de establecer requisitos ambientales básicos, como qué GPU se admitirán, requisitos mínimos de memoria y espacio en disco).

El diseño es solo una fase del proceso de ingeniería de software.

Diferentes equipos usarán diferentes procesos, pero en general al menos necesitará (serializado en cascada o concurrente como la mayoría de las metodologías ágiles):

– Análisis: reunir requisitos, averiguar qué software se necesita
– Diseño: especificando arquitectura y tecnologías, descubriendo cómo construir el software
– Codificación: programación del software en un lenguaje informático.
– Pruebas: verificar que el software funciona
– Documentación: preservar suficiente información para usar y mantener el software
– Operaciones: instalar el software y mantener los trenes en funcionamiento mientras lo usa

La ingeniería de software es un término antiguo.

De wikipedia: “Un ingeniero de software es una persona que aplica los principios de la ingeniería de software al diseño, desarrollo, mantenimiento, prueba y evaluación del software y los sistemas que hacen que las computadoras o cualquier cosa que contenga software funcione”.

Mientras que el diseño de software:

“El diseño de software generalmente implica la resolución de problemas y la planificación de una solución de software. Esto incluye un diseño de algoritmos y componentes de bajo nivel y un diseño de arquitectura de alto nivel “.

Por lo tanto, el diseño de software cubre la etapa inicial de diseño y planificación, sin embargo, la ingeniería de software cubre todo el ciclo de vida del proyecto.

More Interesting

¿Cómo funcionan las computadoras como lo hacen? ¿Cuándo se convierte la electricidad en lógica ejecutable y cómo?

¿Cuánto dinero, en promedio, ahorra un ingeniero en el Reino Unido en una ciudad como Cambridge?

¿Cuáles son algunas preguntas que se hacen en las entrevistas del Gerente de Ingeniería de Software?

Actualmente soy estudiante y pronto me uniré a Facebook como ingeniero de software junior. ¿Cómo debo preparar mi conocimiento para tener un buen comienzo en la empresa?

¿El desarrollo de software es realmente un trabajo sin salida después de los 35-40 años?

¿Qué computadora portátil (disponible en India) es la más adecuada para un ingeniero de software con un presupuesto de 50 mil rupias?

Si tengo el código fuente de un programa, ¿puedo compilarlo para que se ejecute en cualquier sistema?

¿Por qué UML todavía está en cursos en entornos académicos? ¿Cuál es el futuro de este lenguaje?

¿Cuáles son los conceptos básicos de la programación?

¿Cómo gestionan los programadores la migración de datos de la versión anterior de la base de datos a su nueva versión?

¿Qué es exactamente una "compilación" de software?

No conozco la programación y quiero desarrollar un software de negociación algorítmica, ¿qué debo hacer?

Tengo 34 años, estoy a punto de completar un BSc en Matemáticas Aplicadas. Hice C ++ en mi primer año. ¿Cómo puedo mejorar la programación C / C ++ para ingresar al Desarrollo de Software?

¿Cuánto debería importarme la calidad a expensas de la velocidad al crear software?

Cómo comenzar en la lucha de robots