You are on page 1of 8

Análise de Sistemas

(Técnicas de Detecção de Bugs)


Gonçalves A., Santos C.

RESUMO – Este relatório foi criado tendo em vista as Técnicas de Detecção de Bugs utilizadas
no acto da Análise de Sistemas. Assim sendo, este relatório começa por dar uma definição
sobre o que é a Análise de Sistemas e sobre o que é um Bug. De seguida apresenta a
diferença existente entre bug e debug e os principais tipos de bugs existentes. Para finalizar, é
demonstrado o ciclo de vida de um bug e são dados alguns exemplos de software de detecção
de bugs existente.

PALAVRAS-CHAVE – Análise de Sistemas, Técnicas de Detecção de Bugs, Bug, Debug.

————————————————————

1. INTRODUÇÃO

ste relatório foi criado no âmbito da disciplina de Sistemas Informáticos Industriais e

E visa explicar o tema Análise de Sistemas, mais concretamente as Técnicas de Detecção


de Bugs utilizadas durante esta mesma análise.
Nas secções 2, 3 e 4 deste relatório são apresentadas as definições de Análise de Sistemas
e de Bug e é apresentado a diferença existente entre Bug e Debug, respectivamente. De
seguida, na secção 5 e 6 são apresentados os Tipos de Bugs existentes, seguidos da secção 7
onde são apresentadas as perdas que um bug pode causar numa empresa. Na secção 8 são
apresentados os principais métodos de detecção de bugs existentes, sendo estes
apresentados em subsecções. Para finalizar, na secção 9 é demonstrado o ciclo de vida
normal de um bug e na secção 10 são dados alguns exemplos de software de detecção de
Bugs.

2. DEFINIÇÃO DE ANÁLISE DE SISTEMAS

A análise de um sistema consiste na identificação do papel do sistema e dos requisitos que


esse mesmo sistema deve satisfazer. Esta análise é normalmente feita em sistemas
informáticos por Analistas de Sistemas ou mesmo por Programadores, que recorrem a
documentos, informações e materiais necessários para a construção do sistema (de forma a
que este alcance da melhor forma possível os objectivos inicialmente definidos, como por
————————————————
Gonçalves A., André Filipe Nunes Gonçalves, com o nº 62008049 pertence à turma 2 do Curso de Eng.ª Informática,
da EST, Castelo Branco. E-mail: afng14@hotmail.com.
Santos C., Cristiano Miguel Neto dos Santos, com o nº 62008045 pertence à turma 2 do Curso de Eng.ª Informática, da
EST, Castelo Branco. E-mail: cristianomnsantos@hotmail.com.
Cristiano Santos, André Gonçalves: Análise Sistemas (Técnicas de Detecção de Bugs)

exemplo, o custo e o desempenho deste). Uma das fases da análise de sistemas consiste na
verificação de erros (bugs), a qual é tratada neste mesmo trabalho [1] e [2].

3. DEFINIÇÃO DE BUG

Por definição, um bug é a ocorrência de um erro de fábrica num software ou hardware. O termo
provém do ano de 1945, quando foi encontrada uma mariposa num circuito do computador
MARK II, desenvolvido na universidade de Harvard, e que provocava um erro constante no
funcionamento deste mesmo computador. Desde então, este termo é utilizado por engenheiros
para classificar pequenas falhas de máquinas de hardware e software. Pode ser também
definido como falha lógica de um programa, podendo causar discrepâncias nos resultados
esperados, ou impossibilidade de realização de uma funcionalidade de um programa [3] e [4].

Fig. 1 – Demostração de um erro no código que mais tarde dá origem a um Bug de Software

4. BUG E DEBUG

As palavras bug e debug começaram então a fazer parte do dialecto dos programadores para
designar respectivamente a ocorrência de falhas e o processo de depuração dessas falhas [3]
e [4].

5. TIPOS DE BUGS

Os bugs de software podem ter origem nas fases de requisitos de análise e desenho ou de
construção do software. São exemplos de bugs da fase de requisitos:
 Mau entendimento das necessidades dos utilizadores;
 Descrição funcional ambígua ou incompleta;
 Interface gráfica pobre.
A fase de análise e desenho pode originar bugs associados a:
 Arquitectura do software;
 Modelo de dados;
 Interfaces do sistema.
Na fase de construção podem surgir bugs devido:

-2-
Cristiano Santos, André Gonçalves: Análise Sistemas (Técnicas de Detecção de Bugs)

 A uma implementação inadequada de algoritmos de processamento;


 Controlo da lógica;
 Falta de documentação do código;
 Deficiente interligação de componentes.

A fase de testes é crucial para a detecção de bugs recorrendo a um software. Esta fase é
muito importante, uma vez que se esta for mal implementada não contribui para detectar os
bugs. É importante manter um repositório de defeitos de forma a se obter indicadores de
origem dos defeitos e desta forma melhorar continuamente o desenvolvimento de software [1].

6. OUTROS TIPOS DE BUGS

Os bugs podem ser originados devido a:


 Pressão nos prazos de entrega do software;
 Código complexo;
 Complexidade da infra-estrutura;
 Mudanças na tecnologia;
Podem também ser originados por condições ambientais como:
 Radiação;
 Magnetismo;
 Poluição;

7. PERDAS PARA AS EMPRESAS

Dependendo da gravidade do bug, este pode causar diferentes tipos de prejuízo para as
empresas. Por exemplo, a Intel detectou um bug em operações com vírgula flutuante, no seu
Pentium, antes de este ser lançado em 1994, pensando que não seria grave, iniciou a sua
venda sem que o bug fosse corrigido. Teve depois de arcar com uma despesa de 400 milhões
de dólares para repor os chips com defeito [3].

8. MÉTODOS DE DETECÇÃO DE BUGS:

Os métodos de detecção de bugs abaixo descritos existem desde 1999 pelo que é possível
que recentemente existam outros métodos um pouco mais avançados… Mesmo assim, estes
métodos ainda são muito utilizados hoje em dia [5].

8.1. Geração dinâmica do código de um programa

Como o próprio nome indica, este método cria, de uma forma dinâmica, uma sequência de
instruções que formam um programa imediatamente antes da sua execução (em vez de

-3-
Cristiano Santos, André Gonçalves: Análise Sistemas (Técnicas de Detecção de Bugs)

começar este mesmo programa a partir do armazenado em disco). Assim sendo, torna-se
muito mais complicada a introdução de código forasteiro (código inserido por terceiros aquando
da execução do mesmo). Nos casos em que são geradas diversas sequências de instruções
(que sejam equivalentes do ponto de vista do algoritmo) a partir de um único algoritmo
fornecido, a probabilidade de existir distorção no programa devido a influências externas, pode
ser reduzida para um qualquer valor que tenha sido pré atribuído. Para que esta probabilidade
possa desaparecer definitivamente é necessário que, durante a execução do programa, o
sistema execute um programa de correcção automática após um determinado número de
ciclos. Algumas das operações realizadas por este método são implementadas via hardware,
uma vez que a geração de código pode ser demorada (dependendo do número de instruções a
serem geradas).
O funcionamento deste método (tal como o funcionamento do método de encriptação de
todos os programas e dados armazenados em disco) permite proteger os programas contra a
―infiltração‖ de bugs mas, no entanto, não permite detectar bugs que tenham sido introduzidos
durante a criação básica do programa pelo seu programador [5].

8.2. Análise estatística dos programas

Este método fornece um sistema automático que faz a identificação do programa ou do módulo
do programa, utilizando para isso o conceito e os métodos do reconhecimento de padrões
(pattern recognition). O reconhecimento de padrões consiste em colocar dados de entrada nas
classes (categorias especificadas por um número de propriedades que é igual para todos os
elementos pertencentes a esta mesma categoria) responsáveis por extrair os atributos ou
propriedades essenciais que caracterizam esses mesmos dados, existentes no meio dos vários
detalhes ―insignificantes‖. A subdivisão dos elementos em classes é feita de acordo com os
seguintes princípios:
1. Enumeração dos membros da classe (uma vez que uma classe é caracterizada pela
lista dos seus membros);
2. Uniformização das propriedades (uma vez que uma classe é caracterizada por ter
algumas propriedades comuns em todos os seus membros);
3. Agrupamento (uma vez que as imagens de algumas classes são representadas por
vectores, cujos componentes são números reais);

Os softwares de protecção contra bugs baseados neste método nem sempre detectam
bugs existentes num ambiente de software. O principal motivo para que isto ocorra é a
impossibilidade de determinar os atributos que caracterizam inequivocamente uma classe à
qual pertence um programa [5].

-4-
Cristiano Santos, André Gonçalves: Análise Sistemas (Técnicas de Detecção de Bugs)

8.3. Analisador automático de 3 níveis

Este método é utilizado para analisar o software, em termos de segurança, no que diz respeito
à existência de meios de destruição de programas (DPM – Destructive Program Means) num
determinado sistema. Alguns exemplos de DPM’s são os vírus, os cavalos de Tróia, etc. A
forma de análise deste método encontra-se dividida em 3 fases:
1. Análise Lexical.
2. Análise Sintáctica.
3. Interpretação Semântica.

A primeira fase, denominada de Análise Lexical, é onde é feita uma verificação estática
num programa relativa à presença de pedaços de código de DPM’s conhecidos e de outros
pedaços de código suspeitos. De seguida vem a Análise Sintáctica responsável por desmontar
o código de um programa de forma estática e retraduzi-lo num conjunto de construções
algorítmicas, sendo depois feita uma comparação entre estas construções e as construções de
DPM’s conhecidos (existentes numa espécie de Base de Dados denominada de Base de
Conhecimento) e uma identificação entre estas construções e as construções estereotipadas
que são peculiares aos DPM’s. Finalmente, a terceira e última fase é a fase de Interpretação
Semântica, responsável por iniciar os programas num ambiente virtual para obter os seus
códigos actuais após os processos de auto-encriptação e de auto-extracção. Após o rastreio de
um determinado programa no ambiente virtual, deve ser obtido um protocolo de desafio-
resposta relativo ao programa rastreado e ao seu ambiente operacional.
Uma vantagem deste método é a utilização de uma Base de Conhecimento uma vez que
estas Bases de Conhecimento são muito utilizadas noutros meios de detecção de DPM’s. O
volume de dados destas Bases de Conhecimento é muito importante, uma vez que este é o
principal indicador da qualidade destes mesmos meios de detecção de DPM’s.
A desvantagem deste método (e de qualquer outro meio de detecção de DPM’s baseado
no uso de uma Base de Conhecimento) é a impossibilidade de detecção de DPM’s que não
estejam descritas na sua Base de Conhecimento. Além disso, a desmontagem e o rastreio de
um programa podem revelar-se desnecessários se um bug utilizar métodos especiais de
protecção a partir desta mesma desmontagem e deste mesmo rastreio e, existe uma forte
possibilidade de que nem todos os ramos de um programa sejam rastreados [5].

8.4. Criação de um ambiente isolado

A base deste método é o facto de que um sistema computacional só está bem protegido se
estiver isolado. Assim sendo, antes da instalação de um sistema de protecção, é verificada a
existência de bugs nos seguintes elementos:
1. A BIOS (Basic Input/Output System);

-5-
Cristiano Santos, André Gonçalves: Análise Sistemas (Técnicas de Detecção de Bugs)

2. O Sistema Operativo;
3. O Software instalado.

No caso de não serem detectados bugs e de serem excluídas as possibilidades de


conexão de periféricos com o sistema computacional e o uso de portadores externos de
informação, pode-se garantir então que o sistema é eficaz contra bugs e contra a fuga de
informações. De salientar que este método não dever ser aplicado em redes departamentais e
que é aconselhável fazer a verificação da BIOS, do Sistema Operativo e do software instalado
antes de instalar qualquer meio de protecção de informação no sistema [5].

Fig. 2 - Exemplo de um bug na BIOS [6]

9. Ciclo de vida de um Bug

Normalmente, o ciclo de vida de um Bug passa por: [5]


1- Activação: Um bug deve ser iniciado ou activado.
2- Continuidade na memória principal: Após a execução de um programa que tem o bug,
o bug continua em memória principal e continua a sua execução.
3- Suporte para activação repetida: Para que o Bug continue a ser executado após o
reinício do sistema, este deve ser capaz de se auto-activar.
4- Duplicação: Para que o bug se consiga infiltrar noutras máquinas, este deve ter a
capacidade de duplicar o seu código (incorporando esses duplicados noutros objectos).
5- Autodestruição: O bug elimina o seu código e todos os indicadores da sua presença.

10. EXEMPLOS DE SOFTWARE DE DETECÇÃO DE BUGS

Fazer a verificação de bugs (debug) em software muito grande pode tornar-se uma tarefa
complicada. Por isso foram criadas várias ferramentas para que este processo seja mais
rápido, cómodo e seguro. Por exemplo o software Goanna – verifica bugs em programas
escritos em C/C++.

-6-
Cristiano Santos, André Gonçalves: Análise Sistemas (Técnicas de Detecção de Bugs)

A maioria dos softwares de detecção de erros requere que sejam reproduzidos esses
mesmos erros durante a execução do software o que pode fazer com que este processo se
torne ainda mais lento. Por isso, uma equipa de investigadores criou softwares que examinam
directamente o código fonte do programa, detectando os erros. Por exemplo, muitas vezes os
programas são escritos com pedaços de código copiado de outros programas já desenvolvidos,
fazendo com que este fique já ―infectado‖. Para corrigir este problema, estes investigadores
criaram um software chamado CP-Miner que utiliza técnicas para encontrar o código copiado,
examinando-o e corrigindo as falhas. Este software é muito rápido nas verificações que faz,
conseguindo verificar entre 3-4 milhões de linhas de código em menos de 30minutos [7] e [8].

Fig. 3 – Exemplo de funcionamento do software GOANNA

11. CONCLUSÃO

A realização deste relatório permitiu-nos saber os principais métodos de detecção de bugs que
são utilizados pelos softwares de detecção de bugs. Devido à falta de informação existente na
internet relativamente a este tema, os métodos anteriormente apresentados podem-se
encontrar já desactualizados, podendo mesmo existir novos métodos que derivem destes e que
forneçam melhores condições no acto da detecção de bugs.
Em termos de conclusão, podemos dizer que existem vários tipos de bugs, bem como
diversas formas de estes aparecem num programa mas, no entanto, também existem softwares
responsáveis por fazer a detecção da maior parte destes bugs, sendo estes softwares

-7-
Cristiano Santos, André Gonçalves: Análise Sistemas (Técnicas de Detecção de Bugs)

baseados nos métodos de detecção de bugs anteriormente explicados ou, baseados em


evoluções destes mesmos métodos.

12. REFERÊNCIAS

[1] The Free Dictionary, Ano não definido, System Analysis Definition
Disponível em http://encyclopedia2.thefreedictionary.com/Systems+Analysis+Definition
Consulta em 09-12-2010
[2] BusinessDictionary, Ano não definido, System analysis (SA)
Disponível em http://www.businessdictionary.com/definition/systems-analysis-SA.html
Consulta em 09-12-2010
[3] Galeote, 2010, Qual a origem de bugs de software?
Disponível em http://blog.prasabermais.com/2010/05/18/qual-a-origem-dos-bugs-de-software/
Consulta em 07-12-2010
[4] Wikipédia, Ano não definido, Defeitos de software (actualizado em 9-12-2010)
Disponível em http://pt.wikipedia.org/wiki/Defeito_de_software
Consulta em 07-12-2010
[5] I. Shevchenkoª, 1999, Cybernetics and System Analysis, vol 35.
Consulta em 07-12-2010
[6] CentOs, 2009, Kernel Panic during first boot
Disponível em: https://www.centos.org/modules/newbb/viewtopic.php?topic_id=20410
Consulta em 12-12-2010
[7] NICTA, Ano não definido, GOANNA (software bug detection)
Disponível em http://www.nicta.com.au/research/projects/goanna
Consulta em 12-12-2010
[8] HPC, 2006, Reserarchers develop inteligente Bug detection Software
Disponível em http://www.hpcwire.com/offthewire/17886009.html
Consulta em 12-12-2010

Santos C. Engenharia Informática (a frequentar na Escola Superior de Tecnologia do Instituto


Politécnico de Castelo Branco no ano de 2010).

Gonçalves A. Engenharia Informática (a frequentar na Escola Superior de Tecnologia do


Instituto Politécnico de Castelo Branco no ano de 2010).

-8-