A Engenharia de Software mudou muito nos últimos anos, especialmente com a disseminação dos métodos ágeis, mas também com novos métodos, práticas e tecnologias. Não é possível ignorar essas mudanças, mas também não se deve desprezar o conhecimento clássico de Engenharia de Software. Livros clássicos como o do Sommerville e do Pressman têm uma dificuldade em se modernizar – o que é normal em livros cuja primeira edição é do início da década de 1980 (!). Algo que pessoalmente me incomoda nos livros clássicos é que eles mostram pouco código. Por mais que Engenharia de Software não seja só programação, ela envolve muita programação – ainda mais quando se considera uma perspectiva ágil.
O livro “Engenharia de Software Moderna” do prof. Marco Tulio Valente (da UFMG) faz muito bem essa ponte entre modernidade e conceitos clássicos. É um livro bem escrito, fácil de ler e que cobre os principais conceitos de Engenharia de Software com uma visão ágil e próxima ao código. Mas, além disso, apresenta os conceitos de forma bem fundamentada, considerando o conhecimento tradicional da área.
Essa relação entre o clássico e o moderno fica evidente na preocupação do livro com o design. Há um capítulo que apresenta UML de uma forma mínima necessária suficiente, não ignorando a utilidade de modelos para a Engenharia de Software (a minha crítica é só a falta de rigor na notação). Depois são dois capítulos tratando de princípios de projeto (SOLID e alguns outros) e padrões de projeto, recheados de código.
Um outro exemplo dessa relação entre o clássico e o moderno é no capítulo de requisitos que enfatiza histórias do usuário, mas também fala de casos de uso. Como um pesquisador da área de requisitos, senti falta de uma visão mais ágil para casos de uso (e, claro, tenho alguns outros comentários específicos), mas de uma forma geral o texto é bem fundamentado, direto e objetivo – como todo o livro.
Além desses capítulos, existem também capítulos sobre processo de software, arquitetura, testes, refatoração, DevOps e um apêndice sobre Git. Um capítulo que me chamou bastante a atenção foi o sobre testes, que é bem técnico e muito bem fundamentado. Ou seja, é dada a atenção que essa área atualmente possui. Em contraposição, o capítulo sobre refatoração pareceu exagerado (não precisava de um capítulo inteiro). Mas é de se esperar essa ênfase, considerando a área de pesquisa do autor. Um outro destaque positivo, além do capítulo sobre testes, é o sobre DevOps, um assunto bastante atual e que está bem explicado.
Como conclusão, o livro é direto e objetivo, escrito por um pesquisador de ponta na área de Engenharia de Software no Brasil. É uma boa recomendação para quem quer aprender Engenharia de Software – e também para quem, como eu, ministra disciplinas nessa área. O melhor do livro é que ele está disponível gratuitamente, neste site. Também é possível comprar uma versão impressa (que foi a que eu li), muito bem editada e com 395 páginas.