Mais um pouco de teste de software

 

Ao ler o post “Um pouco de teste de software”, o professor Ismael da Silva (FATEC Ourinhos) me enviou um trecho de código, em C, com as seguintes questões:

 

# include <stdio.h>

main ()

{

     int iIndice, iNum, iR, iTpar = 0, iTimpar = 0, iCpar = 0, iCimpar = 0;

     printf(“Digite 5 números: “);

     for (iIndice = 0; iIndice < 5; iIndice++)

     {

         scanf (“%i”,&iNum);

         iR = iNum / 2;

         iR = iNum – iR * 2; 

         if (iR == 0)

         {

             iTpar = iTpar + iNum;

             iCpar ++;

         }   

         else

         {

             iTimpar = iTimpar + iNum;

             iCimpar ++;

         }      

     }

     printf (“Médias dos pares = %i”, iTpar / iCpar);

     printf (“\nMédias dos impares = %i”, iTimpar / iCimpar);

     getch();

        

}

 

Caro professor J. A. Primeiramente, gostaria de parabenizá-lo pelas discussões geradas. Já que V. Sa. entrou em um assunto que toca diretamente a minha área de pesquisa, segurança e TI, vou lhe fazer a seguinte provocação: Qual o problema com o programa acima? E quais as implicações deste problema em um sistema computacional?

Nas próximas semanas apresentarei as questões delineadas pelo professor Ismael aos alunos que cursam e já cursaram a disciplina de engenharia de software. Espero compartilhar o resultado com vocês.

Por fim, acredito que seria interessante que os leitores, principalmente, aqueles que estão trabalhando na produção de software, apresentassem as questões em seu ambiente produtivo. Fiquem a vontade para compartilhar os resultados conosco.

José Augusto Fabri

7 Responses to “Mais um pouco de teste de software”

  1. Bráulio Bezerra Says:

    Posso tentar achar alguns problemas?

    1. Onde estão os comentários?
    2. Onde está a documentação?
    3. Onde estão os testes?
    4. A entrada é separada por espaços, por , por vírgulas?
    5. E o tratamento das entradas erradas?
    6. Eu sei que o sistema de tipos em C não é muito bom, mas utilizar i antes das variáveis inteiras pode ser considerado um exagero por alguns.
    7. A função getchar não fica na biblioteca e não é padrão. Desse jeito que está o programa não compila em alguns compiladores de C. Isso pode atrapalhar a portabilidade.
    8. O tipo de retorno de main não é definido, apesar de ser ‘int’. Como conseqüência, fica faltando o comando return.
    9. Apenas pessoas que falam português poderiam usar esse programa.

  2. 1. Não há documentação alguma do que esse código é suposto fazer.

    2. O operador de divisão é usado de forma imprudente, e pode gerar erro de execução.

    3. Sugiro ao autor do programa consultar a documentação sobre o operador %.

    4. A função getch não pertence à interface , e acho que não faz parte da biblioteca padrão do C.

    5. Entre os idiomatismos i++, ++i e i += 1, o escolhido (pós-incremento) é o menos adequado nas situações onde aparece.

    6. O código mistura alegremente entrada, saída e processamento. Acho uma prática bastante indesejável.

    7. Ter uma variável de índice chamada iIndice é muito “preciosismo”. Até os matemáticos usam i, j, k para variáveis de índice.

    8. Não gostei do posicionamento do caractere de quebra de linha nos strings de saída.

  3. Além do programa não funcionar, não ter seguido uma metodologia, ele ainda pode causar problemas de segurança?
    Não entendi nada, mas achei muito interessante. :D

  4. Joigler Estevam Says:

    Bráulio Bezerra e David, pelo que eu li voces entendem bem de testes, trabalham com isso???

  5. Raimundo Barreto Says:

    Fora os “erros metodológicos” citados eu acrescentaria:

    1) Se todos os números forem par (ou ímpar) no fim tem uma divisão por 0!
    2) Outro erro está na divisão do printf cuja média pode dar um número
    real e não somente inteiro… por exemplo entre com os números 1 5 5 2
    6. A média dos ímpares daria 3.666… mas a média dá resultado 3…

    Muito interessante! Gostaria de saber de mais erros.

  6. parabéns!!!!!!!!!

  7. Oi Joigler,

    A resposta é não, eu não trabalho especificamente com teste. Programo em C há um certo tempo, e apenas uso teste como ferramenta para verificar o código que eu desenvolvo. Outras ferramentas que uso são:
    1. leitura e processamento dos warnings do compilador;
    2. uso de assert;
    3. (re)leitura do código escrito;
    4. valgrind.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: