Obrigatória – 60 horas – 4 créditos
Pré-requisitos: Projeto e Construção de Sistemas
Professor Responsável: Paulo Sergio Medeiros dos Santos
Objetivos da Disciplina
- Capacitar o aluno a desenvolver programas em equipe utilizando recursos de sistemas de controle de versões.
- Capacitar o aluno a desenvolver programas modulares de qualidade por meio da aplicação de métodos e técnicas de projeto de software.
- Capacitar o aluno a verificar a qualidade dos programas desenvolvidos por meio de testes e revisões.
Ementa
Estilos de programação. Processo de desenvolvimento de programas modulares. Princípios de programação modular. Módulos, interfaces, acoplamento. Ferramentas para programação modular. Tipos abstratos de dados. Conceitos de orientação a objetos. Princípios de projeto de sistemas. Padrões de projeto. Tratamento de exceções. Revisões e Inspeções. Técnicas e estratégias de teste de software. Testes de unidade. Testes de integração. Integração de programas. Gerência de Configuração de Software.
Conteúdo Programático
- Gerência de configuração em projetos de software
- Sistemas de controle de versão
- Sistemas de controle de requisição
- Sistemas de construção (build)
- Integração contínua
- Aspectos de Qualidade de Programas
- Características de um programa bem construído
- Nomes
- Funções (nome, tamanho, nível de abstração, assinatura)
- Princípio da eliminação de replicação de código
- Redução de complexidade na implementação de funções
- Comentários
- Tratamento de Exceções
- Projeto de software
- Princípios de projeto de software
- Projeto arquitetural
- Padrões arquiteturais
- Padrões de projeto
- Projeto de pacotes
- Projeto de classes
- Refactoring
- Manutenção de software
- Testes
- Importância e papel dos testes
- Testes de unidade
- Testes de integração
- Testes de sistema
- Testes unitários automatizados
- Test Driven Development
- Outros tipos de testes
- Técnicas para elaboração de testes
- Testes Funcionais x Testes Estruturais
- Avaliação da cobertura dos testes
- Registro de falhas
- Revisões e inspeções
Metodologia
Aprendizagem baseada em projeto: ao longo da disciplina o aluno deve projetar e construir, em grupo, um sistema de informação definido pelo professor. O foco do projeto está no desenvolvimento de um sistema que, além de funcionar corretamente, apresente uma estruturação adequada dos módulos e um código de boa qualidade. Exposição de conteúdo: para apoiar o aluno na realização do projeto, são realizadas aulas presenciais com exposição de conteúdos e aplicação de exercícios de fixação.
Avaliação
- Uma prova teórica realizada ao final do semestre.
- Entrega e apresentação do projeto ao final do semestre.
- Pequenos trabalhos de aplicação dos métodos, técnicas e ferramentas distribuídos ao longo do semestre.
A nota final do aluno é a média dos três grupos de avaliações (prova teórica, projeto e pequenos trabalhos).
Alunos com nota final entre 4,0 e 7,0 deverão fazer uma prova final.
Bibliografia
- Larman, Craig. Utilizando UML e Padrões – Uma introdução à análise e ao projeto orientados a objetos – 3ª Edição. Bookman. 1999.
- Martin, R. Clean Code: A Handbook of Agile Software Craftsmanship. Prentice hall, 2008.
- McConnell, Steve. Code Complete 2. Microsoft Press, 2004.
- Wiegers, K.E., Peer Reviews in Software – A Practical Guide. Addison-Wesley, 1ª Edição, 2002.