Professor Roberto Nunes
Gerenciamento e Qualidade de
Software
Garantia da Qualidade de Software
A história do teste de software começa há muito tempo, mas foi em
1957 que o conceito de teste se tornou o processo de detecção de erros
e não de verificar se o software funciona, e foi em 1979 que Myers
produziu os primeiros trabalhos complexos sobre o processo de teste.
Nesta época já se dizia que o teste deveria ser a intenção de encontrar
erros. Com o passar dos anos, os projetos foram tendo mais e mais
problemas devido à complexidade dos sistemas, segundo Bartié “Mais
de 30% dos projetos são cancelados antes de serem finalizados e mais
de 70% dos projetos falham nas entregas de funcionalidade”.
Garantia da Qualidade de Software
Estas falhas criaram um ambiente caótico e problemático para os
gestores, desta forma, criou-se a necessidade de implementação de
processos de qualidade, que busquem estabelecer procedimentos que
sirvam de garantia e gerenciamento de qualidade.
Assim surgiram modelos como o CMM (Capability Maturity Model), que
foi definido pelo Instituto de Engenharia de Software (SEI), descrevendo
uma estrutura de trabalho. Esta estrutura possui itens necessários para
tornar o processo eficiente e controlado.
Garantia da Qualidade de Software
O modelo é dividido em cinco níveis do inicial ao otimizado, os níveis
são sequenciais, desta forma, uma empresa para atingir o ultimo nível,
deve ter passado por todos os níveis anteriores.
O nível dois do CMM já define o processo gerencial de qualidade de
software, o que demanda processos de testagem.
Os testes devem provar que algo não funciona, e são essenciais para o
sucesso do processo de qualidade de software.
Garantia da Qualidade de Software
“ Os testes unitários podem resolver entre 30% a 50% dos defeitos dos
programas, os testes de sistemas podem remover entre 30% a 50% dos
defeitos remanescentes.
Desse modo, os sistemas podem ir para produção ainda com
aproximadamente 49% dos defeitos. Por último, as revisões de códigos
podem reduzir entre 30% e 30% desses defeitos.” Myers in Bastos, 2002.
A realização de testes desde o início do desenvolvimento é algo
aconselhado não só pelas metodologias ágeis, mas como pode ser visto
em Myers, indicado para a garantia de qualidade, visto que os testes são
realizados do início ao final do processo de desenvolvimento.
Garantia da Qualidade de Software
A realização de testes de software pode ser feito de forma manual ou
automatizada, esta última indica a utilização de ferramentas de teste. As
ferramentas de teste permitem ao testador automatizar parte do
processo de teste, facilitando a retestagem para validação dos testes.
O processo de teste atua dentro de uma visão de qualidade como o
PDCA no momento de check, mas em desenvolvimento, é possível
realizar testes em todos os processos, do fazer (testes unitários) até o
planejamento.
Garantia da Qualidade de Software
Garantia da Qualidade de Software
Garantia da Qualidade de Software ou Software Quality Assurance
(SQA) é uma série planejada de atividades de apoio que atribui
confiança ao software, de modo que as exigências sejam devidamente
estabelecidas e produtos ou serviços estejam em conformidade com as
normas especificadas através de uma série de atividade abrangente que
são utilizadas em todo o processo do ciclo de vida de desenvolvimento
do software.
Garantia da Qualidade de Software
A garantia da qualidade de Software pode ser divididas em sete
atividades:
• Aplicação de Métodos Técnicos
• Realização de revisões técnicas formais
• Atividade de testes de software
• Aplicação de padrões
• Controle de mudanças
• Medição
• Manutenção de registros e reportagem
Garantia da Qualidade de Software
Métricas de GQS
Ao gerenciar projetos de desenvolvimento de software, muitas
atividades levam à necessidade de quantificar o que será desenvolvido.
O tamanho do software é a base para outras medidas e valores
importantes, como custo, prazo, desempenho e qualidade.
Utilizar métricas é uma prática essencial para uma boa gestão.
Uma boa métrica é aquela que permite a construção de indicadores que
facilitam a tomada de decisão sem que sua confiabilidade seja
questionada.
Garantia da Qualidade de Software
A métrica e o mito
Como disse Peter Druker, “Se você não pode medir, você não pode
gerenciar”, isso quer dizer, se você não tem visibilidade do que está
acontecendo, você não sabe como atuar.
Basear o julgamento do estado de um projeto de software, por exemplo,
em opiniões e feedbacks enviesados é um erro muito básico.
Para fugir do viés e do “sentimento” e poder se apoiar em informação,
precisamos de dados e estatísticas oriundos de valores quantitativos e
matemáticos.
Garantia da Qualidade de Software
A métrica puramente pode não prover respostas imediatas, mas os
indicadores provindos de métricas sólidas podem dar um indício do que
está acontecendo e, comparando com informações e experiências
anteriores, dar uma visão do que pode vir a ocorrer no futuro.
Para se ter as métricas e os indicadores, é importante ter os seguintes
itens, que permitem uma gestão baseada em métricas confiáveis:
Garantia da Qualidade de Software
Um processo que garanta a coleta, armazenamentos e recuperação
apropriada dos dados de maneira segura e íntegra;
A geração de indicadores que respondam questões objetivas da gestão:
Como e onde estamos? Aonde queremos chegar? Chegaremos lá no
prazo, custo, qualidade planejados?;
Garantia da Qualidade de Software
A aplicação de técnicas corretas das métricas de software para cada
assunto necessário para a gestão: estimativa, acompanhamento e
visibilidade;
Métricas que sejam:
Íntegras: não podem ser manipuladas indevidamente;
Objetivas: não podem dar margem para interpretação;
Precisas: quantificadas em valores numéricos precisos e não em
escala nominal ou subjetiva.
Confiáveis: o método para obter as métricas deve ser repetido sem
gerar resultados diferentes cada vez que é executado;
Padrão: Possuir uma unidade de medida padronizada.
Garantia da Qualidade de Software
Confiabilidade de Software
Etapas na Determinação da Confiabilidade de Software
Incerteza é um estado com o qual as pessoas se deparam no cotidiano. Se
considerarmos um projeto de software, encontramos incerteza quando se
verifica o prazo e/ou custo para concluir o projeto.
Também há incerteza quanto ao número de faltas ou defeitos remanescentes
no software.
Por exemplo, um produto resultante do projeto de um sistema de software
pode ter uma confiabilidade de 0.999, que pode ser considerado como um
nível satisfatório de confiabilidade (isto é, que um sistema estaria operacional
e funcionando corretamente durante 99,9% do tempo).
Garantia da Qualidade de Software
Entretanto, ainda assim, não há a certeza de que o produto não apresentará
falhas. E, caso o software não tenha sido exaustivamente testado, o que se
pode obter é um indicador da confiabilidade do software, geralmente, definido
em termos de uma medida estatística da operação de um software sem a
ocorrência de falhas.
A confiabilidade de software é um dos atributos da qualidade de software.
Além dela, outros atributos da qualidade são desempenho, portabilidade,
reusabilidade, dentre outros.
Desconsiderar a confiabilidade de software durante o desenvolvimento de um
sistema de software implica na possível ocorrência de falhas durante a fase
operacional do sistema. Este artigo trata da importância da confiabilidade de
software para os sistemas.
Garantia da Qualidade de Software
Confiabilidade de Software em Sistemas Computacionais
O ciclo de vida de um sistema de software consiste de duas grandes
fases: desenvolvimento e operação.
A fase de desenvolvimento compreende engenharia de sistemas,
especificação de requisitos, projeto, codificação e testes.
A fase operacional refere-se à fase na qual o sistema de software está
em uso, oferecendo funcionalidades aos usuários.
Garantia da Qualidade de Software
Tradicionalmente, a maioria dos esforços da engenharia de software em
produzir software confiável tem sido concentrada na fase de desenvolvimento.
A razão para isto recai no fato da natureza inerente do software de não sofrer
qualquer desgaste, isto é, por ser um produto intangível.
Diferentemente do hardware que sofre desgaste, o software não é susceptível
a esse tipo de problema.
Todavia, software é susceptível a erros que podem provocar a ocorrência de
falhas. Portanto, é de suma importância considerar a confiabilidade de
software no desenvolvimento de sistemas.
A confiabilidade de software é definida como a probabilidade do sistema
funcionar sem ocorrência de falhas num período e ambiente especificados.
Garantia da Qualidade de Software
Garantia Estatística da Qualidade de Software
A garantia estatística de qualidade de software apoia-se na
frequência de ocorrência de erros e inconsistências nos softwares
rastreados ao longo de um período específico de tempo. A análise para
essa ocorrência de erros é classificada de forma quantitativa.
Garantia da Qualidade de Software
“A atividade de teste, como a de desenvolvimento, gera grande número
de informações e necessita de várias repetições, além de requerer
coordenação e comunicação entre as equipes. As ferramentas de teste
podem aliviar o fardo da produção e da execução de teste, da geração
de informação e da comunicação.” Bastos, 2002.
Como exemplo temos:
Para os testes de caixa branca, de codificação, as ferramentas XUnit's
como o JUnit, NUnit, PHPUnit entre outros. Estas ferramentas permitem
ao desenvolvedor/testador criar testes de validação dos códigos,
verificando as funcionalidades e retornos das unidades do sistema.
Garantia da Qualidade de Software
Outro teste essencial para garantia dos requisitos não funcionais é o
teste de performance e stress, que tem como função validar o limite da
aplicação, entre eles o limite de usuários simultâneos, limite de dados
do sistema, etc.
Existem diversas ferramentas que possibilitam os testes de
performance, entre elas temos o JMeter, ferramenta livre, da fundação
Apache que permite a criação de um conjunto de testes, além de poder
ser integrado a IDE's e outras ferramentas de teste.
Garantia da Qualidade de Software
Também são necessários os testes funcionais, que garantem que certas
funcionalidades estão de acordo com os requisitos do projeto.
Os testes funcionais podem ser exploratórios, manuais e automatizados.
Existem diversas ferramentas para automação de testes funcionais, e
uma das ferramentas livres mais utilizadas para este fim é o Selenium.
Existem diversas estratégias para testes de software. Serão abordados
algumas delas com mais detalhes em outro momento das aulas.
Obrigado!
Bons Estudos.

Gerenciamento da Qualidade de Software 1.pptx

  • 1.
  • 2.
    Garantia da Qualidadede Software A história do teste de software começa há muito tempo, mas foi em 1957 que o conceito de teste se tornou o processo de detecção de erros e não de verificar se o software funciona, e foi em 1979 que Myers produziu os primeiros trabalhos complexos sobre o processo de teste. Nesta época já se dizia que o teste deveria ser a intenção de encontrar erros. Com o passar dos anos, os projetos foram tendo mais e mais problemas devido à complexidade dos sistemas, segundo Bartié “Mais de 30% dos projetos são cancelados antes de serem finalizados e mais de 70% dos projetos falham nas entregas de funcionalidade”.
  • 3.
    Garantia da Qualidadede Software Estas falhas criaram um ambiente caótico e problemático para os gestores, desta forma, criou-se a necessidade de implementação de processos de qualidade, que busquem estabelecer procedimentos que sirvam de garantia e gerenciamento de qualidade. Assim surgiram modelos como o CMM (Capability Maturity Model), que foi definido pelo Instituto de Engenharia de Software (SEI), descrevendo uma estrutura de trabalho. Esta estrutura possui itens necessários para tornar o processo eficiente e controlado.
  • 4.
    Garantia da Qualidadede Software O modelo é dividido em cinco níveis do inicial ao otimizado, os níveis são sequenciais, desta forma, uma empresa para atingir o ultimo nível, deve ter passado por todos os níveis anteriores. O nível dois do CMM já define o processo gerencial de qualidade de software, o que demanda processos de testagem. Os testes devem provar que algo não funciona, e são essenciais para o sucesso do processo de qualidade de software.
  • 5.
    Garantia da Qualidadede Software “ Os testes unitários podem resolver entre 30% a 50% dos defeitos dos programas, os testes de sistemas podem remover entre 30% a 50% dos defeitos remanescentes. Desse modo, os sistemas podem ir para produção ainda com aproximadamente 49% dos defeitos. Por último, as revisões de códigos podem reduzir entre 30% e 30% desses defeitos.” Myers in Bastos, 2002. A realização de testes desde o início do desenvolvimento é algo aconselhado não só pelas metodologias ágeis, mas como pode ser visto em Myers, indicado para a garantia de qualidade, visto que os testes são realizados do início ao final do processo de desenvolvimento.
  • 6.
    Garantia da Qualidadede Software A realização de testes de software pode ser feito de forma manual ou automatizada, esta última indica a utilização de ferramentas de teste. As ferramentas de teste permitem ao testador automatizar parte do processo de teste, facilitando a retestagem para validação dos testes. O processo de teste atua dentro de uma visão de qualidade como o PDCA no momento de check, mas em desenvolvimento, é possível realizar testes em todos os processos, do fazer (testes unitários) até o planejamento.
  • 7.
  • 8.
    Garantia da Qualidadede Software Garantia da Qualidade de Software ou Software Quality Assurance (SQA) é uma série planejada de atividades de apoio que atribui confiança ao software, de modo que as exigências sejam devidamente estabelecidas e produtos ou serviços estejam em conformidade com as normas especificadas através de uma série de atividade abrangente que são utilizadas em todo o processo do ciclo de vida de desenvolvimento do software.
  • 9.
    Garantia da Qualidadede Software A garantia da qualidade de Software pode ser divididas em sete atividades: • Aplicação de Métodos Técnicos • Realização de revisões técnicas formais • Atividade de testes de software • Aplicação de padrões • Controle de mudanças • Medição • Manutenção de registros e reportagem
  • 10.
    Garantia da Qualidadede Software Métricas de GQS Ao gerenciar projetos de desenvolvimento de software, muitas atividades levam à necessidade de quantificar o que será desenvolvido. O tamanho do software é a base para outras medidas e valores importantes, como custo, prazo, desempenho e qualidade. Utilizar métricas é uma prática essencial para uma boa gestão. Uma boa métrica é aquela que permite a construção de indicadores que facilitam a tomada de decisão sem que sua confiabilidade seja questionada.
  • 11.
    Garantia da Qualidadede Software A métrica e o mito Como disse Peter Druker, “Se você não pode medir, você não pode gerenciar”, isso quer dizer, se você não tem visibilidade do que está acontecendo, você não sabe como atuar. Basear o julgamento do estado de um projeto de software, por exemplo, em opiniões e feedbacks enviesados é um erro muito básico. Para fugir do viés e do “sentimento” e poder se apoiar em informação, precisamos de dados e estatísticas oriundos de valores quantitativos e matemáticos.
  • 12.
    Garantia da Qualidadede Software A métrica puramente pode não prover respostas imediatas, mas os indicadores provindos de métricas sólidas podem dar um indício do que está acontecendo e, comparando com informações e experiências anteriores, dar uma visão do que pode vir a ocorrer no futuro. Para se ter as métricas e os indicadores, é importante ter os seguintes itens, que permitem uma gestão baseada em métricas confiáveis:
  • 13.
    Garantia da Qualidadede Software Um processo que garanta a coleta, armazenamentos e recuperação apropriada dos dados de maneira segura e íntegra; A geração de indicadores que respondam questões objetivas da gestão: Como e onde estamos? Aonde queremos chegar? Chegaremos lá no prazo, custo, qualidade planejados?;
  • 14.
    Garantia da Qualidadede Software A aplicação de técnicas corretas das métricas de software para cada assunto necessário para a gestão: estimativa, acompanhamento e visibilidade; Métricas que sejam: Íntegras: não podem ser manipuladas indevidamente; Objetivas: não podem dar margem para interpretação; Precisas: quantificadas em valores numéricos precisos e não em escala nominal ou subjetiva. Confiáveis: o método para obter as métricas deve ser repetido sem gerar resultados diferentes cada vez que é executado; Padrão: Possuir uma unidade de medida padronizada.
  • 15.
    Garantia da Qualidadede Software Confiabilidade de Software Etapas na Determinação da Confiabilidade de Software Incerteza é um estado com o qual as pessoas se deparam no cotidiano. Se considerarmos um projeto de software, encontramos incerteza quando se verifica o prazo e/ou custo para concluir o projeto. Também há incerteza quanto ao número de faltas ou defeitos remanescentes no software. Por exemplo, um produto resultante do projeto de um sistema de software pode ter uma confiabilidade de 0.999, que pode ser considerado como um nível satisfatório de confiabilidade (isto é, que um sistema estaria operacional e funcionando corretamente durante 99,9% do tempo).
  • 16.
    Garantia da Qualidadede Software Entretanto, ainda assim, não há a certeza de que o produto não apresentará falhas. E, caso o software não tenha sido exaustivamente testado, o que se pode obter é um indicador da confiabilidade do software, geralmente, definido em termos de uma medida estatística da operação de um software sem a ocorrência de falhas. A confiabilidade de software é um dos atributos da qualidade de software. Além dela, outros atributos da qualidade são desempenho, portabilidade, reusabilidade, dentre outros. Desconsiderar a confiabilidade de software durante o desenvolvimento de um sistema de software implica na possível ocorrência de falhas durante a fase operacional do sistema. Este artigo trata da importância da confiabilidade de software para os sistemas.
  • 17.
    Garantia da Qualidadede Software Confiabilidade de Software em Sistemas Computacionais O ciclo de vida de um sistema de software consiste de duas grandes fases: desenvolvimento e operação. A fase de desenvolvimento compreende engenharia de sistemas, especificação de requisitos, projeto, codificação e testes. A fase operacional refere-se à fase na qual o sistema de software está em uso, oferecendo funcionalidades aos usuários.
  • 18.
    Garantia da Qualidadede Software Tradicionalmente, a maioria dos esforços da engenharia de software em produzir software confiável tem sido concentrada na fase de desenvolvimento. A razão para isto recai no fato da natureza inerente do software de não sofrer qualquer desgaste, isto é, por ser um produto intangível. Diferentemente do hardware que sofre desgaste, o software não é susceptível a esse tipo de problema. Todavia, software é susceptível a erros que podem provocar a ocorrência de falhas. Portanto, é de suma importância considerar a confiabilidade de software no desenvolvimento de sistemas. A confiabilidade de software é definida como a probabilidade do sistema funcionar sem ocorrência de falhas num período e ambiente especificados.
  • 19.
    Garantia da Qualidadede Software Garantia Estatística da Qualidade de Software A garantia estatística de qualidade de software apoia-se na frequência de ocorrência de erros e inconsistências nos softwares rastreados ao longo de um período específico de tempo. A análise para essa ocorrência de erros é classificada de forma quantitativa.
  • 20.
    Garantia da Qualidadede Software “A atividade de teste, como a de desenvolvimento, gera grande número de informações e necessita de várias repetições, além de requerer coordenação e comunicação entre as equipes. As ferramentas de teste podem aliviar o fardo da produção e da execução de teste, da geração de informação e da comunicação.” Bastos, 2002. Como exemplo temos: Para os testes de caixa branca, de codificação, as ferramentas XUnit's como o JUnit, NUnit, PHPUnit entre outros. Estas ferramentas permitem ao desenvolvedor/testador criar testes de validação dos códigos, verificando as funcionalidades e retornos das unidades do sistema.
  • 21.
    Garantia da Qualidadede Software Outro teste essencial para garantia dos requisitos não funcionais é o teste de performance e stress, que tem como função validar o limite da aplicação, entre eles o limite de usuários simultâneos, limite de dados do sistema, etc. Existem diversas ferramentas que possibilitam os testes de performance, entre elas temos o JMeter, ferramenta livre, da fundação Apache que permite a criação de um conjunto de testes, além de poder ser integrado a IDE's e outras ferramentas de teste.
  • 22.
    Garantia da Qualidadede Software Também são necessários os testes funcionais, que garantem que certas funcionalidades estão de acordo com os requisitos do projeto. Os testes funcionais podem ser exploratórios, manuais e automatizados. Existem diversas ferramentas para automação de testes funcionais, e uma das ferramentas livres mais utilizadas para este fim é o Selenium. Existem diversas estratégias para testes de software. Serão abordados algumas delas com mais detalhes em outro momento das aulas.
  • 23.