sexta-feira, 11 de fevereiro de 2011

Confiabilidade de software

 

1 - Introdução: Software Embarcado - Desastres?

Com o advento da era tecnológica, computadores, bem como os softwares que rodam neles, estão desempenhando um papel vital em nossa vida diária. Podemos não ter notado, mas aparelhos como máquinas de lavar, telefones, televisões e os relógios, estão tendo os seus componentes analógicos e mecânicos substituído pelos processadores e software.
A indústria de computadores/tecnologia está crescendo exponencialmente. Com um custo reduzido e controle melhorado, processadores e sistemas controlados por software oferecem um design compacto, manipulação flexível, ricos em recursos e custo competitivo. As pessoas costumavam acreditar que o "software nunca quebra." Intuitivamente, ao contrário de peças mecânicas, tais como parafusos, alavancas, ou componentes eletrônicos como transistores, software, capacitor vai ficar "como está" se não houver problemas de hardware que altera o conteúdo ou o caminho de armazenamento de dados. Software não enferruja, não tem idade, e nem desgaste. Não há nenhuma restrição ambiental para operar o software, enquanto o processador é executado em hardware podem operar. Além disso, o software não tem forma, cor, material e massa. Ele não pode ser visto ou tocado, mas tem uma existência física e é crucial para a funcionalidade do sistema. Sem ser provado o contrário, as pessoas otimistas que pensam que uma vez que o software foi criado pode ser executado corretamente para sempre. Uma série de tragédias e caos causado pelo software comprova que isso é errado. Esses eventos sempre terão seu lugar na história. Software pode tomar decisões, mas pode apenas com pouca confiabilidade ( sujeito a bugs/crash) , como seres humanos erram. O destróier britânico Sheffield foi afundado porque o sistema de radar identificou um míssil como "amigável". O que foi uma tragédia para o sistema de defesa.
O software também pode ter pequenos erros imperceptíveis ou desvios que podem culminar em um desastre. Em 25 de fevereiro de 1991, durante a Guerra do Golfo, o erro corte que perdeu 0,000000095 segundos na precisão, fez o míssil Patriot errar em interceptar um míssil Scud. 28 vidas foram perdidas. Corrigir problemas pode não necessariamente tornar o software mais confiável. Pelo contrário, novos problemas sérios podem surgir. Em 1991, depois de mudar três linhas de código em um programa de sinalização, que contém milhões de linhas de código, os sistemas de telefonia local na Califórnia e ao longo da costa leste parou. (interrupção por telefone) .Uma vez funcionando perfeitamente software também pode quebrar se o ambiente de execução for modificado. Depois do sucesso do foguete Ariane 4, o vôo inaugural do Ariane 5 acabou em chamas, enquanto defeitos de projeto no software de controle foram revelados pela rápida velocidade horizontal do novo foguete.
Há histórias muito mais assustadoras para contar. Isto faz-nos saber se o software é confiável em tudo, se devemos usar o software de segurança, aplicações críticas. Aviões, marca passos , máquinas de radioterapia entre varias outras aplicações dentro da área da biomedicina e etc, um simples erro de software pode facilmente reivindicar as vidas das pessoas. A confiabilidade do software é simplesmente uma questão de vida ou morte. Será que estamos incorporando potenciais catástrofes enquanto incorporamos o nosso software em sistemas?

Conceitos-chave:

Definição
De acordo com ANSI, Confiabilidade de Software é definido como: A probabilidade de software operar sem falhas durante um determinado período de tempo em um ou mais ambientes especificados. Apesar de confiabilidade de software ser definida como uma função probabilística, e vem com a noção de tempo, devemos notar que, diferente da tradicional confiabilidade de Hardware, confiabilidade de software não é uma função direta do tempo. Eletrônicos e peças mecânicas podem tornar-se "velho" e se desgastam com o tempo e uso, mas o software não irá enferrujar ou desgastar durante seu ciclo de vida. O software não irá mudar com o tempo a menos que intencionalmente modificado ou atualizado. ( Aqui sim entram as N questões da fase de testes)
Confiabilidade de software é um importante atributo de qualidade de software, juntamente com a funcionalidade, usabilidade, desempenho, facilidade de manutenção, capacidade, instalabilidade, manutenção e documentação. É difícil de alcançar, porque a complexidade do software tende a ser elevada. Embora qualquer sistema com um alto grau de complexidade, será difícil chegar a um certo nível de confiabilidade, desenvolvedores de sistemas tendem a empurrar a complexidade para a camada de software, com o rápido crescimento do tamanho do sistema e a facilidade de fazê-lo através da sua modernização . Apesar da complexidade do software estar inversamente relacionado com a confiabilidade, ele está diretamente relacionado a outros importantes fatores de qualidade de software, especialmente a funcionalidade, capacidade e etc. Ressaltando essas características tendem a adicionar mais complexidade ao software.

Insuficiência no mecanismos de Software

As falhas de software pode ser devido a erros, ambigüidades, omissões ou má interpretação da especificação de que o software deve satisfazer, descuido ou incompetência na escrita de código, testes inadequados ou inesperados uso incorreto do software ou outros problemas imprevistos.Software e hardware têm diferenças fundamentais que as tornam diferentes mecanismos de falha. Falhas de hardware são principalmente falhas físicas , enquanto que falhas de software são falhas de concepção , que são mais difíceis de visualizar, classificar, detectar e corrigir. Falhas no projeto estão intimamente relacionadas com fatores humanos e do processo de design, que não temos uma sólida compreensão. Em hardware, defeitos de projeto também podem existir, mas falhas físicas normalmente dominam.
Software x Hardware  :
Falha : defeitos de software são principalmente erros na sua fase de concepção.
Desgastar-se : Software não desgasta porem erros podem ocorrer sem aviso prévio.
Conceito de sistemas reparáveis : reiniciar periódicamente pode ajudar a resolver problemas de software.
Tempo de dependência e de ciclo de vida : a confiabilidade do software não é uma função do tempo operacional.
Fatores ambientais : Não afetar a confiabilidade do software, exceto que ele pode afetar as entradas do programa.
Previsão Confiabilidade : confiabilidade de software não pode ser previsto a partir de qualquer base física, já que depende totalmente sobre fatores humanos em design. ( Fase de projeto)
Redundância : não é possível melhorar a confiabilidade do software se os componentes de software idênticos são usados.
Interfaces : interfaces de software são puramente conceitual diferente visual.
Taxa de falhas : Normalmente não é previsível a partir de análises separadas.
Construído com componentes padronizados : Bem-entendido e amplamente testada peças padronizadas irá ajudar a melhorar a durabilidade e confiabilidade. Mas, na indústria de software, não observamos esta tendência. A reutilização de código tem sido em torno de algum tempo, mas a uma extensão muito limitada.
Melhoria de Software  - Técnicas de Confiabilidade

Métodos de engenharia de boa qualidade podem melhorar a confiabilidade do software em grande parte.
Antes da implantação de produtos de software, verificação, teste e validação são etapas necessárias. O teste de software é muito utilizado para acionar, localizar e remover os defeitos de software.  Várias ferramentas de análise, tais como análise de tendências, análise de árvore de falhas, defeitos classificação ortogonal e métodos formais, etc, também podem ser usados para minimizar a possibilidade de ocorrência de defeito após o lançamento e, portanto, melhorar a confiabilidade do software.
Após a implantação do produto , dados de entrada/saida podem ser reunidas e analisadas para estudar o comportamento do sistema. Tolerância a falhas ou  previsão de falhas será útil para minimizar a ocorrência de falhas ou o impacto da falha no sistema.

Conclusões

Confiabilidade de software é uma parte fundamental na qualidade do sistema. O seu estudo pode ser categorizadas em três partes: a medição, modelagem e aperfeiçoamento.
Software de modelagem  amadureceu a tal ponto que resultados significativos podem ser obtidos através da aplicação de modelos adequados para o problema. Há muitos modelos existentes atualmente, mas nenhum modelo pode capturar uma quantidade necessária das características do software. Suposições e abstrações devem ser feitas para simplificar o problema. Não existe um modelo único, que é universal a todas as situações.
Software de medição de confiabilidade é ingênuo. Medição está longe de ser comum em software, como no campo da engenharia. "Como é bom o software, quantitativamente?" Tão simples como a pergunta é: ainda não há uma boa resposta.
Confiabilidade de software não pode ser medido diretamente, então outros fatores relacionados são medidos para estimar a confiabilidade do software e compará-lo entre os produtos. Processo de desenvolvimento, faltas e falhas encontradas são todos fatores que garantem a boa qualidade do sistema.
Como o software cada vez mais está se arrastando em sistemas embarcados, devemos nos certificar de que não estamos incorporando catástrofes. Se não for analisada com cuidado, a confiabilidade do software pode ser o gargalo da confiabilidade do sistema como um todo. Garantir isto não é tarefa fácil. Por mais difícil que o problema seja jamais deixe de lado esta questão da qualidade do sistema, pois sem isso não podemos garantir um produto livre de prejuizos e possiveis acidentes irreparaveis.Vamos todos utilizar varios processos já existentes no campo da engenharia de software.

Chato?

Sempre escuto pessoal comentando "ah documentação é chato!" , "pra que eu preciso disso? é só implementar isto e mais aquilo" , ah pergunta é: Você tem certeza que só você irá mexer no sistema? Você vai se lembrar de todas as alterações feitas? . Devemos praticar todos os métodos de engenharia de software se desejamos ter qualidade no nosso sistema, pois é mais facil corrigir uma falha do presente do que ignora-lo e no futuro a somátoria das pequenas falhas tornar um buraco enorme que irá até depreciar a imagem da empresa e dependendo da área que ele for implementado colocar em fase de risco para os utilitarios deste.

Fonte: http://www.ece.cmu.edu/~koopman/des_s99/sw_reliability/

0 comentários:

Postar um comentário