Conceito
Engenharia
Engenharia em seu contesto geral, é a arte das construções, tendo como base o conhecimento científico e empírico. Onde temos o conhecimento cientifico, como o estudo,onde determina-se constante e métodos de trabalho, e o conhecimento empírico que está relacionado à prática.
Software
Software é uma sequência de comandos/instruções a serem interpretadas, com o objetivo de executar determinadas tarefas. São os programas de computadores.
Engenharia de Software
Engenharia de software é uma abordagem sistemática e disciplinada para o desenvolvimento de software (PRESSMAN, 2006).
Como a engenharia é a arte das construções, a engenharia de software é a arte da construção de um software. Mais do que isso, ela é uma tecnologia que visa construir um software de maneira coerente e precisa.
Engenharia de software é uma tecnologia de camadas, onde cada camada, representa uma etapa que deve ser executado da melhor forma possível, ela tem
como base a camada de processos. Ilustrado na imagem 1.

O processo de engenharia de software, é quem mantém as camadas de tecnologia consistente, e possibilita o desenvolvimento racional de um software que esteja dentro do prazo. Nessa camada há a definição de uma metodologia que deve ser estabelecida para que haja a entrega efetiva do software. O processo constitui a base para se ter o controle e o gerenciamento de projetos, nisso há o estabelecimento do ambiente que são aplicados os métodos técnicos, é feita a documentação, para definir marcos, para que a qualidade seja garantida, e as mudanças futuras ocorram de forma correta.
Os Métodos, fornecem informações técnicas para o desenvolvimento do software. Está envolvido nesses métodos, uma grande variedade de tarefas, como: a analise de requisitos, a comunicação, a modelagem de projeto, construção de programa, teste e suporte. Essa camada se baseia em um conjunto de princípios básicos que governam cada área da tecnologia, que inclui atividades de modelagem e algumas outras técnicas descritivas.
As ferramentas, proporcionam um apoio automatizado (ou semiautomatizado), para as camadas de métodos e de processos. Quando há a integração das ferramentas, de tal forma que, as informações geradas por uma seja capaz de ser utilizada por outra, é formado um sistema para o suporte ao desenvolvimento de software, isso se denomina Engenharia de software com o auxilio do computador (CASE - Comput er-Aided Software Engineering).
Aplicações praticas
De modo geral, essas três bases da engenharia de software visam construir um software de maneira coerente e precisa, por isso é crucial que cada camada, seja realizada da melhor forma possível, para que se obtenha o resultado esperado.
Na pratica, existem várias metodologias, que visam uma boa pratica da engenharia de software. Como por exemplo:
Modelo cascata (Ou Waterfall)
No modelo cascata, as fases de desenvolvimento são definidas claramente, quando todas as fases são definidas, inicia se o desenvolvimento, quando há o termino da primeira fase, inicia se a segunda, e assim sucessivamente, porém há um detalhe, como em uma cascata, quando a água passa por ela, é impossível fazer com que ela volte, correto!?
Por isso, nesse modelo, a declaração das fases devem ser perfeitas, para que não haja erros no futuro.Por exemplo, ao desenvolver um produto web, você precisa
especificar absolutamente todas as funcionalidades, pelo fato de que o desenvolvimento de software nesse modelo é visto com começo, meio e fim que acontece em uma sequencia: definição de requisitos, detalhamento e especificação do software, codificação, teste e produção.
Desenvolvimento iterativo de software
Tal desenvolvimento se opõe ao modelo de cascata, pois o ciclo de desenvolvimento é menor e ele se repete varias vezes, usando um relatório da fase anterior para melhorar a próxima. Como mostra a imagem a seguir.

Nesse modelo as fases são definidas com menos detalhes do que no modelo cascata, porém o mesmo permite alterações no projeto, por exemplo, ao desenvolver um produto web, você especifica tudo o que quer, se o desenvolvedor fizer o visual, e você querer muda-lo,por um motivo ou outro, essa mudança pode ocorrer.
Considerações finais
A base da engenharia de software são os processos, as pessoas e a tecnologia. Por isso, de nada adianta termos os melhores profissionais do mundo se não possuímos boas tecnologias para uso, ou se não possuímos um processo que guie o desenvolvimento de software.
Da mesma maneira, de nada adianta possuir as tecnologias mais avançadas se as pessoas não conseguem manusea-las.
Além disso, mesmo que pareça inacreditável, de nada adianta termos a melhor tecnologia e as melhores pessoas se não existe um processo que guie as atividades dessas pessoas utilizando tais tecnologias.
Referencias
http://www.guiadastartup.com.br/boas-praticas-de-engenharia-de-software/