¿Cuáles son los fundamentos de la ingeniería de software?

Existe la visión académica y la visión del profesional, que no siempre se alinean totalmente. En particular, la ingeniería de software no es lo mismo que la informática, aunque la informática proporciona muchos de sus fundamentos. Una versión de la visión académica se encuentra en los criterios para acreditar programas de ingeniería de software en ABET (www dot ABET dot org o haga clic en este enlace ABET). Se encuentra otra versión en el plan de estudios modelo para ingeniería de software desarrollado conjuntamente por el ACM y la IEEE Computer Society (actualmente se está actualizando, por lo que es posible que tenga que buscar en uno de sus sitios para encontrar lo último: La Comunidad para Líderes de Tecnología • Computadora IEEE Sociedad o Asociación de Maquinaria Informática.

Para la visión del profesional, vea el cuerpo de conocimiento de ingeniería de software en www dot swebok dot org (tengo que explicarlo o quora lo reemplaza automáticamente con un enlace que no transmite lo que quiero decir). O puede encontrarlo si hace clic en este enlace: índice • IEEE Computer Society.
Este es el cuerpo de conocimiento de ingeniería de software según lo definido por los profesionales de ingeniería de software. Ahora está en su tercera versión y le da una muy buena idea de lo que debe saber un ingeniero de software. Entre los fundamentos se encuentran los temas básicos de informática y matemáticas, pero hay mucho más. La ingeniería de software, tal como la practican los profesionales, es diferente de la informática o el desarrollo de software, tal como la practican las personas cuyo único antecedente son algunos cursos en los idiomas y herramientas actuales. En otras palabras, es mucho más que codificar. Su objetivo es producir software robusto y de alta calidad con el que pueda contar en una situación crítica de la vida, por lo que hay mucho énfasis en cosas como ingeniería de calidad, control de configuración, gestión de proyectos, procesos y métodos de desarrollo de software, y otros temas que puede no estar incluido en algunos programas de ciencias de la computación.

La ventaja de mirar las fuentes mencionadas anteriormente es que son producto de muchas horas de esfuerzo dedicado por parte de académicos y profesionales de todo el mundo.

Si hiciera la misma pregunta de “ingeniería eléctrica”, se le respondería “las leyes de corriente y voltaje de Kirkhhoff, más la ley de Ohm. De estas, casi todo el resto de los flujos de ingeniería eléctrica”.

Del mismo modo, si tuviera que hacer la misma pregunta sobre cualquier otro tipo de ingeniería (mecánica, química, lo que sea). Habría un puñado de principios básicos para formar las bases sobre las cuales se construye el resto.

Entonces, ¿qué hay para la ingeniería de software?
Ciertamente, existe el problema de Turing.
Probablemente hay algo fundamental que uno podría destilar de aquellos que se especializan en métodos de verificación de software … pero tendré que dejar a otros para identificar cuál sería.

Fundamental de la ingeniería de software es que el trabajo se divide en varias fases que no se superponen entre sí y, por lo tanto, el trabajo se puede dividir y se puede ahorrar tiempo. La idea es dividir el trabajo en fases como planificación, documentación, codificación y prueba.

Si estamos tratando con un pequeño proyecto, la planificación no es muy tediosa. La codificación y las pruebas reciben más énfasis. La desventaja de este modelo básico (conocido como Modelo de cascada ) es que a veces en escenarios prácticos, mientras que la codificación de algunos desafíos puede obligar a los desarrolladores a modificar el plan y la documentación y, por lo tanto, el proyecto es más propenso a errores y reprocesos

En un proyecto más grande, hacemos muchos análisis de riesgos antes de la codificación y se produce un prototipo al final de la fase de análisis de riesgos. El software es
producido en la fase de ingeniería, junto con las pruebas al final de la fase. Este modelo conocido popularmente como modelo espiral es muy costoso y requiere experiencia altamente específica y, por lo tanto, se utiliza en grandes proyectos.
Del mismo modo, hay pocos modelos más, como el modelo de iteración o el modelo en forma de V que se utilizan según el tamaño y el presupuesto del proyecto.

Una pregunta corta, sin duda, pero que está tan llena de
complejidad. ¿Están preguntando sobre habilidades? ¿Ingenieria? Cursos?
¿Conceptos que son tan inmutables como las leyes? Cosas que nadie puede discutir
¿en contra?

Difícil de decir.

Mi inclinación es más natural hacia lo filosófico que lo puramente
pragmático en estas discusiones, advertencia justa.

*******

La forma en que aborda un problema u oportunidad determina cómo la solución
terminará en.

Uno de los aspectos clave de la ingeniería de software es la capacidad de
investigar con curiosidad la forma y el espacio del problema, para
entender sus partes y ser capaz de ensamblarlas en algo
útil y valioso

Esto se aplica * no solo * al software real, sino a todo el
sistema de concepción, invención, implementación, despliegue y
mantenimiento. No solo analiza cómo va esta característica en particular
ser desglosado en objetos, funciones, procedimientos o
lo que tienes, pero cómo se van a verificar esas partes,
validado y ensamblado, pero cómo las personas que trabajan en estos
Varias piezas y ensamblajes van a trabajar juntos.

Entonces, uno de los fundamentos de la Ingeniería del Software es:

** Poder ver el todo, así como las partes, y cómo
separarse y volver a estar juntos. **

*******

Uno necesita aprender cómo hacer esto, por supuesto, ya que la mayoría de las personas no
Nacido con esta habilidad. Algunas personas lo adquieren antes que otros,
algunos nunca pueden adquirirlo, pero es algo que se puede enseñar y
aprendido.

¿Pero cómo?

La Ingeniería Civil es posiblemente el primer tipo de ingeniería humana.
desarrollado. Aprendiendo a hacer puentes que atraviesen ríos, abismos y
el comercio generalmente facilitado ha sido parte de la civilización humana para
milenios

¿Pero cómo empezó? Principalmente, porque los puentes se cayeron. Lanzando un
Un par de registros a través de la secuencia finalmente fue lo suficientemente bueno, pero si
querías que algo durara más que la próxima inundación, necesitabas
encontrar maneras de evitar que tales cosas se laven o se caigan y
matando gente en el proceso.

Entonces, los primeros ingenieros aprendieron a estudiar el fracaso y aprender por qué
Las cosas que construimos se rompen y se desmoronan. Un ingeniero de software debe hacer
lo mismo para entender cómo construir mejor
software. No es suficiente con * solo * estudiar el fracaso, por supuesto;
uno también necesita entender proyectos exitosos.

En esto, estudiamos mejor cuando estudiamos juntos, que es una de las razones por las que
El movimiento de código abierto ha sido un beneficio real para el software de aprendizaje
Ingenieria. Sin embargo, incluso en el desarrollo patentado, compartir código
con colegas a través de revisiones de pares, emparejamiento y estudio es muy
beneficioso.

Entonces, otro fundamento de la Ingeniería del Software es:

** Un profundo sentido de curiosidad sobre las partes internas del software y
proyectar ese trabajo y ese fracaso, y comprender lo que hace
algo bueno y lo que causará problemas futuros. **

*******

Mencioné la noción de “Leyes”, o Conceptos Fundamentales del Software
Ingenieria.

Hay algunos que se acercan a este tipo de inmutabilidad, pero ninguno con
tal firmeza como la Ley de la gravedad.

Voy a enumerar algunos de ellos, hay más que suficiente
información sobre estos por ahí, y diferentes personas tienen su
favoritos

* No te repitas
* Principio de menos asombro
* Principio de menor conocimiento
* Haz que funcione, luego hazlo bonito, luego hazlo rápido.

** Comprender los principios sobre lo que hace un buen software
arquitectura.**

*******

Cambiando un poco, ahora voy a hablar más técnicamente y
pragmáticamente, y estos serán un poco más dirigidos.

* No aprenda una sintaxis, aprenda un idioma o modismos de framwork,
prácticas, los espacios problemáticos en los que funciona mejor, aquellos en los que no

* No aprenda un solo idioma o marco. En * pragmático
Programador *, te instan a aprender un nuevo idioma cada año. los
lo que pasa es no solo aprender un idioma del mismo tipo, aprender uno
que tiene diferentes formas de resolver problemas. Si estás usando un
lenguaje imperativo como C, aprender Lisp o Smalltalk. Si tu
principalmente script en Perl, aprende Ruby y Python. Aprender nunca es
vano.

* Trabaja tanto con ejercicios (kata) como con problemas reales. Ahi esta
nada más satisfactorio que resolver uno propio
problemas, y estos son los vehículos ideales para aplicar el aprendizaje.

* Si te encuentras con alguna pieza de un proyecto que no sabes cómo
implementar, o un área en la que necesita más habilidad, explotar en un
pequeño ejemplo y practícalo hasta que lo entiendas.

Otro principio de la ingeniería de software es:

** Practica y aprende constantemente tu oficio. **

*******

Espero que a otras personas se les ocurran otros pensamientos e ideas. Mejor
De suerte.

Un ingeniero de software generalmente tendrá responsabilidades en el diseño de programas y sistemas, la optimización del rendimiento, la evaluación de la tecnología. La educación en Ciencias de la Computación o Ingeniería es importante, ya que amplía el enfoque del ingeniero, pero una amplia experiencia es esencial.

Un ingeniero de software puede tener responsabilidad en cualquier aspecto de TI.

No sé en qué perspectiva está preguntando, así que lo que sé sobre las actividades de proceso de cualquier producto de software son

Especificación, desarrollo, validación y evolución.

Estas son las actividades fundamentales del proceso de software …

More Interesting

¿Qué perspectivas laborales ofrecería una maestría en ciencias de la computación (conversión) para alguien con un título universitario en arquitectura? ¿Podrías ir directamente a una carrera en programación de juegos o desarrollo de software?

Si pudieras reiniciar tu carrera de software ahora, ¿qué cosas harías primero y principalmente?

¿Los proveedores de nube y los ISV están adoptando IDE en la nube?

¿GOTO todavía se considera dañino?

¿Debo optar por un MBA solo porque en el desarrollo de software no tienes una carrera después de 10-15 años?

¿Qué lenguajes de programación de uso general son excelentes, eficientes y agradables de escribir y usar?

¿Cuáles son los casos límite más comunes que los programadores principiantes descuidan?

Tecnología: ¿Los valores decrecientes de las acciones tecnológicas, como Linkedin o Tableau, indican que la 'burbuja tecnológica' estalla?

¿Qué software, si lo hay, se usa generalmente profesionalmente para crear otro software o juegos?

¿Cómo se administra una base de código grande en Node.js?

¿Cuáles son algunas especificaciones típicas de computadora portátil para un ingeniero de software?

¿Adoptar una metodología llamada 'Ágil' como Scrum (y tal vez contratar entrenadores) proporcionará más beneficios que el desarrollo incremental simple, con una cola priorizada dinámicamente, compilaciones frecuentes e interacción completa con el cliente? En otras palabras, ¿se ha sobrevendido todo el 'asunto ágil' cuando las prácticas adaptativas de antaño funcionan bien?

¿Cuál de las metodologías SDLC es más adecuada para un proyecto relacionado con la seguridad del hogar?

¿Dónde se usa el software de Linux?

¿Necesito un doctorado en sistemas distribuidos, aprendizaje automático, bases de datos o especialización similar para llegar a L7 + en Google / FB / Amazon y ganar 1 mill + / año?