Crítica: Livro “Engenharia de Software Moderna”

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.

Músicas de PCS3110 – Algoritmos e Estruturas de Dados

Ao final de cada aula de PCS3110 – Algoritmos e Estruturas de Dados para a Engenharia Elétrica os professores colocavam uma música de encerramento. Nas aulas em que fui responsável, escolhi algumas músicas da minha playlist relacionadas aos conceitos da aula (muitas vezes envolvendo algum trocadilho). Seguem as aulas, as músicas e as explicações até para eu não esquecer! (Alguém poderia dizer que se a piada fosse tão boa, não precisaria de explicação, mas era uma questão de contexto).

Continue reading

Plugin do VS Code para reconhecer a linguagem de PCS3110

Por mais que eu goste de ensinar escrevendo código na lousa, isso não é prático no ensino a distância. Então criei um plugin para o VS Code que reconhece as palavras reservadas definidas no pseudocódigo que usamos em PCS3110 – Algoritmos e Estruturas de Dados para a Engenharia Elétrica. Essa linguagem é baseada na usada pelo livro do Cormen, Leiserson, Rivest e Stein (2009).

Continue reading

Algoritmos e Estruturas de dados de PCS3110 em Python

Montei um repositório ( https://github.com/levysiqueira/py-pcs3110) com a implementação em Python de vários dos algoritmos ensinados em PCS3110 – Algoritmos e Estruturas de Dados para a Engenharia Elétrica, na Escola Politécnica da USP.

Os algoritmos usados em PCS3110 foram adaptados dos livros do Cormen, Leiserson, Rivest e Stein (2011) e do Feofiloff (2009) pelos professores de PCS3110: Anarosa Alves Franco Brandão, Anna Helena Reali Costa, Marcos Antonio Simplício Júnior, Romero Tori e por mim. A implementação em Python foi feita por mim.

Gerência e Qualidade de Software na Univesp

Em 2018 fui responsável por uma disciplina na Univesp, que é uma universidade virtual pública do estado de São Paulo. A disciplina em questão foi Gerência e Qualidade de Software, assunto que já ministrei durante alguns anos uma disciplina de pós-graduação.

O conteúdo do curso inclui vídeo-aulas, as quais estão disponíveis no Youtube. Em duas aulas chamei o pessoal da Codus Tecnologia, através do Vinícius Oyama, para discutir V&V na prática e entrevistar alguns profissionais sobre qualidade de código.

Continue reading

Crítica: Livro “Clean Architecture”

O desenvolvimento de software já teve vários assuntos da moda. Lembro da moda de design patterns: as pessoas colocavam com orgulho no currículo o conhecimento de patterns. Agora design patterns estão fora de moda; aparentemente as pessoas estão se preocupando mais com frameworks / tecnologias específicas e aspectos gerenciais do que questões de design.

Por mais que eu não concorde com essa priorização, a moda faz sentido. Modas desse tipo não são uma mera questão de preferência pessoal ou a visão de alguma celebridade da área. O avanço das tecnologias é tão grande que frameworks resolvem grande parte dos problemas com simplicidade e, com isso, a gestão se tornou novamente o gargalo.

O interessante das modas é que elas são cíclicas… Sim, já houve uma moda sobre aspectos gerenciais. Isso não quer dizer que voltaremos a falar de design patterns; apesar de cíclica, há uma evolução. Então quando a moda de design voltar – e ela vai voltar -, outras questões de design serão importantes.

Todo esse preâmbulo é para falar do livro Clean Architecture, do Robert C. Martin. Como todo livro do “tio” Bob, ele é bem escrito e tem uma leitura fácil e recheada de relatos de experiência interessantes e alguns insights. Continue reading

Template em Word para Dissertações e Teses da EPUSP

Disponibilizei no GitHub um template em MS Word para monografias, dissertações e teses da Escola Politécnica da Universidade de São Paulo. O template atual disponível pela divisão de bibliotecas não usa os recursos de estilos do Word, o que o torna desnecessariamente manual.

Esse template é baseado no que fiz para a minha tese, em 2010. Fiz algumas atualizações para considerar a 4ª edição das Diretrizes e Dissertações da EPUSP.

Já tinha disponibilizado esse documento para alguns alunos, orientados e colegas. Agora torno-o público.

Usando este template, recursos como o de equação (a partir do Word 2007) e uma ferramenta como o Zotero você pode lidar com a gestão e formato das referências. Sem entrar na discussão LaTex X Word, mas já entrando, você só precisa usar LaTex se quiser…

Crítica: Livro “Princípios de Análise e Projeto de Sistemas com UML”

Capa - Princípios de Análise e Projeto de Sistemas com UML

A visão de que a melhor forma de se desenvolver software orientado a objetos é através da criação e do refinamento de modelos UML perdeu sua força depois da aceitação e disseminação dos métodos ágeis em meados da década de 2000 – especialmente por causa do Extreme Programming (XP). Com isso, a UML perdeu bastante da sua importância, sendo vista por alguns mais radicais apenas como uma notação para permitir a discussão (lembrando da “UML como rascunho”, apresentado por Fowler no seu livro UML Distilled).

Mas, claro, a UML e processos similares ao Processo Unificado (UP) ainda são aplicados em diversos contextos – métodos ágeis não são para todos os projetos. Pensando nesses contextos, o livro Princípio de Análise e Projeto de Sistemas com UML, do Eduardo Bezerra, apresenta a UML sugerindo o seu uso ao seguir um processo similar ao UP. O livro parece ser baseado no processo descrito no livro do Larman (Applying UML and Patterns), mas acrescenta algumas técnicas e heurísticas bem interessantes (questões de coesão e acoplamento, técnicas de análise OO, persistência, etc.).

Continue reading

Resultado do Painel na Campus Party 2014

Participei hoje de um painel na Campus Party 2014 sobre o uso de métodos ágeis em projetos de software livre. Além disso, também se discutiu o emprego de métodos ágeis em startups e o uso de métodos ágeis em grandes empresas. Participaram do painel José Honorato Ferreira Nunes (mediador), Alan Braz e Dairton Bassi.

O vídeo do painel deve ficar disponível em breve no site da Campus Party. Ao invés de reapresentar o meu ponto de vista, colocarei alguns artigos sobre esses temas para quem quiser se aprofundar um pouco mais sobre esses assuntos. Continue reading