Prévia do material em texto
<p>Introdução Qualidade de software</p><p>Para compreender os aspectos relacionados à garantia da qualidade dos softwares, é importante, neste momento, ampliar a visão além das funcionalidades, desempenho, escalabilidade, entre outros. Isso implica considerar a qualidade dos processos envolvidos no desenvolvimento, teste e liberação para utilização.</p><p>Essa área do conhecimento da engenharia de software se preocupa em utilizar métodos, processos e normas nas atividades de desenvolvimento de software, a fim de se agregar qualidade nos processos e produtos finais. Para isso, é necessário que se tenha conhecimentos acerca de qualidade de software, qualidade do produto e qualidade dos processos. Como você pode ter percebido, existem diversas competências necessárias para se garantir a qualidade de um desenvolvimento.</p><p>Agora que você já se convenceu que a qualidade de software é indispensável, vamos supor que uma empresa de consultoria em tecnologia está encarregada de desenvolver um sistema integrado de gestão para uma grande corporação. O projeto enfrenta desafios relacionados à complexidade, prazos apertados e expectativas elevadas do cliente. Diante desse cenário, a equipe decide implementar práticas robustas de Garantia de Qualidade de Software (SQA) para assegurar a entrega de um produto confiável e de alta qualidade.</p><p>Os seguintes desafios são identificados:</p><p>· Garantir a conformidade com os requisitos do cliente.</p><p>· Identificar e mitigar riscos relacionados ao desenvolvimento.</p><p>· Estabelecer padrões de qualidade ao longo do ciclo de vida do software.</p><p>Sabendo disso, estratégias e práticas de SQA podem ser implementadas por essa empresa, além de apresentar uma síntese do resultado.</p><p>Conceitos de qualidade de software</p><p>De maneira geral, a qualidade de software pode ser descrita como a aplicação eficaz de gestão de qualidade, visando criar um produto útil que ofereça valor mensurável tanto para os desenvolvedores quanto para os usuários finais.</p><p>Um produto de alta qualidade deve ser útil, atendendo às exigências explícitas e implícitas dos usuários, proporcionando confiabilidade. Isso gera benefícios para a empresa, reduzindo manutenção e suporte, permitindo mais inovação. A comunidade de usuários também se beneficia, agilizando processos de negócio. O resultado é maior receita, rentabilidade e disponibilidade de informações cruciais.</p><p>O termo "qualidade de software" é comumente definido como a combinação de conformidade funcional e desempenho conforme as expectativas do patrocinador. No entanto, de acordo com Sommerville (2018), a abordagem à qualidade no desenvolvimento de software deve ser mais abrangente, considerando-a em três níveis distintos:</p><p>1. Organizacional: este nível amplo concentra-se no estabelecimento de padrões de trabalho para o desenvolvimento de software, incorporando as melhores práticas para minimizar erros e falhas.</p><p>2. Projeto: envolve o desenvolvimento baseado em padrões estabelecidos por gestores de projetos, variando de acordo com as peculiaridades do projeto, a política da empresa e o uso de frameworks, entre outros fatores.</p><p>3. Planejamento: exige a elaboração de um plano de qualidade, com uma equipe designada para verificar os requisitos acordados. Tanto os processos quanto os produtos desenvolvidos devem passar por revisões para evitar falhas inadvertidas.</p><p>Falhas de software</p><p>Grande parte dos erros de software estão relacionados a execuções incorretas, o que faz com que os resultados gerados não reflitam a verdade</p><p>Neste exemplo, atente-se para a comparação entre a data do sistema e a data indicada no relógio. Um erro na data do sistema pode acarretar um impacto significativo na integridade dos dados, resultando em registros que não são confiáveis quanto à sua data. Em setores como vendas, logística, contabilidade e fiscal, tal situação pode ser desastrosa.</p><p>Defeitos de software</p><p>O defeito de software refere-se a uma implementação incorreta, resultando em erro, interrupção de serviço ou mau funcionamento. Um exemplo seria um sistema de cadastro que, mesmo após o preenchimento dos campos obrigatórios sem retorno de erros, falha em inserir as informações no banco de dados (Zanin et al., 2018).</p><p>Quanto às atividades de desenvolvimento, localizar defeitos é mais desafiador, pois em alguns casos, erros de lógica, falhas na escrita do código ou outras referências não fornecem pistas claras para ajudar o desenvolvedor a identificar o problema.</p><p>Bugs</p><p>Esse termo tornou-se comum entre os jovens para descrever comportamentos inesperados de softwares. Conforme Zanin et al. (2018), um bug de sistema refere-se a erros e falhas inesperados, geralmente mais complexos, exigindo maior tempo e conhecimento técnico para identificação e resolução</p><p>Um problema que causou preocupação significativa entre os administradores de sistemas foi o bug do milênio. Em 1999, havia apreensão sobre o impacto nos sistemas durante a transição de ano, pois os sistemas mais antigos interpretavam apenas os dois últimos dígitos do ano. Isso poderia resultar em uma leitura errônea, levando o sistema, em vez de para o ano 2000, a retroceder para o ano 1900. Daí o nome "Bug do Milênio".</p><p>Garantia de qualidade de software</p><p>A garantia da qualidade conhecida como Software Quality Assurance (SQA). Sua abrangência permeia todo o ciclo de vida do projeto de desenvolvimento de software e requer (Sommerville, 2018):</p><p>· A utilização de ferramentas e/ou métodos que viabilizem a análise dos desenvolvimentos e dos testes.</p><p>· A condução de revisões técnicas nos componentes e na funcionalidade, sendo realizadas em cada uma das fases do ciclo.</p><p>· O controle documental por meio de procedimentos de versionamento.</p><p>· A aplicação de métodos para assegurar padrões de desenvolvimento e boas práticas que atendam às exigências das equipes de desenvolvimento.</p><p>· A implementação de mecanismos de aferição.</p><p>A Garantia da Qualidade de Software (SQA) desempenha um papel essencial na engenharia de software, sendo crucial para assegurar a entrega de um produto confiável e de alta qualidade. Ao estabelecer padrões, diretrizes e práticas robustas ao longo do ciclo de vida do desenvolvimento de software, a SQA visa garantir a conformidade com os requisitos do cliente, identificar e mitigar riscos, e estabelecer uma base sólida para a produção de software de excelência. A implementação efetiva de práticas de SQA resulta em benefícios tangíveis, incluindo a redução de defeitos, a otimização do desempenho, e a melhoria da satisfação do cliente. Além disso, ao criar uma cultura de avaliação contínua, treinamento e inovação, a SQA contribui para o desenvolvimento de produtos que atendem não apenas às expectativas, mas também estabelecem padrões elevados de qualidade na indústria de software. Sabendo disso, uma possível solução para a problematização proposta, está descrita a seguir:</p><p>Estratégias e Práticas de SQA Implementadas</p><p>1. Definição de Padrões e Diretrizes:</p><p>· Estabelecimento de normas para codificação, documentação e testes.</p><p>· Utilização de padrões reconhecidos, como ISO/IEC 25010, para orientar o desenvolvimento.</p><p>2. Revisões e Auditorias:</p><p>· Realização de revisões de código e auditorias de processos regularmente.</p><p>· Envolvimento de uma equipe independente para garantir imparcialidade.</p><p>3. Testes Abrangentes:</p><p>· Desenvolvimento de planos de teste abrangentes, incluindo testes unitários, de integração e de sistema.</p><p>· Automação de testes sempre que possível para garantir consistência e eficiência.</p><p>4. Gestão de Mudanças:</p><p>· Implementação de um sistema eficaz de controle de mudanças.</p><p>· Avaliação de impacto e revisões sistemáticas antes da aprovação de alterações.</p><p>5. Treinamento Contínuo:</p><p>· Oferta de treinamentos regulares para a equipe de desenvolvimento.</p><p>· Fomento de uma cultura de aprendizado contínuo e melhoria.</p><p>Resultados</p><p>A implementação efetiva das práticas de SQA resultou em diversos benefícios para o projeto. A conformidade com os requisitos do cliente foi consistentemente atingida, evitando retrabalho e garantindo a satisfação do cliente. A identificação</p><p>precoce de riscos permitiu ações preventivas, minimizando impactos negativos. A introdução de padrões elevou a qualidade geral do código e da documentação. A gestão de mudanças eficiente assegurou a estabilidade do sistema, mesmo diante de atualizações frequentes. Além disso, a cultura de treinamento contínuo fortaleceu as habilidades da equipe, contribuindo para o sucesso do projeto e consolidando a importância da SQA no desenvolvimento de software.</p><p>Conforme destacado por Pressman (2021), a garantia da qualidade refere-se aos procedimentos, aos métodos e às ferramentas empregados por profissionais de Tecnologia da Informação para garantir padrões previamente estabelecidos entre as partes ao longo de todo o ciclo de vida do desenvolvimento de um software. É saliente que os padrões de qualidade podem variar conforme as características específicas de cada projeto, e, portanto, a garantia da qualidade deve pautar-se pelos acordos estabelecidos entre as partes envolvidas.</p><p>A Figura 3 apresenta os seguintes elementos da SQA: (1) um processo dedicado à SQA; (2) tarefas específicas voltadas para garantia e controle da qualidade, incluindo revisões técnicas e uma estratégia de testes multicamadas; (3) a implementação eficaz de práticas de engenharia de software, compreendendo métodos e ferramentas; (4) o controle abrangente de todos os artefatos de software e das alterações realizadas nesses produtos; (5) um procedimento destinado a assegurar a conformidade com os padrões de desenvolvimento de software, quando aplicáveis; e (6) mecanismos de medição e geração de relatórios.</p><p>garantia de qualidade de software abrange diversas preocupações e atividades relacionadas à gestão da qualidade de software. As principais áreas incluem (Pressman, 2021):</p><p>· Padrões: garantir que os padrões estabelecidos por organizações como o IEEE e a ISO sejam seguidos na engenharia de software, seja por escolha da organização ou da imposição de clientes.</p><p>· Revisões e Auditorias: realizar revisões técnicas para identificar erros e auditorias para assegurar a conformidade com diretrizes de qualidade no trabalho de engenharia de software.</p><p>· Testes de Software: garantir o planejamento e a execução eficiente de testes para encontrar erros e alcançar os objetivos de qualidade.</p><p>· Coleta e Análise de Erros/Defeitos: medir o desempenho mediante coleta e análise de dados de erros para entender como são introduzidos e quais atividades são mais eficazes para sua eliminação.</p><p>· Gerenciamento de Mudanças: assegurar que práticas adequadas de gerenciamento de mudanças sejam implementadas para evitar confusões e garantir qualidade.</p><p>· Educação: liderar o aperfeiçoamento do software por meio da educação contínua de engenheiros de software, gerentes e outros envolvidos.</p><p>· Gerência dos Fornecedores: garantir a qualidade do software adquirido de fornecedores externos, sugerindo práticas de garantia de qualidade e incorporando requisitos de qualidade em contratos.</p><p>· Administração da Segurança: implementar políticas de segurança para proteger dados em todos os níveis e garantir a segurança do software contra alterações não autorizadas.</p><p>· Proteção: avaliar o impacto de falhas de software, especialmente em sistemas críticos, e iniciar medidas para redução de riscos.</p><p>· Gestão de Riscos: assegurar que as atividades de gestão de riscos sejam conduzidas adequadamente e que planos de contingência relacionados a riscos sejam estabelecidos.</p><p>· Além disso, a SQA trabalha para garantir que atividades de suporte ao software, como manutenção, suporte on-line, documentação e manuais, sejam realizadas com qualidade como preocupação principal.</p><p>Métricas de qualidade</p><p>Métricas de software são características mensuráveis de um sistema, uma documentação ou um processo de desenvolvimento. Podem ser métricas de controle, relacionadas aos processos de gerenciamento, ou às métricas de previsão, associadas às características do software. Exemplos incluem o tamanho do código, índice Fog (medida de legibilidade), número de defeitos relatados e complexidade ciclomática de um módulo.</p><p>A medição de software envolve derivar valores numéricos ou perfis para atributos de componentes de software, sistemas ou processos. Esses valores são comparados entre si e com padrões para avaliar a eficácia de métodos, ferramentas e processos de software. Por exemplo, ao introduzir uma nova ferramenta de teste, é possível registrar o número de defeitos antes e depois do uso da ferramenta para avaliar sua eficácia.</p><p>O objetivo a longo prazo da medição de software é substituir revisões para julgar a qualidade do software. Idealmente, métricas de software podem ser usadas para avaliar sistemas com base em diversas métricas, deduzindo um valor para a qualidade. No entanto, apesar dessa aspiração, avaliações automatizadas de qualidade ainda não estão próximas de se tornarem realidade (Sommerville, 2018).</p><p>As métricas de controle e previsão desempenham um papel crucial na tomada de decisões de gerenciamento, conforme ilustrado na Figura 4. As métricas de processo guiam os gerentes ao determinar se alterações no processo são necessárias, enquanto as métricas de previsão ajudam a estimar o esforço necessário para implementar mudanças no software (Sommerville, 2018).</p><p>Há duas abordagens para o uso de medições em um software de sistema (Sommerville, 2018):</p><p>· Atribuir valores aos atributos de qualidade do sistema, avaliando características individuais dos componentes do sistema, como sua complexidade ciclomática, e agregando essas medições para avaliar atributos de qualidade do sistema, como manutenibilidade.</p><p>· Identificar os componentes do sistema que não atendem aos padrões de qualidade. As medições podem destacar componentes individuais com características que se desviam da norma. Por exemplo, medir a complexidade de componentes pode revelar aqueles com maior propensão a bugs devido à dificuldade de compreensão associada à alta complexidade.</p><p>image1.png</p><p>image2.png</p><p>image3.png</p>