Disciplina do curso de Engenharia de Software da PUC Minas
- 2°Sem 2024
- 1°Sem 2025
- 2°Sem 2025
- Apresentação da disciplina
- Artigos sugeridos
- Cronograma
- Laboratórios
- Projetos em Python
- Plano de Ensino
-
📘 Experimentation in Software Engineering (Springer)
Livro referência sobre experimentação na engenharia de software, cobrindo desenho, condução e análise de estudos empíricos. -
📕 Empirical Research in Software Engineering: Concepts, Analysis, and Applications (Amazon)
Livro introdutório e prático que cobre os fundamentos da pesquisa empírica em engenharia de software, com exemplos e aplicações reais. -
📙 Empirical Software Engineering - An International Journal (Springer)
Revista científica de alto impacto que publica estudos empíricos baseados em dados reais sobre engenharia de software, abordando desde estudos de caso até experimentos controlados.
-
📗 Software Engineering – Ian Sommerville
Obra clássica que aborda de forma abrangente os principais conceitos, processos e práticas da engenharia de software, amplamente utilizada em cursos e na indústria. -
📘 Engenharia de Software Moderna - Marco Tulio Valente
Livro gratuito e atualizado que trata da engenharia de software com foco em práticas modernas, como integração contínua, microserviços e DevOps, com exemplos em Java e Python. -
📚 IEEE SWEBOK – Software Engineering Body of Knowledge
- PDF - Guia oficial do IEEE que organiza e descreve o corpo de conhecimento essencial da engenharia de software, servindo como referência para profissionais, educadores e certificações.
A leitura de bons livros é uma forma sólida e aprofundada de aprender Python, desde os fundamentos até tópicos avançados como orientação a objetos, scraping, boas práticas e uso idiomático da linguagem. A lista a seguir inclui títulos para iniciantes, intermediários e profissionais que desejam escrever código mais limpo e eficaz.
- 📕 Python para Análise de Dados (Wes McKinney)
- 📘 Python Fluente - Programação Concisa e Eficaz (Luciano Ramalho)
- 📙 Pense em Python - Como um Cientista da Computação (Allen B. Downey)
- 📒 Python Essential Reference (David Beazley)
- 📕 Web Scraping com Python - Coletando Dados da Web (Ryan Mitchell)
- 📗 Guia do Mochileiro Python (Felipe Furtado)
Além dos estudos focados na linguagem Python, é fundamental explorar abordagens mais amplas e baseadas em evidências sobre o desenvolvimento de software. A engenharia de software empírica fornece métodos e estudos que ajudam a compreender e melhorar práticas, ferramentas e processos de desenvolvimento com base em dados e observações do mundo real. Os recursos abaixo são indicados para quem deseja mergulhar nessa área de pesquisa aplicada.
-
📒 Software Metrics: A Rigorous and Practical Approach (Fenton & Bieman)
Referência abrangente sobre métricas de software, incluindo fundamentos teóricos, coleta de dados, planejamento experimental e aplicações práticas na engenharia de software. -
📗 IEEE Transactions on Software Engineering
Uma das publicações mais respeitadas da área, apresentando pesquisas de ponta, incluindo estudos empíricos, modelagem, testes e práticas de desenvolvimento. -
📙 Applied Software Measurement: Global Analysis of Productivity and Quality (3rd Edition) – Capers Jones
Obra abrangente sobre métricas de software, abordando desde pontos de função até metodologias ágeis, com dados de mais de 12.000 projetos em 24 países. -
📕 Basics of Software Engineering Experimentation
Guia prático que mostra como aplicar desenho e análise de experimentos para validar suposições em engenharia de software. Não exige conhecimento profundo em matemática e usa exemplos reais e fictícios do campo. -
📘 Guide to Advanced Empirical Software Engineering
Referência avançada que explora técnicas empíricas para pesquisa e prática em engenharia de software, incluindo métodos quantitativos e qualitativos, estudos de caso e análises complexas.
-
📗 Software Engineering: A Practitioner’s Approach – Roger Pressman
Referência clássica que cobre fundamentos e práticas gerais da engenharia de software, incluindo métricas e validação, mas com abordagem limitada sobre experimentação empírica. -
📘 Evidence-Based Software Engineering and Systematic Reviews (Barbara Kitchenham, Per Runeson, et al.)
Obra fundamental sobre a aplicação de revisões sistemáticas e práticas baseadas em evidências na engenharia de software. -
📒 The Art and Science of Analyzing Software Data (Zeller, Gall, Menzies)
Livro técnico que ensina a coletar, analisar e interpretar dados extraídos de projetos de software para fundamentar decisões técnicas. -
📕 ACM Transactions on Software Engineering and Methodology (TOSEM)
Periódico acadêmico da ACM focado em métodos, ferramentas e práticas de engenharia de software, com forte ênfase em estudos empíricos e validação experimental. -
📙 Mining Software Repositories (MSR Conference)
Conferência internacional dedicada à extração e análise de dados de repositórios de software (como GitHub), com foco em descobrir padrões e gerar insights práticos. -
📓 Software Engineering at Google: Lessons Learned from Programming Over Time (O'Reilly)
Livro baseado na experiência do Google, apresentando princípios, práticas e lições aprendidas sobre engenharia de software em larga escala — com abordagem pragmática e baseada em dados. -
📔 Guidelines for performing Systematic Literature Reviews in Software Engineering - PDF (guia clássico de revisões sistemáticas em SE)
Guia seminal de Kitchenham et al. que apresenta passo a passo como planejar, conduzir e reportar revisões sistemáticas da literatura em engenharia de software.
1. 📄 Basili, V.R., & Weiss, D.M. (1984). A Methodology for Collecting Valid Software Engineering Data. IEEE Transactions on Software Engineering
➤ Este artigo apresenta uma metodologia rigorosa para coleta e análise de dados empíricos em engenharia de software, sendo um marco para experimentação controlada.
2. 📊 Kitchenham, B., et al. (2002). An Empirical Study of Maintenance and Development Estimation Accuracy. The Journal of Systems and Software.
➤ Estudo empírico que mostra boa acurácia em estimativas feitas por uma empresa, superando modelos por pontos de função.
3. 🎯 Basili, V.R., Caldiera, G., & Rombach, H.D. (1994). The Goal Question Metric Approach. Journal of Software Engineering and Knowledge Engineering.
➤ Define um framework para definição sistemática de métricas alinhadas a objetivos de negócios e engenharia.
4. 🐞 Fenton, N.E., & Neil, M. (1999). A Critique of Software Defect Prediction Models. IEEE Transactions on Software Engineering.
➤ Análise crítica dos modelos preditivos de defeitos, ressaltando desafios na validação empírica.
5. 🧪 Tichy, W.F. (1998). Should Computer Scientists Experiment More?. IEEE Computer.
➤ Discussão histórica e crítica sobre a importância da experimentação rigorosa em ciência da computação e engenharia de software.
6. 🧾 Runeson, P., & Höst, M. (2009). Guidelines for conducting and reporting case study research in software engineering. Empirical Software Engineering
➤ Artigo fundamental para quem deseja conduzir estudos de caso em engenharia de software com rigor científico e validade externa.
7. 🔄 Dyba, T., & Dingsoyr, T. (2008). Empirical studies of agile software development: A systematic review. Information and Software Technology.
➤ Revisão sistemática que analisa evidências empíricas sobre métodos ágeis e seu impacto na produtividade, qualidade e satisfação da equipe.
8. 📐 Briand, L.C., Morasca, S., & Basili, V.R. (2002). An operational process for goal-driven definition of measures. IEEE Transactions on Software Engineering.
Proposta de um processo sistemático para definir métricas a partir de objetivos organizacionais e necessidades específicas de análise.
9. 📘 Zelkowitz, M.V., & Wallace, D.R. (1998). Experimental models for validating technology. Computer.
➤ Apresenta 12 modelos experimentais aplicáveis à engenharia de software para validar novas tecnologias, discutindo como diferentes abordagens afetam a confiabilidade dos resultados empíricos.
10. 📄 Kitchenham, B., et al. (2004). Evidence-Based Software Engineering. Proceedings of the 26th International Conference on Software Engineering.
➤ Apresenta os fundamentos da engenharia de software baseada em evidências, discutindo benefícios, viés em experimentos e limites de generalização.
11. 🧪 Sjøberg, D. I. K., Hannay, J. E., Hansen, O., et al. (2005). A Survey of Controlled Experiments in Software Engineering. IEEE Transactions on Software Engineering.
➤ Estudo abrangente que analisa mais de 100 experimentos controlados, apontando tendências, deficiências metodológicas e oportunidades para pesquisa empírica mais robusta.
12. 📄 Zazworka, N., et al. (2013). Comparing Four Approaches for Technical Debt Identification. Software Quality Journal, pp. 1-24.
➤ Compara quatro técnicas para identificar dívida técnica no código-fonte, mostrando pouca sobreposição entre elas e destacando a relação entre violações de modularidade e maior incidência de defeitos e mudanças.
13. 🧠 Ko, A. J., DeLine, R., & Venolia, G. (2007). Information Needs in Collocated Software Development Teams. Proceedings of the 29th International Conference on Software Engineering (ICSE).
➤ Clássico que investiga as necessidades de informação em equipes de desenvolvimento de software que trabalham fisicamente próximas, ajudando a compreender fluxos de comunicação e colaboração.
14. 📈 Arcuri, A., & Briand, L. (2011). A Practical Guide for Using Statistical Tests to Assess Randomized Algorithms in Software Engineering. Proceedings of the 33rd International Conference on Software Engineering (ICSE).
➤ Guia prático sobre como aplicar testes estatísticos corretamente na comparação de algoritmos randomizados, com foco em engenharia de software.
15. 🧮 Chidamber, S. R., & Kemerer, C. F. (1994). A Metrics Suite for Object Oriented Design. IEEE Transactions on Software Engineering.
➤ Artigo seminal que propôs o conjunto de métricas CK (WMC, DIT, NOC, CBO, RFC e LCOM), amplamente utilizadas na avaliação da qualidade de projetos orientados a objetos.
16. 🧼 Marinescu, R. (2004). Detection Strategies: Metrics-Based Rules for Detecting Design Flaws. Proceedings of the 20th IEEE International Conference on Software Maintenance.
➤ Propõe o uso de métricas orientadas a objetos para formular regras que detectam automaticamente code smells arquiteturais e de design em sistemas Java.
17. 📚 Zakeri-Nasrabadi, M., Parsa, S., Esmaili, E., & Palomba, F. (2023). A Systematic Literature Review on the Code Smells Datasets and Validation Mechanisms. ACM Computing Surveys, 55(13s).
➤ Revisão sistemática de 45 conjuntos de dados utilizados para validar ferramentas de detecção de code smells. Os autores analisam propriedades como tamanho, tipos de smells representados, balanceamento de amostras e suporte a severidade. O estudo mostra que a maioria dos datasets cobre apenas três tipos (God Class, Long Method e Feature Envy), com vários smells do catálogo de Fowler e Beck ainda não representados.
18. 🕵️ Tufano, M., Palomba, F., Bavota, G., De Lucia, A., Penta, M. D., & Oliveto, R. (2015). When and Why Your Code Starts to Smell Bad. Proceedings of the 37th IEEE/ACM International Conference on Software Engineering (ICSE).
➤ Investiga a origem dos code smells em repositórios Java, revelando que muitos surgem logo na introdução do código e não como resultado de manutenção ou degradação gradual.
19. 🧭 Palomba, F., Bavota, G., Di Penta, M., Fasano, F., Oliveto, R., & De Lucia, A. (2017). On the Diffuseness and the Impact on Maintainability of Code Smells: A Large Scale Empirical Investigation. Empirical Software Engineering.
➤ Estudo empírico com 395 versões de 30 projetos open source, analisando 13 tipos de code smells. Conclui que smells como Complex Class são amplamente difundidos e aumentam a propensão a mudanças e defeitos no código.
20. 🔍 Agnihotri, M., & Chug, A. (2020). A Systematic Literature Survey of Software Metrics, Code Smells and Refactoring Techniques. Journal of Information Processing Systems Vol. 16, No. 4, pp. 915-934.
➤ Revisão de 68 estudos sobre code smells, técnicas de refatoração e seu impacto em métricas como acoplamento e complexidade. Os smells mais abordados foram long method, feature envy e data class, sendo o extract class a técnica de refatoração mais aplicada.
21. 👃 Virgínio, T. et al. (2021). On the test smells detection: an empirical study on the JNose Test accuracy. Journal of Software Engineering Research and Development.
➤ Estudo que avalia a acurácia do JNose na detecção de test smells em código Java. Útil para entender limitações e implicações da qualidade dos testes automatizados.
22. 🔬 Subramanyam, R., & Krishnan, M. S. (2003). Empirical Analysis of CK Metrics for Object-Oriented Design Complexity: Implications for Software Defects. IEEE Transactions on Software Engineering, 29(4), 297–310.
➤ Estudo empírico que investiga a relação entre as métricas CK (Chidamber & Kemerer) de design orientado a objetos e a incidência de defeitos em software. Os resultados indicam que métricas como CBO e WMC têm forte correlação com defeitos, sugerindo seu valor preditivo em qualidade de software.
23. 📄 Destefanis, G., Counsell, S., Concas, G., & Tonelli, R. (2014). Software Metrics in Agile Software: An Empirical Study. Agile Processes in Software Engineering and Extreme Programming (XP 2014), pp. 157–170.
➤ Análise empírica que mostra que métricas de software (como LOC e métricas CK) têm distribuições semelhantes em sistemas ágeis e tradicionais, sugerindo que a metodologia usada não afeta significativamente a estrutura do código.
24. 📈 Kurmangali, A., Rana, M. E., & Ab Rahman, W. N. W. (2022). Impact of Abstract Factory and Decorator Design Patterns on Software Maintainability: Empirical Evaluation using CK Metrics. 2022 International Conference on Decision Aid Sciences and Applications (DASA), 23–25 March.
➤ Estudo empírico que avalia o impacto dos padrões Abstract Factory e Decorator na manutenibilidade de software, usando métricas CK. Os resultados mostram melhoria em atributos de qualidade após a aplicação dos padrões, reforçando seu valor em projetos orientados a objetos.
25. 🤖 Recupito, G., Giordano, G., Ferrucci, F., Di Nucci, D., & Palomba, F. (2025). When Code Smells Meet ML: On the Lifecycle of ML-specific Code Smells in ML-enabled Systems. Empirical Software Engineering: Volume 30, article number 139.
➤ Estudo que investiga code smells específicos de sistemas baseados em Machine Learning. Analisa sua prevalência, evolução e remoção em mais de 400 mil commits de 337 projetos reais, usando a ferramenta CodeSmile para detecção automatizada.
26. 🧠 De Martino, V., Castaño, J., Palomba, F., Franch, X., & Martínez-Fernández, S. (2025). A Framework for Using LLMs for Repository Mining Studies in Empirical Software Engineering. 2025 IEEE/ACM International Workshop on Methodological Issues with Empirical Studies in Software Engineering (WSESE).
➤ Propõe o framework PRIMES para apoiar o uso de LLMs em estudos de mineração de repositórios. O foco está na criação e refinamento de prompts, controle de resultados e reprodutibilidade, com lições práticas de dois estudos empíricos.
27. 🗂️ Alomari, N., Alazba, A., Aljamaan, H., & Alshayeb, M. (2025). SmellyCode++: Multi-Label Dataset for Code Smell Detection. Sci Data 12, 1207 (2025).
➤ Apresenta um dataset multi-label com mais de 107 mil amostras para detecção de code smells em Java, incluindo God Class, Data Class, Feature Envy e Long Method. O dataset integra métricas numéricas e texto, melhorando a realismo na detecção e suporte para treinamento de LLMs.
28. 🐍 Boloori, A., & Sharma, T. (2025). DPy: Code Smells Detection Tool for Python. Proceedings of the 2025 IEEE/ACM 22nd International Conference on Mining Software Repositories (MSR).
➤ Apresenta o DPy, ferramenta para detecção de code smells em Python, suportando 8 design smells e 11 implementation smells, além de métricas de qualidade. Disponibiliza pacote de replicação completo para validação e uso.
29. 🧱 Tamanna, M., Chandrani, Y., Burrows, M., Wroblewski, B., Williams, L., & Wermke, D. (2025). Build It Clean: Large-Scale Detection of Code Smells in Build Scripts. arXiv preprint arXiv:2506.17948.
➤ Estudo sobre code smells em scripts de build (Maven, Gradle, CMake e Makefiles), com análise de 5882 scripts de 4877 repositórios. A ferramenta Sniffer identificou 13 tipos de smells, somando 10.895 ocorrências. Oferece recomendações para melhorar a manutenção e confiabilidade dos scripts.
30. 🔍 Balla, S., Degueule, T., Robbes, R., Falleri, J.-R., & Zacchiroli, S. (2025). Automatic Classification of Software Repositories: a Systematic Mapping Study. International Conference on Evaluation and Assessment in Software Engineering (EASE 2025), Jun 2025, Istanbul, Turkey.
➤ Revisão sistemática de 43 estudos (2002–2023) sobre classificação automática de repositórios de software usando aprendizado de máquina. Analisa objetivos, entradas, saídas, treinamentos e avaliações dos estudos.
IDE (Ambiente de Desenvolvimento Integrado) e editores especializados ajudam a escrever, depurar e manter código com mais eficiência. Ferramentas como PyCharm, VS Code e Python Tutor oferecem recursos como autocompletar, depuração visual, linting, integração com Git e visualização de execução passo a passo.
- 💡 PyCharm - IDE da JetBrains
- 🧩 Visual Studio Code - Editor leve e extensível da Microsoft
- 🔍 Python Tutor - Visualizador de Código Python
Ao se cadastrar no GitHub Student Developer Pack, você garante acesso gratuito à versão profissional das ferramentas da JetBrains, como o PyCharm Professional 🧠💻. Essa é uma excelente oportunidade para utilizar recursos avançados de desenvolvimento, como depuração visual, análise de código, suporte a frameworks e muito mais — tudo sem custo para estudantes! 🚀
1️⃣ Adicione seu e-mail institucional da PUC Minas (terminado em @sga.pucminas.br
) como e-mail secundário na sua conta do GitHub em https://github.com/settings/emails
2️⃣ Acesse a caixa de entrada do e-mail e clique no link de confirmação enviado pelo GitHub.
3️⃣ Ao acessar o GitHub Student Developer Pack, permita que o navegador compartilhe sua localização atual 🌍.
4️⃣ Selecione "PUC Minas" como sua instituição, envie um print da sua carteirinha digital do app PUC Mobile ou um comprovante de matrícula recente como forma de verificação. Depois, aguarde até 2 dias úteis para que o selo GitHub Pro 🏅 seja ativado na sua conta.
5️⃣ Acesse: https://www.jetbrains.com/shop/eform/students
➡ Vá até a aba GitHub e clique em "Authorize with GitHub" 🔑.
6️⃣ Instale o PyCharm e, ao abrir o programa, vá em "Ativar licença". Escolha a opção "Log in with GitHub", faça login com sua conta GitHub (que já possui o selo GitHub Pro 🏅 e que você autorizou previamente no site da JetBrains — passo 5), e a licença Professional será ativada automaticamente 🎉.
🏁 Pronto! Agora você pode aproveitar todos os benefícios do GitHub Pro 🏅, incluindo:
- Acesso gratuito às ferramentas profissionais da JetBrains, como o PyCharm Professional 🧠💻
- GitHub Copilot com sugestões inteligentes de código (com testes gratuitos por tempo limitado) 🤖
- Repositórios privados ilimitados 🔒
- Insights avançados de contribuições, métricas e estatísticas dos seus projetos 📊
- Ferramentas de CI/CD integradas com GitHub Actions ⚙️
- Integrações com dezenas de serviços e ferramentas educacionais 🧩
Esses recursos ajudam a elevar seu aprendizado, organizar seus projetos e turbinar sua produtividade como desenvolvedor 💼🚀
🔗 Confira todos os detalhes do plano GitHub Pro para estudantes aqui:
A documentação oficial é a principal referência para aprender, consultar funcionalidades e entender o comportamento da linguagem Python e suas bibliotecas padrão. Essencial tanto para iniciantes quanto para desenvolvedores experientes que desejam usar recursos da linguagem da forma correta e atualizada.
A GitHub REST API permite acessar e manipular repositórios, issues, pull requests, commits e outros recursos do GitHub via requisições HTTP. Ideal para automações, integração de sistemas e extração de dados sobre projetos de software.
GraphQL é uma linguagem de consulta desenvolvida pelo Facebook que permite solicitar apenas os dados necessários. A API GraphQL do GitHub é uma alternativa mais flexível à REST API, ideal para otimizar a comunicação com o servidor e obter dados estruturados em uma única requisição.
Um roadmap é um guia visual que apresenta etapas, habilidades ou conhecimentos necessários para atingir um objetivo específico. Ele ajuda a organizar o aprendizado ou desenvolvimento ao longo do tempo, mostrando caminhos recomendados e prioridades.
Veja também:
Pandas é uma biblioteca poderosa de Python para análise de dados, oferecendo estruturas de dados como DataFrames e ferramentas para manipulação, limpeza, agregação e exportação de dados.
- Documentação Oficial do Pandas
- Pacote Pandas no PyPI
- Tutorial de Pandas - W3Schools
- Tutorial - Ensinando Pandas (17 episódios) – Canal Téo me Why
Matplotlib é uma biblioteca de visualização de dados em Python que permite criar gráficos estáticos, animados e interativos de forma altamente personalizável.
Seaborn é uma biblioteca de visualização estatística baseada no Matplotlib. Ela fornece uma interface de alto nível para criação de gráficos informativos e atrativos, como mapas de calor, gráficos de dispersão com regressão, boxplots e violin plots. Ideal para análise exploratória de dados e visualização de padrões estatísticos.
- Documentação Oficial do Seaborn
- Tutorial de Seaborn - W3Schools
- Tutorial de Seaborn - Geeks for Geeks
- Pacote Seaborn no PyPI
Openpyxl é uma biblioteca em Python que permite ler, criar e modificar arquivos do Excel no formato .xlsx
. É útil para automação de planilhas, relatórios e integração com dados tabulares.
Data to Viz é um guia interativo que ajuda a escolher o melhor tipo de gráfico para representar os dados com base na estrutura da informação e na mensagem que se deseja transmitir.
Tableau é uma ferramenta poderosa de Business Intelligence (BI) que permite criar dashboards interativos e explorar dados de forma visual. Suporta conexão com múltiplas fontes de dados e é amplamente usada em análise exploratória e storytelling com dados.
Power BI é uma ferramenta de visualização de dados da Microsoft que possibilita transformar dados em insights interativos, com suporte a relatórios dinâmicos e integração com o ecossistema Office.
Flourish é uma plataforma de visualização de dados que permite criar gráficos interativos, mapas e infográficos sem necessidade de programação. É amplamente utilizada para storytelling com dados, facilitando a criação de apresentações visuais impactantes.
Ferramentas para análise estatística de código, detecção de code smells, métricas de qualidade e identificação de más práticas de programação.
- PMD: Ferramenta que verifica problemas comuns em código Java, como variáveis não utilizadas, duplicação de código e estilos de codificação.
- SonarQube: Plataforma para análise contínua de qualidade de código, cobrindo múltiplas linguagens. Avalia bugs, vulnerabilidades e cobertura de testes.
- Qodana: Plataforma de análise estática de código desenvolvida pela JetBrains. Integra-se com IDEs, CI/CD e repositórios para detectar code smells, vulnerabilidades de segurança e violações de boas práticas, com suporte a múltiplas linguagens como Java, Kotlin, PHP, Python e JavaScript.
- JNose: Ferramenta focada na identificação de test smells e design smells em código Java. Ajuda na compreensão de problemas relacionados à testabilidade e manutenibilidade.
- Code Climate: Ferramenta de análise contínua de qualidade de código que gera métricas como complexidade ciclomática, duplicação, cobertura de testes e code smells. Suporta diversas linguagens e se integra com GitHub, GitLab e outros.
- CodeQL: Plataforma de análise de segurança e qualidade de código da GitHub, que permite executar consultas para detectar vulnerabilidades, bugs e más práticas em diversos tipos de código fonte.
- CK: Ferramenta de linha de comando para análise estática de código Java. Extrai métricas como CBO, LCOM, WMC, RFC, DIT, NOM e LOC, úteis para avaliar a complexidade e a qualidade do código.
Relatórios anuais e pesquisas globais ajudam a entender as principais linguagens, ferramentas, salários, preferências e tendências no mercado de desenvolvimento de software. São ótimos para orientar decisões de carreira e identificar habilidades em alta.
- DevSkiller Report 2025
- Stack Overflow Developer Survey 2025
- Stack Overflow Developer Survey 2024
- JetBrains Developer Ecosystem 2024
- GitHub Octoverse 2024