Professional Documents
Culture Documents
Segunda Edio
Novatec
Captulo 1
O que qualidade?
A qualidade relativa. O que qualidade para uma pessoa pode ser falta de qualidade para outra. G. Weinberg
A idia de qualidade aparentemente intuitiva; contudo, quando examinado mais longamente, o conceito se revela complexo. Definir qualidade para estabelecer objetivos , assim, uma tarefa menos trivial do que aparenta a princpio. Este captulo enfatiza como a noo de qualidade pode ser relativa e introduz as dificuldades bsicas relacionadas ao tratamento desse assunto.
1.1 Histria
Embora o controle de qualidade e o uso de padres como ISO sejam algo que tenha atrado bastante ateno nas ltimas dcadas, historicamente o assunto muito antigo. Existem relatos de que h mais de quatro mil anos os egpcios estabeleceram um padro de medida de comprimento: o cbito. Essa medida correspondia ao comprimento do brao do fara reinante. Curiosamente, a troca de fara significava que a medida deveria ser atualizada. Todas as construes deviam ser realizadas utilizando o cbito como unidade de medida. Para isso eram empregados bastes cortados no comprimento certo e periodicamente a cada lua cheia o responsvel por uma construo devia comparar o padro que estava sendo utilizado com o padro real. Se isso no fosse feito e houvesse um erro de medio, o responsvel poderia ser punido com a morte [Juran e Gryna, 1988]. O resultado da preocupao com rigor evidente na construo das pirmides, em que os egpcios teriam obtido precises da ordem de 0,05%1.
1
Site Internet da EOS (Egyptian Organization for Standardization and Quality Control) (2005).
17
18
Qualidade de Software
A histria da qualidade prosseguiu com inmeros exemplos de resultados extraordinrios: os grandes templos construdos na Grcia e Roma antigas, os feitos de navegao no sculo XVI, as catedrais medievais. Em todas essas realizaes, no se dispunha de instrumentos de preciso nem tcnicas sofisticadas. Na Frana, os construtores de catedrais utilizavam simples compassos e cordas com ns a intervalos regulares para desenhar e construir edifcios [Vincent, 2004]. Em geral, espera-se que obter mais preciso exija mais recursos ou mais tecnologia. Assim, a regulagem da carburao de um motor de um veculo moderno no pode ser feita como no passado, quando, com uma lmpada, um mecnico conseguia acertar o ponto do distribuidor. O exemplo dos antigos egpcios nos faz pensar uma questo curiosa: como teriam sido as pirmides se, na poca, os trabalhadores dispusessem de medidores a laser? Como veremos ao longo do livro, a qualidade de software ainda depende principalmente do correto emprego de boas metodologias pelos desenvolvedores. Embora eles sejam apoiados por vrias ferramentas, ainda restam problemas srios sem tal suporte. As tcnicas para verificao automtica, dentre as quais a interpretao abstrata [Cousot, 2000] um excelente exemplo, ainda so incipientes. Um grande marco na histria da qualidade foi, com certeza, a revoluo industrial. Esse perodo tambm associado a profundas mudanas econmicas e sociais, como o incio da automao e o surgimento do consumo de massa. Durante essa poca de efervescncia, milhares de novas empresas surgiram. A criao de diversas indstrias levou rapidamente concorrncia entre elas, o que, por sua vez, desencadeou um processo de melhoria contnua que perdura at hoje. O aumento da eficincia tornou-se uma condio imprescindvel para garantir a sobrevivncia. Uma ilustrao clara disso a extino de centenas de fbricas de automveis nos Estados Unidos: no incio do sculo XX, esse pas contava com cerca de 1.800 fabricantes diferentes. Na dcada de 1920 surgiu o controle estatstico de produo. Nas fbricas que produziam grande quantidade de itens tornou-se impossvel garantir a qualidade individual de cada pea, ao contrrio do que se fazia (e ainda se faz) no trabalho artesanal. Dessa forma foi preciso desenvolver mecanismos diferentes e a resposta veio da estatstica. Um dos primeiros trabalhos associados ao assunto o livro publicado por Walter Shewhart em 1931, Economic Control of Quality of Manufactured Product. Shewhart, dos Bell Laboratories, teria introduzido os diagramas de controle (control charts ou Shewhart chart). A Figura 1.1 apresenta um exemplo desse tipo de diagrama.
19
LS M LI tempo
Para entender o diagrama, vamos supor que o problema tratado consista em controlar o dimetro de parafusos. O diagrama apresenta trs linhas verticais que definem o valor mdio e os limites superior e inferior mximos tolerados. Cada ponto no diagrama representa o valor de uma amostra, isto , um parafuso recolhido aleatoriamente na sada da fbrica. O grfico permite verificar se os processos esto sendo bem controlados e se h tendncias de melhora ou piora da qualidade. Por exemplo, se a varincia nas medidas diminui, isso indica uma melhora da fabricao, enquanto um aumento pode indicar um problema, como desgaste das mquinas. Outro exemplo de anlise possvel detectar desvios: se uma srie de medidas est acima do valor mdio, isso pode indicar necessidade de calibragem. Para um processo seguindo uma distribuio estatstica normal2, pouco provvel que uma srie de peas apresente dimenses acima da mdia. Na dcada de 1940 surgiram vrios organismos ligados qualidade; por exemplo, a ASQC (American Society for Quality Control), a ABNT (Associao Brasileira de Normas Tcnicas) e, ainda, a ISO (International Standardization Organization). A Segunda Guerra Mundial tambm contribuiu com o processo, quando as tcnicas de manufatura foram aprimoradas para fabricao de material blico. Na dcada de 1940 o Japo destacou-se como um importante plo no assunto e contribuiu com diversas novas ferramentas: o mtodo de Taguchi para projeto experimental, a metodologia 5S ou, ainda, os diagramas de causa e efeito de Ishikawa, tambm conhecidos como diagramas espinha de peixe. A Figura 1.2 apresenta um diagrama de Ishikawa tpico. A tcnica utilizada para identificar as causas de um problema e, de preferncia, deve ser utilizada durante uma reunio em que todos os envolvidos discutam livremente, sem sanes. Um problema especfico que afeta a empresa representado no eixo central do diagrama. Em seguida, linhas diagonais so includas contendo elementos que fazem parte
2
20
Qualidade de Software
do cenrio como trabalhadores e mquinas. Tais elementos so chamados de categorias Depois, para cada categoria procura-se identificar fatores (causas) que . possam contribuir para aumentar ou reduzir o problema (efeitos). Dependendo do tipo de indstria, sugere-se usar diferentes categorias: para manufatura: mo-de-obra, mtodos, materiais e mquinas; para servios e administrao: equipamentos, procedimentos, polticas e pessoas.
Materiais Falta de luvas Trabalhadores Distrao por cansao Acidentes de trabalho Treinamento Mtodos Antiquadas Mquinas
No ps-guerra, o impulso recebido pelas indstrias se manteve. Os computadores digitais j estavam em uso nessa poca, embora estivessem restritos sobretudo a meios militares e acadmicos. Alguns anos mais tarde, quando as mquinas se tornaram mais acessveis e um maior nmero de pessoas as utilizava, a qualidade dos softwares comeou a se mostrar um objetivo mais importante.
21
E como eram as mquinas grandes nessa poca? At a dcada de 1970 ainda eram utilizadas as memrias de ncleo (core memory): caras, lentas e consumidoras de muita energia. A memria semicondutora s foi criada em 1966 (por Robert H. Dennard, na IBM) e fabricada, pela primeira vez, pela Intel, em 1970. Logo aps, em 1971, surgiu o primeiro microprocessador em silcio: o Intel 4004, uma CPU de 4 bits utilizando menos de 3 mil transstores, mas com tanto poder de processamento quanto o ENIAC, que possua 18 mil vlvulas. Assim, um computador grande em 1960, era uma mquina ocupando uma sala , de dezenas de metros quadrados! A mudana tecnolgica teve um efeito dramtico na produo de software. Num breve perodo de tempo, os recursos de hardware aumentaram muito e permitiram que produtos mais complexos fossem criados. Traando um paralelo, seria como se os engenheiros civis, depois de anos construindo apenas casas ou pequenos prdios de 2 ou 3 andares, se vissem repentinamente com a tarefa de construir grandes arranha-cus [Dijkstra, 1972]:
A maior causa da crise do software que as mquinas tornaramse vrias ordens de magnitude mais potentes! Em termos diretos, enquanto no havia mquinas, programar no era um problema; quando tivemos computadores fracos, isso se tornou um problema pequeno e agora que temos computadores gigantescos, programar tornou-se um problema gigantesco.
Mas a situao ainda era agravada por outro motivo: os primeiros programadores no possuam ferramentas como dispomos hoje. A tarefa que enfrentavam poderia ser comparada, em certos aspectos, a erguer prdios empilhando mais e mais tijolos. Embora a noo de ciclo de vida j houvesse sido esboada [Naur e Randell, 1968], no havia tcnicas consagradas de trabalho. No havia escolas ou sequer a profisso de programador; as pessoas aprendiam e exerciam essa atividade de maneira emprica [Dijkstra, 1972]: "... em 1957, casei-me e os ritos holandeses requerem declarar a profisso; declarei ser um programador. Mas as autoridades municipais de Amsterd no aceitaram, com base em que no havia tal profisso". Provavelmente a primeira vez em que se utilizou o termo Engenharia de Software foi em uma conferncia com esse nome, realizada em 1968, na Alemanha. A conferncia foi realizada por uma entidade que, a rigor, no possua nenhuma ligao com a rea: o Comit de Cincia da NATO (North Atlantic Treaty Organisation Organizao do Tratado do Atlntico Norte). Curiosamente, j havia instituies relacionadas com informtica: a primeira delas foi a ACM (Association for Computing Machinery), criada em 1947 e que edita uma revista cientfica, Communications of the ACM, desde 1957.
22
Qualidade de Software
Hoje, mais de trinta anos depois, quais so os problemas enfrentados na construo e utilizao de software? Ao lermos o relatrio da conferncia da NATO de 1968 e outros documentos produzidos na dcada de 1970, fazemos uma descoberta assustadora: os problemas so os mesmos que encontramos atualmente. Faamos uma pequena lista: cronogramas no observados; projetos com tantas dificuldades que so abandonados; mdulos que no operam corretamente quando combinados; programas que no fazem exatamente o que era esperado; programas to difceis de usar que so descartados; programas que simplesmente param de funcionar.
Os erros parecem estar por toda parte, como uma epidemia que no conseguimos controlar depois de dcadas de trabalho e pesquisas. O ltimo exemplo e certamente mais conhecido o bug do milnio, quando foi predito o apocalipse da sociedade da informao: avies cairiam, contas bancrias seriam zeradas, equipamentos militares perderiam o controle e bombas seriam disparadas. Embora seja verdade que poucos problemas de fato aconteceram, tambm verdade que o erro realmente existia em muitos sistemas. O assunto ser provavelmente lembrado no ano de 2100 como uma boa piada. Hoje em dia, contudo, no h motivos para rir, pois a pergunta permanece: no somos capazes de produzir software de qualidade? Essa questo no simples de ser respondida, mas podemos aventar algumas razes. O aspecto no repetitivo do desenvolvimento de software torna essa atividade difcil e, sobretudo, em boa medida imprevisvel. Apenas uma pequena parcela da construo de software corresponde a atividades que poderamos chamar de "montagem Quando se constri uma rodovia ou, por exemplo, uma ponte, os . processos de clculo de estruturas, correo de inclinaes, preparao do terreno e pavimentao so conhecidos. Algumas vezes ocorrem surpresas, como descobrir que o solo de uma seo da estrada no correspondia ao que era imaginado; mas em geral, as diversas etapas so cumpridas sempre da mesma maneira. durante o projeto dessa ponte que h mais questes em aberto e solues de engenharia devem ser desenvolvidas. Assim, por exemplo, antes do projeto no se conhece o traado que ser mais confortvel, seguro e econmico para os futuros usurios. O problema comentado na Figura 1.3.
23
Qualidade do ao e concreto apropriada? Especificaes obtidas por clculos e simulaes Dimensionamento dos pilares correto? Incertezas existentes nos ensaios de material Incertezas no clculo estrutural
Desconhecido Conhecido
Uma vez terminado o projeto, contudo, existem respostas para a maior parte das questes que dizem respeito realizao. Os carros que iro trafegar no mudaro de largura nem de comprimento repentinamente; a quantidade de veculos e, portanto, o peso mximo a ser suportado so calculados utilizando-se software de simulao. Fatores como vento podem ser superdimensionados para garantir margens de segurana. Dificilmente um pilar dever ser deslocado cinco centmetros para a direita depois que a construo j foi iniciada! Comparativamente, quando estamos tratando de software, essa zona de sombra que envolve fatores desconhecidos bem mais abrangente. Quem j trabalhou no desenvolvimento de software sabe como comum resolver problemas semelhantes a encurtar ou alongar uma ponte, apenas alguns centmetros alguns dias antes de sua inaugurao. A Figura 1.4 ilustra alguns aspectos.
Projeto e implementao de software
Desconhecido Conhecido
Gap semntico
As dificuldades em informtica comeam durante as etapas iniciais de um projeto: delimitar o escopo de um sistema est longe de ser uma tarefa trivial. A volatilidade dos requisitos (Captulo 9) uma das maiores causas de insucesso de projetos de software. Uma mudana nas necessidades declaradas por um usurio pode repercutir em vrios elementos da estrutura do programa. Mais tarde, embora
24
Qualidade de Software
a soluo tenha sido projetada, ainda no se conhecem de antemo e em detalhes os algoritmos que efetivamente resolvem o problema. Em conseqncia, comumente se considera que bastante difcil prever como ser o programa acabado apesar de a estrutura toda j ter sido desenhada. No bastassem as dificuldades inerentes a esse carter mutvel ou voltil do software, as pessoas que trabalham com ele contribuem bastante para piorar os problemas. O trabalho intelectual que necessrio construo de programas pode, ao mesmo tempo, influenciar na existncia de obstculos ao sucesso de um projeto. Um exemplo de dificuldade tratar os aspectos no tcnicos que vm tona quando se realizam revises de projetos [Yourdon, 1989]:
Mas voc no pode remover o elemento humano de uma reviso. O autor, cujo trabalho de arte est sendo revisto, possui sentimentos e emoes humanas. E os revisores tambm possuem seus prprios sentimentos.
Conciliar a necessidade de disciplina fundamental para garantir uma certa previsibilidade de resultados com o carter relativamente aleatrio da criao de solues talvez seja um dos maiores desafios. As metodologias tm sido desenvolvidas, testadas e adaptadas h dcadas, buscando reduzir a um mnimo a necessidade de inventar solues Em grande parte, as metodologias tm carter pedaggico: . mostram o que preciso fazer para conduzir um projeto, quais procedimentos adotar e como realiz-los, como trabalhar em equipes de maneira a evitar a veiculao de informaes dbias etc. Alm de metodologias, outro aspecto que contribui para combater o problema o desenvolvimento de tecnologias e ferramentas. Existem vrias tarefas que podem ser automatizadas, diminuindo a carga de trabalho das pessoas e, ao mesmo tempo, garantindo uniformidade: quando uma ferramenta que executa a tarefa, h menos chances de o resultado ser diferente porque diversas pessoas a utilizaram. Mas a discusso sobre problemas de software no estar completa sem abordar o assunto que o foco deste livro: a qualidade. Os mtodos e ferramentas de engenharia de software servem, entre outras coisas, ao propsito de garantir, ou pelo menos facilitar, a obteno do objetivo de ter qualidade nos programas. E qualidade um conceito que, do ponto de vista da engenharia, bastante complexo. Sem definir precisamente qual esse objetivo a atingir, o uso de todo arsenal de engenharia de software de que dispomos pode se revelar menos eficaz. Este um dos objetivos principais deste livro: auxiliar a definir o alvo a ser atingido e discutir como aplicar a engenharia de software para aproximar-se o mximo possvel do resultado desejado.
25
Isto nos leva famosa definio de Crosby [1992]: "A qualidade conformidade aos requisitos". Essa definio interessante, pois deixa explcito o fato de que preciso um ponto de referncia para julgar um produto. Traz embutida a idia de como efetuar esse julgamento e, por fim, mostra como o processo todo pode ser documentado, analisado e os resultados transmitidos a outras pessoas. H, contudo, trs fatos que perturbam essa definio, os quais preciso conhecer para poder aplic-la corretamente.
26
Qualidade de Software
Em primeiro lugar, a definio nos deixa com a tarefa de definir o que conformidade. Em alguns casos, isso se traduz em uma deciso booleana: uma lmpada de 60W no uma lmpada de 100W Mas, em geral, h poucos requisitos que possam . ser tratados dessa maneira. O que se faz, ento, especificar margens de preciso: uma lmpada que consuma 59,9W melhor que outra consumindo 60,1W Esse . exemplo nos leva naturalmente a considerar que possam existir intensidades ou graus de qualidade. Podemos escrever isso assim:
27
Isto , com freqncia, um problema no muito simples de resolver. Projetos grandes, envolvendo muitas funes e pessoas diferentes (diversos tipos de operadores, usurios das informaes, gerentes etc. coletivamente chamados de stakeholders), provavelmente tm mais chances de conter requisitos conflitantes. Isso ocorre por falta de consenso em relao a como certas tarefas devem ser feitas, ou mesmo para decidir quais tarefas so mais importantes implementar ou no. Em cenrios desse tipo, pode existir uma deficincia de dilogo que antecede o projeto do software. Os desenvolvedores do produto podem se encontrar face a um duplo problema: resolver ou, pelo menos, minimizar o problema organizacional do cliente que contrata o desenvolvimento do software e, depois, obter uma especificao coerente que atenda aos interessados.
28
Qualidade de Software
Segundo ponto, considere que algum deseja comprar outro veculo, mas o problema a ser resolvido deslocar-se vez por outra dentro da cidade e, nos finais de semana, transportar um saco de rao de 200 kg para os ces que cuidam do stio da famlia. Nesse caso evidente que teto solar ou mesmo conforto tenham menor importncia. Como foi ressaltado antes, os requisitos foram especificados por uma pessoa: logo, preciso saber claramente do que ela precisa. Mais do que isso, preciso saber como cada pessoa envolvida no projeto cliente, projetistas, gerentes influi sobre os requisitos para conhecer com preciso o objetivo que se pretende alcanar.
isto , qualidade de software e bugs so coisas opostas e incompatveis. Assumir essa idia cegamente faz tanto sentido quanto dizer que um programa que tem uma instruo goto no um programa estruturado. A maioria das pessoas, sobretudo estudantes de computao, fica em geral chocada com a idia de que um programa de computador possa ter erros e continuar sendo um produto de qualidade. Segundo se pensa geralmente, um bug (inseto em ingls veja a Figura 1.5) algo a ser exorcisado a todo custo, pois no possvel dizer que um programa errado um programa bom. Como poderia ser diferente?
29
Figura 1.5 Foto de um inseto encontrado em um computador em 1945 (Copyright: U.S. Naval Historical Center Photograph).
Vamos considerar essa questo luz de alguns exemplos. O dilema gerencial: este caso narrado por Weinberg [1994]: a histria de um programa de edio de texto. O programa apresentava falhas que apareciam apenas sob certas condies, como trabalhar com textos muito longos. Procurado por algum insatisfeito, o fabricante do programa explicou que estava ciente da falha, mas que esta era rara: menos de 1% dos clientes tiveram o problema. Alterar o cdigo para corrigir o defeito implicaria mudanas profundas e poderia introduzir novos problemas um risco muito grande. Assim, em nome dos 99% de clientes satisfeitos, o gerente tinha razo em no corrigir o programa. A importncia relativa I: muitos programas de computador possuem defeitos conhecidos e considerados pelos usurios como de menor importncia. Como exemplo, vrios jogos possuem imperfeies no tratamento de coliso entre slidos e, assim, objetos atravessam paredes, o que no impede que os usurios continuem se divertindo e mesmo recomendando tais produtos. A importncia relativa II: o sistema de tipografia TEX lendrio pela qualidade de resultado impresso, por ser gratuito e pelo fato de que, depois de anos, poucos erros terem sido encontrados. Entretanto, seu uso requer conhecimento especializado, exigindo certo tempo de adaptao mesmo para um usurio que seja programador. A ferramenta continua sendo a
30
Qualidade de Software
escolha preferida para escrita de livros cientficos, artigos e teses, mas no adequada para enviar rapidamente um oramento a um cliente, contendo algumas tabelas com diversos formatos e alguns grficos: nesses casos ser prefervel usar outro programa. A qualidade de um software, como se pode ver, depende de se decidir o que significa qualidade! No um assunto que possa ser tratado com dogmas: No cometers erros de programao Em vez disso, preciso adotar uma perspectiva . tcnica e considerar diversos fatores que afetam a construo do produto e que influenciem no julgamento dos usurios: tamanho e complexidade do software sendo construdo; nmero de pessoas envolvidas no projeto; ferramentas utilizadas; custos associados existncia de erros; custos associados deteco e remoo de erros.
Um estudante de computao, cercado de provas no final de um perodo letivo, normalmente est pronto para aceitar uma nota 7 em troca de alguns bugs. Um programador de uma empresa pressionado por cronogramas e chefes irritados, em rarssimos casos consegue lutar contra o ambiente e dizer: Vou atrasar a entrega para realizar mais testes Finalmente, uma equipe militar responsvel pelo programa de . controle de um mssil, provavelmente, no iniciaria um projeto sem haver includo no estudo de viabilidade condies estritas de oramento, realizao de testes e revises, que, certamente, no existem nos dois casos anteriores. H um conceito chamado de zero-defeitos; trata-se com certeza, de um conceito interessante e um ideal a ser buscado. Mas, de um ponto de vista de administrao e de engenharia, mais realstico se perguntar at que ponto pode-se evitar os erros em um dado projeto e, o que decisivo, qual o custo e quais os lucros esperados.
31
1.6.1 Defeito
Defeito uma imperfeio de um produto. O defeito faz parte do produto e, em geral, refere-se a algo que est implementado no cdigo de maneira incorreta. Considere, por exemplo, o cdigo a seguir:
a = input (); c = b/a; d = a ? b/a : 0;
A expresso que calcula o valor para c pode apresentar um problema: se a varivel a contiver um valor nulo, a operao de diviso por zero provocar algo anormal na execuo do programa. A linha seguinte, onde uma atribuio feita varivel d, no apresenta esse problema. O comportamento anormal do programa provavelmente um crash, isto , interrupo da execuo provocado pela diviso b/a. A primeira idia, ento, dizer que essa linha de cdigo defeituosa. Existe, entretanto, uma outra hiptese: o defeito pode estar na rotina input(): imagine que a especificao dessa rotina estabelea que ela no deve jamais retornar um valor nulo. Nesse caso, o erro foi cometido pelo programador responsvel por essa rotina. Esta segunda hiptese bastante razovel, pois para a maioria dos programas irrealstico preceder cada operao de diviso com um teste if. Mas a palavra defeito no significa apenas um problema que faz um programa no funcionar. Um programa defeituoso, segundo o dicionrio Houaiss, um programa que no funciona como deve . Realizar testes e gastar tempo com revises apenas procurando possibilidades de crash no suficiente. claro que um programa que sofre muitas paralisaes deve ser corrigido, mas existem outros tipos de erros a serem tratados. Considere o exemplo que aparece na Figura 1.6:
32
Qualidade de Software
O cdigo, em C++, faz o seguinte: atribui 10.000.000.000 varivel a; soma 0.1 a esse valor e o armazena em b; subtrai 10.000.000.000 desse valor.
Qual o resultado desse clculo? Obviamente, 0.1. Mas por que, ento, o programa apresenta a mensagem na tela? Este trecho de cdigo um exemplo bem conhecido dos profissionais que trabalham com clculo numrico. Embora o programa esteja aparentemente correto, h aqui um problema semntico: as variveis possuem uma preciso limitada. Isso significa que certos clculos tero resultados incorretos, no porque o programador escreveu algo errado, mas porque no h casas decimais suficientes para representar os valores. O defeito, neste caso, pode ser resolvido simplesmente trocando os tipos das variveis por uma representao mais adequada por exemplo, um double. Em programas extensos, a situao bem mais complexa, pois existe o fenmeno de propagao de erros de um clculo a outro. Podem existir inmeros outros tipos de defeitos que no resultam na interrupo do programa. Tais erros so menos aparentes, mas podem ser igualmente graves.
1.6.2 Falha
Falha o resultado errado provocado por um defeito ou condio inesperada. No primeiro exemplo de cdigo defeituoso uma diviso por zero possvel que o programa funcione durante longos anos, sem que jamais ocorra uma falha: tudo depender dos valores retornados pela rotina input (). Um exemplo consta na Figura 1.7.
Os defeitos podem existir, mas nem sempre ser visveis. Falhas tambm podem ocorrer por fatores externos ao programa, como corrupo de bases de dados ou invases de memria por outros programas.
33
Como foi dito antes, as falhas que chamam mais a ateno so certamente aquelas em que o programa trava. Contudo, toda falha potencial pode ser perigosa, mesmo se o programa no for paralisado.
34
Qualidade de Software
A gravidade de uma falha de software relativa. Existem falhas com as quais usurios podem conviver, a tal ponto que o sucesso de aplicao de um produto no seja afetado; em outros casos, a falha do programa representa um completo fracasso comercial. Finalmente, h programas de computador responsveis pelo controle de equipamentos valiosos ou que podem colocar em risco a segurana fsica de pessoas. Erros de software j foram responsveis por prejuzos milionrios e mesmo a perda de vidas humanas. A importncia de garantir a qualidade evidente luz desta citao de Pressman [2002]: "O software de computadores... est embutido em sistemas de todas as naturezas: de transportes, mdicos, de telecomunicaes, militares, de processos industriais, de produtos de escritrio,... a lista quase sem-fim". A anlise de falhas que tenham sido identificadas e documentadas abre a possibilidade para que sejam estudadas tcnicas para evitar erros no futuro. Nas prximas sees apresentaremos alguns erros de software cujas conseqncias foram dramticas.
Ariane 5 Flight 501 Failure Report by the Inquiry Board, J. L. Lions. Disponvel na Internet.
Captulo 1 O que qualidade? computador com base nos dados fornecidos pelo SRI-2. Entre esses dados havia um padro de bits significando um cdigo de erro, incorretamente interpretado como informao de vo. O SRI-2 no forneceu dados corretos, mas um cdigo de erro, em virtude de uma exceo de software. O sistema de reserva (SRI-1) no pde ser utilizado porque ele prprio j havia reportado a mesma falha, 72 milissegundos antes.
35
Mas o que, de fato, causou o problema? Uma exceo uma condio inesperada em um programa, que tratada geralmente por uma sub-rotina-padro. Nos exemplos de cdigo apresentados na Seo 1.6, a diviso por zero em um processador Intel causa uma exceo que , em geral, tratada pelo sistema operacional. Tipicamente, o programa simplesmente interrompido. No caso do Ariane 5, a exceo tambm foi proveniente de um clculo: um nmero em ponto flutuante representado com 64 bits foi convertido para um inteiro com sinal de 16 bits. O nmero era demasiado grande para ser representado com 16 bits e isso causou uma falha. Existiam outros pontos do mesmo cdigo com converses semelhantes, mas que eram protegidos por testes. O trecho do software havia sido copiado do Ariane 4, onde funcionava corretamente; no Ariane 5, o clculo se tornava defeituoso em razo do comportamento diferente do foguete. Pior do que isso, tal clculo sequer era necessrio. Embora o erro no cdigo fosse muito pequeno (podendo ser tratado por um simples comando if), fcil perceber que do ponto de vista de projeto o defeito era bem mais complexo. Este exemplo ilustra diversos aspectos que cercam a qualidade de software: o caractere determinante dos requisitos sobre os resultados; a dificuldade de garantir que requisitos sejam consistentes em projetos complexos; Testes no garantem a ausncia de erros (Dijkstra); a dificuldade de verificar e validar programas.
1.7.2 Therac-25
O Therac-25 era uma mquina utilizada em terapia radiolgica. Diferente de suas verses anteriores, era totalmente controlado por um computador, um PDP-11. Enquanto as verses anteriores possuam travas mecnicas para impedir erros de operao, no Therac-25 toda segurana ficou a cargo do software. Infelizmente, havia diversos erros no projeto do equipamento, que levaram morte de pacientes [Lever-
36
Qualidade de Software
son, 1995]. As mensagens de erro no eram claras: algumas se limitavam palavra malfunction, seguida de um nmero entre 1 e 64. A ocorrncia de falhas era bastante comum; no obstante, os operadores teriam recebido a informao de que havia diversos mecanismos de segurana e que, por isso, no era preciso se preocupar. Em 26 de julho de 1985, na Ontario Cancer Foundation, em Ontrio, Canad, um operador acionou a mquina e decorridos cinco segundos ela parou de funcionar. O display mostrava a mensagem: htilt error, erro de posicionamento horizontal. Havia indicaes de no dose, ou seja, nenhuma radiao teria sido emitida; e treatment pause, a mquina estava em simples pausa aguardando para continuar a operao. Como se tratava de mensagens comuns, o operador simplesmente ativou outra vez o Therac-25. A mquina desligou-se novamente com as mesmas mensagens. O operador insistiu um total de cinco vezes, quando, ento, o Therac-25 entrou em um modo de suspenso que obrigava uma reinicializao do computador. Um tcnico do hospital foi chamado e no verificou nada de anormal com o equipamento; no seria a primeira vez que isso teria acontecido. A paciente faleceu em 3 de novembro. Uma autpsia revelou que a superexposio causou tantos danos que, se ela tivesse sobrevivido, seria preciso receber uma prtese para a cabea do fmur praticamente destruda pela radiao. Depois da ocorrncia de outros acidentes em diversos hospitais, o mdico Frank Borger, da Universidade de Chicago, decidiu investigar por seus prprios meios o que estava acontecendo. Ele havia percebido que quando um grupo de novos estudantes iniciava o uso de um Therac-20 (o modelo anterior), cerca de trs vezes por semana havia fusveis queimados no equipamento. Depois de algum tempo, os erros desapareciam misteriosamente, at que um novo grupo comeasse a usar a mquina pela primeira vez. O mdico orientou um novo grupo de alunos a testar vrios tipos de erros diferentes e a serem criativos ao introduzirem parmetros na mquina. Por meio dessa experimentao, ele descobriu que certas seqncias de comandos e de edio de parmetros resultavam em fusveis queimados e outras falhas na operao. O que Borger estava fazendo era uma excelente demonstrao de como isolar um defeito de software. Curiosamente, aparentemente ningum na empresa responsvel, a AECL (Atomic Energy of Canada Limited) pensou em fazer o mesmo. Os acidentes continuaram acontecendo, revelando possveis falhas mecnicas, erros de cdigo e no projeto como um todo. O software continha procedimentos
37
concorrentes em que race conditions4 podiam ocorrer. Mensagens de erro que eram empregadas apenas pelos desenvolvedores do software foram vistas no display por operadores do Therac-25. Finalmente, as declaraes de confiabilidade feitas pela AECL careciam de embasamento; a cada incidente, a empresa publicava relatrios de melhoria. Em um desses relatrios, afirmava-se que a possibilidade de erros havia sido reduzida em cinco casas decimais um resultado, a rigor, muito improvvel. Seis pacientes foram vtimas dos erros de projeto do Therac-25.
Nas ltimas dcadas, tornou-se claro o desdobramento da computao em uma extensa lista de subreas de estudo. Alm de um crescimento explosivo da tecnologia, ocorreu tambm uma evoluo importante dos alicerces, isto , da cincia. A quantidade de informao aumentou de tal modo que a especializao profissional tornou-se comum, seno mesmo necessria5 se for desejado um nvel de excelncia. Uma das reas de computao a Engenharia de Software passou por um estudo de uma comisso internacional de especialistas, visando a uma definio das fronteiras que a delimitam. Esse estudo foi conduzido no mbito da IEEE e chama-se SWEBOK (Software Engineering Body Of Knowledge, ou Corpo de Conhecimento de Engenharia de Software) [SWEBOK, 2004].
Quando h possibilidade de que dois processos possam acessar uma regio crtica em funo da seqncia em que as instrues so executadas, diz-se que h uma condio de corrida. O leitor convidado a ler Ponto de Mutao, de Fritjof Capra, para uma discusso abrangente sobre os malefcios resultantes da especializao e a importncia da interdisciplinaridade em todas as profisses.
38
Qualidade de Software
A Engenharia de Software dividida no SWEBOK em um total de onze reas de conhecimento (KA: Knowledge Area): requisitos, gerncia de engenharia, projeto, mtodos e ferramentas de engenharia, construo, processo de engenharia, testes, qualidade, manuteno, disciplinas relacionadas e gerncia de configurao. Como acontece em todas as cincias, cada uma dessas divises trabalha em conjunto com as demais e envolve a aplicao (e desenvolvimento) de conhecimentos mesmo em outros domnios. A teoria da computao, por exemplo, no existe como uma entidade separada da matemtica. As classificaes so teis para que possamos organizar o conhecimento e direcionar esforos. Pessoas diversas podem adotar divises um pouco diferentes. Em relao qualidade, o SWEBOK fez uma distino entre tcnicas estticas e dinmicas. As primeiras aparecem sob a rea de conhecimento Qualidade, enquanto as ltimas figuram na rea de Testes. A norma internacional ISO/IEC 25000 SQuaRE, que trata da qualidade de produtos de software, abrange esses dois tpicos. Na verdade, todas as subreas da engenharia de software tm alguma relao com a qualidade de programas de computador. O SWEBOK inclui qualidade como uma rea de conhecimento especfica, mas no deve ser considerada estanque do restante daquele guia. Outro exemplo a Ergonomia de Software: no SWEBOK, tratada dentro de disciplinas relacionadas mas sabe-se que requisitos de ergono, mia podem causar impacto at sobre a segurana de operao de um produto. Um exemplo disso so softwares de controle de trfego areo. Cada rea de conhecimento no SWEBOK subdividida em at dois nveis, formando uma estrutura hierrquica para catalogar os assuntos. No caso da rea de qualidade, essa organizao hierrquica apresentada na Figura 1.8.
Qualidade de Software
Fundamentos de Qualidade de SW Cultura e tica de Eng. de SW Valor e Custo da Qualidade Modelos e Caractersticas de Qualidade Melhoria de Qualidade
Consideraes Prticas Requisitos de Qualidade do Software Caracterizao de Defeitos Tcnicas de Gerenciamento de Qualidade de SW Medio de Qualidade de Software
39
40
Qualidade de Software
As verificaes e validaes (V&V) consistem em atividades com um carter um tanto diferente do que foi dito at aqui, pois nelas se considera a possibilidade de que algo esteja errado no produto. Idealmente, a garantia da qualidade deve trabalhar de maneira a que essas atividades no sejam necessrias. Ao mesmo tempo, isso no significa em absoluto que as atividades de V&V percam importncia ou sejam realizadas com menos intensidade na realidade, o que acontecer o oposto. Se a subrea de Garantia de Qualidade for bem-sucedida, o que se observar com as atividades de V&V ser uma aprovao do produto com pouca ou sequer nenhuma restrio. As auditorias so, em conceito, independentes da construo do software. Uma boa poltica consiste em empregar auditores que no participaram do projeto, ou ainda, auditores externos contratados de outra empresa. A auditoria relacionada tanto a normas famosas, como a ISO 9000, como a padres internos elaborados pela prpria organizao.
41
ao estgio final do desenvolvimento do software. Como prope a norma SQuaRE, o ideal que os valores desejados para as medidas sejam estabelecidos no incio do projeto, durante a fase de definio de requisitos.
1.9 Exerccios
1. Voc alguma vez elaborou um cronograma para um software que tivesse que implementar, como a soluo de um projeto de faculdade? Experimente: procure um projeto em um bom livro de estruturas de dados (por exemplo, Tenembaum, Langsam e Augenstein) e elabore um cronograma. Inclua tempo para estudo e projeto, para programao e testes e acrescente uma margem de segurana. Pea a um colega seu para fazer a mesma coisa e depois compare os resultados. Existem diferenas? Qual cronograma parece mais realstico? A definio de qualidade de Crosby tem ao menos trs pontos positivos e trs pontos negativos, conforme comentado no texto. Relacione esses pontos comparando-os diretamente. Dois clientes ao comprarem uma mesma camisa tero, possivelmente, opinies muito diferentes sobre o produto. Isto um exemplo de rudo de medio de qualidade? Justifique sua resposta. Uma fbrica de tapetes est preocupada em vender seus produtos. Naturalmente, um objetivo ser fabricar tapetes bonitos e de qualidade. a. Aparncia um item separado do modelo de qualidade? Justifique sua resposta. b. Faa uma lista de caractersticas de qualidade para um tapete. c. Na lista que voc fez, identifique uma caracterstica que, quando presente com mais intensidade, aumenta a qualidade; e outra que, quando presente com mais intensidade, reduz a qualidade. 5. 6. Um programa que no tem defeitos pode falhar? Por qu? O que voc pensa dos termos isolar defeitos e isolar falhas: h diferenas? Descreva alguns passos que voc julga necessrios para realizar cada uma dessas atividades (caso estas sejam diferentes). Volte ao problema 4 b. Repita-o para duas faixas de preo diferentes.
2.
3.
4.
7.
42
Qualidade de Software
8. 9.
Elabore uma forma de comparar dois programas para saber qual deles tem mais qualidade. Um editor de textos ASCII utilizado por um usurio inexperiente para abrir arquivos binrios e abortado. Isso significa que o programa pouco seguro? Discuta onde est o problema que causou a falha, entre as alternativas a seguir: a. treinamento do usurio; b. documentao do programa; c. interface do programa (mensagens e informaes apresentadas na interface); d. construo interna do programa.
10. Qual foi o defeito que causou o desastre do Ariane 5? (A resposta no o overflow de uma converso.) 11. (Discusso em grupo) A engenharia de software foi criada para resolver os problemas da crise do software, ou seja, para que os softwares produzidos tivessem qualidade a um preo e prazo razoveis e que pudessem ser corretamente planejados. Mas os fatores que levaram pesquisadores a denominarem o termo crise de software esto ainda presentes. Discuta se o termo crise adequado e quais as principais conquistas dos ltimos trinta anos da rea.