Programação e Fatores de Qualidade -...
Transcript of Programação e Fatores de Qualidade -...
Qualidade de Software
Quero que você escrevarapidamente um sistema defolha de pagamento quefuncione corretamente, que sejarobusto e que seja rápido. Ah!Pretendo lançar uma outraSem problema,
chefe.
Ferrou!
22
Pretendo lançar uma outraversão deste mesmo programa,daqui a uns 6 meses.
chefe.
Tópicos da Aula
Hoje aprenderemos alguns fatores de qualidade desoftware
Fatores de qualidade externos
Fatores de qualidade internos
Depois aprenderemos algumas técnicas para melhoraralguns fatores de qualidade de um programa
33
Comentários
Refactoring
Especialização com subclasses
Finalmente, iremos mostrar como alguns errosdinâmicos podem ser depurados com comentários
Erros dinâmicos
Depuração com comentários
Impacto econômico e social do
software de qualidade
Disponibilidade de serviços essenciaishome banking
telefoniaSegurança de pessoas
4
Segurança de pessoassistemas de monitoramento de pacientessistemas de controle de tráfego aéreofreios ABS
AS1
Competitividade das empresasMelhores produtos a um menor custoAtração de novas empresas para a região
Investimentos na região
O impacto na prática
5
Investimentos na regiãoArrecadação de impostos
Crise de Software
Nas 3 primeiras décadas da Computação, apreocupação maior era hardware
Custo de processamento e armazenamento de dados
Desafio atual é melhorar qualidade e custo dosoftwareProblemas
25% dos projetos são cancelados
66
25% dos projetos são canceladosO tempo e custo de desenvolvimento é bem maior do que oestimado
em 53% dos projetos
75% dos sistemas não funcionam como planejado
A manutenção e reutilização são difíceis e custosas
A produtividade dos profissionais da área de software nãotem acompanhado a demanda por seus serviços
Causas da Crise de Software
EssênciasComplexidade crescente dos sistemasDificuldade e custos de formalização
7
Uma linha de código do sistema de controle delançamento do ônibus espacial da NASA custa1.000 dólares!
Essências não podem ser evitadas
Causas da Crise de Software
AcidentesMá qualidade das linguagens, ferramentas emetodologiasProblemas gerenciais (pessoas, riscos, etc.),políticos, e organizacionais
9
Pouca comunicação entre o cliente e odesenvolvedorManutenção de software, geralmente não éconsiderada como parte do ciclo de software
Acidentes PODEM ser evitados!!!
Fatores de Qualidade de Software
Qualidade de software é uma combinação devários fatoresEstes fatores podem ser classificados em:
Fatores ExternosQualidades percebidas pelos usuários de um software
Usuários incluem: usuário final e aquela pessoa que
1010
Usuários incluem: usuário final e aquela pessoa quecontratou o desenvolvimento do softwareEx: corretude, eficiência, reusabilidade, etc
Fatores InternosQualidades percebidas somente por profissionais desoftware que têm acesso ao código do softwareEx: modularidade, legibilidade, etc
Alguns Fatores Externos
Corretude é a capacidade do software executar deforma correta todas as tarefas que foram pedidasnos requisitos e especificação do software
Robustez é a capacidade do software funcionar,mesmo em situações não previstas na especificação
É o complemento de corretude
11
Robustez
11
Especificação
Corretude
Alguns Fatores Externos
Extensibilidade é a facilidade em que o softwarepode ser alterado para que atenda novas exigênciasda especificação
Software está em constante mudança≈70% de custo do software é a fase de manutençãoMudanças de requisitos são responsáveis por ≈ 50% dasatividades de manutenção
1212
atividades de manutenção
Reusabilidade é a capacidade que o software temde ser usado em novas aplicações.
Este uso pode ser de partes do software ou dele todoGrande impacto no tempo de desenvolvimento de softwareMenor tempo de desenvolvimento é importante parasucesso do software
Alguns Fatores Externos
Eficiência é a capacidade do software de otimizar autilização dos recursos de hardware
Muitas vezes requer um bom conhecimento do hardwareonde o software será executadoPode tornar a implementação do software dependente demaisda plataforma alvo
1313
Facilidade de Uso é uma qualidade que diz respeito afacilidade com que usuários com diferentes perfisconseguem aprender a utilizar o software e resolver osproblemas desejados
Engloba também o aprendizado de instalação, operação emonitoramentoRepresenta economia para a empresa que utiliza o softwareem relação aos custos de treinamento
Outros Fatores Externos
PortabilidadeEscalabilidadeIntegridade e segurança
14
Integridade e segurançaCompatibilidadeFlexibilidadeTestabilidade
Alguns Fatores Internos
Um software é modular se ele é construído àpartir de elementos autônomos conectados
Modularidade � Reusabilidade e Extensibilidade
Legibilidade de um programa é a facilidade
1515
Legibilidade de um programa é a facilidadecom que profissionais de software conseguementender o código do programa
Documentação é importantePadrões de codificação devem ser seguidosLegibilidade � Reusabilidade e Extensibilidade
Algumas Considerações sobre Qualidade
Fatores internos �Fatores externosSoftwares são utilizados em aplicações dos maisdiversos domíniosFreqüentemente, não se pode obter todos os fatoresde qualidade
Diferentes fatores podem ser conflitantes
1616
Diferentes fatores podem ser conflitantesEx: Freqüentemente para aumentar a eficiência, código doprograma deve ser mais específico a uma plataforma, oque diminui a reusabilidade do código
Algumas Considerações sobre Qualidade
O que foi que aconteceu? Eu pisei no freio e ele demorou um século para ser acionado
Eu ouvi dizer que este sistema novo de controle de freio, pelo menos, é mais reusável
1717
Cabe ao desenvolvedor avaliar quais
fatores são mais importantes
de acordo com a aplicação
Comentando um Programa
Um programa deve ser bem documentadoDocumentação externa para usuáriosDocumentação no próprio programa
Aumenta a legibilidade
1818
Comentário é um mecanismo oferecido pelas linguagens de programação que permite que o programador expresse em linguagem natural a lógica pensada para escrever um programa ou
um trecho de programa
Comentando um Programa
Usa-se o termo inline documentation paracomentários em um programaDevem ser incluídos para explicar o propósitodo programa e algumas partes deleComentários não afetam o funcionamento do
1919
Comentários não afetam o funcionamento doprograma
São ignorados na hora da execução
Dica: Comente o código enquanto o estiver escrevendo, senão há uma forte probabilidade
de não o fazer depois
Comentários em Java
Há 3 formas de incluir comentários em Java:Comentários de uma linha
// Este é um comentário de uma linha
Precedido de //Precedido de //Precedido de //Precedido de //
Comentários de múltiplas linhasDeve estar entre /* */Deve estar entre /* */Deve estar entre /* */Deve estar entre /* */
2020
/* Este tipo de comentário só termina
quando o asterisco barra é encontrado */
Deve estar entre /* */Deve estar entre /* */Deve estar entre /* */Deve estar entre /* */
Comentários Javadoc
/** Isto é um comentário javadoc comment */
Deve estar entre /** */Deve estar entre /** */Deve estar entre /** */Deve estar entre /** */
Javadoc é uma ferramenta que gera documentação Javadoc é uma ferramenta que gera documentação Javadoc é uma ferramenta que gera documentação Javadoc é uma ferramenta que gera documentação externaexternaexternaexterna
Reuso de Código
Reusabilidade é um fator importante paraacelerar o desenvolvimento de um sistemaOO é uma metodologia que facilita o reusoReuso pode se dar de várias formas:
Classe inteira
2121
Classe inteiraUma classe é cliente de outra
Alguns atributos e/ou métodosTrechos de programa ou métodos
Reuso de Código
Existem muitas técnicas existentes parareutilizar código ou pelo menos aumentar opotencial de reusoUma “técnica” infelizmente muito difundida é ocopy & paste
2222
Solução rápida e “boa” para quem não quer pensarSolução péssima para a manutenção do sistema
Se uma alteração for requerida, esta também deverá serpropagada por todos os trechos repetidosSe um bug for encontrado, terá de ser corrigido em todosos outros códigos repetidos
Melhor do que isto é usar Refactoring
Refactoring
Refactoring consiste em uma série detécnicas que reestruturam o código dosoftware, aumentando o potencial de reuso,extensibilidade e legibilidade
O comportamento do software continua o
2323
O comportamento do software continua omesmo, só muda a estruturaEx: especialização com subclasses, extractmethod, rename, generalização comparâmetros, inline method, etc
Exemplo de Refactoring: Especialização
Especializando com SubclassesComportamento
objetos da subclasse comportam-secomo os objetos da superclasse
Reuso de Código
2424
Reuso de Códigoa descrição da superclasse pode serusada para definir a subclasse
Extensibilidadealgumas operações da superclasse
podem ser redefinidas na subclasse
Exemplo de Refactoring: Especialização
Em Java, utilizamos a palavra reservadaextends para informar que uma classe ésubclasse da outra
public class MySubclass extends MyClass
2525
Mecanismo para definição de herança esubtipos
Erros Dinâmicos
Erros que acontecem em tempo de execução,geralmente são mais difíceis de depurar do que errosestáticosAlguns possíveis erros
Tenta-se manipular algum arquivo que não existaEstouro de memória
26
Estouro de memóriaDivisão por zeroManipular uma referência NULA
NullPointerException
A referência obtida pode ser null
Não está associada a nenhum objetoO método não pode ser executadoÉ levantada a exceção NullPointerException de JavaNullPointerException de Java
Muito cuidado! Isso não deve acontecer!
Depurando Erros Dinâmicos
Java possui mecanismos que facilitam tratar esteserros (exceções)IDEs existentes dão um bom suporte para depurarestes tipos de erros
Integram depuradores (debuggers)Permitem inspecionar linha por linha do programa
28
Permitem inspecionar linha por linha do programaOutra forma, freqüentemente utilizada, é comentarpartes do código para isolar (detectar onde está oerro)
Se ao comentar uma parte de código, o programapassa a funcionar normalmente, consegue-sereduzir o espaço de código a ser depurado