Plano de ensino:
-
Ementa
- Discute as disciplinas da engenharia de software dando maior ênfase nas áreas do conhecimento mais relevantes para o desenvolvimento de aplicações web, como requisitos não-funcionais, arquitetura, testes e qualidade de software, evolução e entrega contínua.
- A disciplina apresenta o modelo de referência da ISO 25.000 para a qualidade de software, bem como o uso de modelos ágeis para dar suporte ao dinamismo das aplicações web.
-
Objetivos
- Entender características do software e de seu ciclo de vida
- Adquirir conhecimento sobre técnicas para construção de software, englobando modelagem orientada a objetos, definição de arquitetura de software, integração e entrega contínua.
- É a ciência/arte/profissão de adquirir e aplicar conhecimentos para o desenvolvimento de softwares.
- Nos últimos anos o hardware deixou de ser o item mais caro na implementação de um sistema, enquanto que o custo relacionado ao software cresceu e se tornou o principal item no orçamento da computação.
- Isso se deve principalmente pela crescente complexidade dos problemas a serem resolvidos pelos softwares. Sistemas como os de gestão hospitalar e sistemas de PEP chegam a possuir milhões de linhas de código e envolvem vários especialistas para o seu desenvolvimento.
- Aliado a isso, alguns problemas inerentes ao processo de desenvolvimento de um software começaram a surgir 1 : as estimativas de prazo e de custo freqüentemente são imprecisas, a produtividade das pessoas da área de software não tem acompanhado a demanda por seus serviços e, a qualidade de software às vezes é menos que adequada, ocorrendo muito freqüentemente a insatisfação do usuário.
- A chave para se vencer esses problemas e dificuldades acima relatados é a larga utilização de uma abordagem de engenharia ao desenvolvimento de software, aliada a uma contínua melhoria das técnicas e ferramentas no intuito também de melhorar a produtividade da equipe.
- Nova, se comparada a Engenharia Civil por exemplo.
- Está em evolução (vide o livro do Pressman).
- Áreas do conhecimento
- Requisitos
- Design (projeto)
- Construção
- Testes
- Manutenção
- Gestão de configuração
- Gestão de engenharia
- Processos
- Modelos e métodos
- Qualidade
- Prática profissional
- Economia
- Fundamentos: computacionais; matemáticos; de engenharia.
- Conjunto de normas (modelo de referência) que devem ser seguidas para garantir a qualidade do software.
- Mostra quais requisitos devem ser cumpridos, porém não mostra como.
- Processo
- Sucessão sistemática de mudanças numa direção definida.
- Série de ações sistemáticas visando certo resultado.
- Série de ações que ocorrem de uma maneira determinada.
- Framework
- Armação de uma construção.
- Desenvolvimento
- Crescimento ou expansão gradual.
- Passagem gradual de um estágio inferior a um mais aperfeiçoado.
- Melhoria é o objetivo. Mudança é o caminho.
- Processo de desenvolvimento é uma das disciplinas da engenharia de software.
- Software life cycle process.
- Ajuda a escolher o processo de desenvolvimento.
- Padrão que define as tarefas necessárias para desenvolver o software.
- Sempre que um software recebe atualizações, novos defeitos são encontrados. Isso faz com que o software se distancie cada vez mais da curva ideal.
- O custo de correção de defeitos cresce exponencialmente durante o processo de desenvolvimento. Um defeito descoberto na fase de requisitos e resolvido logo em seguida, tem um custo muito menor do que um que foi descoberto na fase de requisitos, mas só foi corrigido na fase de construção do software.
- Alguns dos processos de desenvolvimento de softwares existentes no mercado:
- Waterfall (cascata)
- Prototipação
- RUP (Rational Unified Process)
- XP (Extreme Programming)
- Scrum
- Kanban
- FDD (Feature-driven Development)
- TDD (Test-driven Development)
- BDD (Behavior-driven Development)
- DDD (Domain-driven Development)
System requirements <-> Software requirements <-> Analysis <-> Program design <-> Coding <-> Testing <-> Operations
- Os processos são seguidos um após o outro.
- A entrega é feita somente no final do processo de desenvolvimento.
- 4 fases: iniciação, elaboração, construção, transição.
- 9 disciplinas: modelagem de negócio, requisitos, análise e design, implementação, testes, implantação, gestão de configuração, gestão de projeto, ambiente.
- 5 macro papéis: analistas, desenvolvedores, testadores, gerentes e adicionais.
- 33 papéis.
- 75 artefatos.
-
O Modelo V (V Model - em inglês) é a representação gráfica do ciclo de vida de um software. Ele contém os principais passos a serem feitos durante o processo, bem como as entregas esperadas em cada uma das etapas.
Especificação de requisitos ------------> Teste de aceitação Projeto de alto nível --------> Teste de sistema Projeto detalhado ----> Teste de aceitação Codificação --> Teste de unidade
- Trello
- 1: Escreva um teste que falhe.
- 2: Faça o código funcionar.
- 3: Refatore. Elimine redundância.
- O objetivo do XP (Extreme Programming) é fazer com que as pessoas escrevam código de mais qualidade de uma maneira mais produtiva.
- O XP possui 12 práticas, que estão agrupadas em 4 áreas:
- Fine-scale feedback
- Pair programming
- Planning game
- TDD
- Whole team
- Continuous process
- Continuous integration
- Refactoring or design improvement
- Small releases
- Shared understanding
- Coding standards
- Collective code ownership
- Simple design
- System metaphor
- Programmer welfare
- Sustainable pace
- Coding
- The customer is always available
- Code the unit test first
- Only one pair integrates code at a time
- Leave optimization until last
- No overtime
- Testing
- All code must have unit tests
- All code must pass all unit tests before it can be released
- When a bug is found tests are created before the bug is addressed (a bug is not an error in logic, it is a test that was not written)
- Acceptance tests are run often and the results are published
- Framework para desenvolvimento ágil.
- Backlog do produto.
- Backlog do sprint.
- Sprints curtos (1 a 4 semanas).
- Reuniões diárias.
- Entrega ao final de cada sprint.
- Requisito
- Condição a que se deve satisfazer para que uma coisa fique legal e regular.
- Exigência imprescindível para a consecução de certo fim.
- Existe uma disciplina específica apenas para requisitos: Engenharia de Requisitos
- IEEE 830: Norma para especificação de requisitos de software.
- Requisitos funcionais: Definem o comportamento e funções específicas (pedidos do cliente).
- Requisitos não-funcionais: Como o software fará algo, não o que fará (obrigações implícitas).
- Confiabilidade: Fluxo de navegação; completar a transação.
- Desempenho: Tempo de resposta.
- Disponibilidade: Estar online sempre, 24x7.
- Gestão de configuração (time-to-market): Controle de entrega; implantação.
- Segurança: Manter a integridade de informações e dados. Negar acesso e alterações a pessaos/sistemas não autorizados.
- Portabilidade
- Usabilidade: Possuir efetividade e eficiência e ser atrativo para o usuário realizar determinadas ações.
- Conceitos
- Design: Concepção de um projeto ou modelo; planejamento.
- Projeto: Plano para a relaização de um ato.
- Comunicar as informações de design para as partes interessadas (stakeholders).
- IEEE 1016-2009 - SDD - Software Design Descriptions
- Padrões de projeto (design patterns)
- Solução geral
- Reutilizável
- Resolve um problema que ocorre com frequência
- Contexto determinado
- Exemplos:
- MVC - Model-View-Controller
- ORM - Object Relational Mapping
- Page Controller
- Singleton
- Facade
- Zachman Framework
- What: O que será feito (etapas).
- Where: Onde será feito (local).
- Who: Por quem será feito (responsabilidade).
- When: Quando será feito (tempo).
- Why: Por que será feito (justificativa).
- How: Como será feito (método).
- How much: Quanto custará fazer (custo).
- WAAF - Web Application Architecture Framework
- UML - Unified Modeling Language
- Linguagem de comunicação entre as partes interessadas
- Ferramenta de modelagem de aplicações
- Diagramas mais comuns:
- Classe
- Sequência
- Atividades
- Estado
- Deployment
- Conceitos:
- Erro: engano, erro humano.
- Defeito: produto do erro, bug.
- Falha: resultado do defeito, bug em produção.
- Verificação: atendimento aos requisitos.
- Validação: cumprimento da finalidade.
- Métodos:
- Estático: revisão, inspeção (verificação).
- Dinâmico: casos de teste executados (validação).
- Caixa branca: testes internos (desenvolvedor).
- Caixa cinza: testes externos com conhecimentos internos (cálculos, estrutura de dados, algoritmos, etc).
- Caixa preta: testes externos (usuários).
- Níveis de teste:
- Unitário: menor unidade testável do software.
- Integração: funcionamento das unidades em conjunto.
- Interface: troca de informações entre módulos.
- Sistema: teste de aceitação, visão usuário-requisito.
- Tipos de teste:
- Regressão
- Aceitação
- Usabilidade
- Concorrência
- Alpha, Beta
- Processo de teste:
- Waterfall
- Célula de testadores
- No fim do processo
- Antes de entregar para o cliente
- Agile ou XP
- Suporte via TDD
- Integração contínua
- Waterfall
- Artefatos de teste:
- Plano de testes
- Matriz de rastreabilidade (requisito vs caso de teste)
- Suite de testes
- Caso de teste
- Script de teste
- Dados de teste
- Ferramentas: Selenium, Simpletest, JUnit, QUnit, Testlink, JMeter.
- Integração contínua: É o termo utilizado para designar um conceito surgido com o desenvolvimento ágil onde o desenvolvedor integra o código alterado ao projeto principal com uma grande frequência. Por isso, atualmente, esse processo pode ocorrer diversas vezes ao dia, ao invés de uma única vez.
- O modelo de qualidade de software determina quais características serão levadas em consideração durante a avaliação do produto final.
- A qualidade de um sistema é o grau em que o sistema satisfaz as necessidades explícitas e implícitas de seus diversos públicos, e, portanto, fornece valor.
- Adequação funcional
- Completude; exatidão; apropriada.
- Eficiência do desempenho
- Comportamento de tempo; Uso de recursos; Capacidade.
- Compatibilidade
- Co-existência; Interoperabilidade.
- Usabilidade
- Habilidade apropriada de reconhecimento; Aprendizado; Operação.
- Proteção contra erros de usuário.
- Estética de interface de usuário.
- Acessiblidade.
- Confiabilidade
- Maturidade; Disponibilidade; Tolerância a falhas; Recuperabilidade.
- Manutenibilidade
- Modularidade; Reusabilidade; Analisabilidade; Modificabilidade; Testabilidade.
- Portabilidade
- Adaptabilidade, Instabilidade, substituível.
- Termo cunhado em 2008/2009.
- Também conhecido como entrega contínua (continuous delivery).
- Integração entre o desenvolvimento e infraestrutura de TI.
- Busca suavizar as transições entre os ambientes de desenvolvimento, homologação e produção.