O documento apresenta uma aula sobre depuração e documentação de programas. O professor Thomás da Costa introduz os conceitos de depuração, como depurar erros passo a passo, utilizando ferramentas como breakpoints. Ele também explica a importância da documentação de códigos através de comentários para facilitar a manutenção por outros desenvolvedores.
1. Programação Estruturada II
Aula 01 – Depuração e Documentação
Prof. Thomás da Costa
thomasdacosta@gmail.com
Anhanguera – 2015.1
2. Apresentação
Prof. Thomás da Costa
- Graduado em Gestão em Tecnologia da Informação pela UNIP
- MBA em Arquitetura de Soluções pela FIAP
- 19 anos de experiência na área de Informática
- 14 anos de experiência com desenvolvimento em Java
- Certificação Java Programmer (SCJP)
- Desenvolvimento e arquitetura de aplicações em várias áreas
- Experiência profissional com várias linguagens e ferramentas de desenvolvimento PHP,
C#, C, JavaScript, Java SE, Java EE, Spring Core, Spring MVC, JBoss Seam, Hibernate
- Atualmente sou líder de uma equipe de desenvolvimento para um projeto na área
bancária
https://www.linkedin.com/in/thomasdacosta
https://www.facebook.com/thomasdacosta
@thomasdacostadev
https://github.com/thomasdacosta
Prof. Thomás da Costa Programação Estruturada II
3. Apresentação
Material da Aula
- Conteúdo da aula no site SlideShare:
- http://pt.slideshare.net/thomasdacosta/presentations
- http://pt.slideshare.net/thomasdacosta/documents
- Será disponibilizado 1 dia depois da aula
- Conteúdo complementar para as aulas
- Ferramenta de desenvolvimento:
- Orwell Dev-C++
- http://sourceforge.net/projects/orwelldevcpp/?source=navbar
- Ferramenta de desenvolvimento WEB:
- http://www.tutorialspoint.com/compile_cpp_online.php
- Será encaminhado para o representante de sala, caso não consigam ter acesso aos
sites mencionados acima
- Agendamento das aulas de laboratório
- E-mail do Professor: thomasdacosta@gmail.com
Prof. Thomás da Costa Programação Estruturada II
4. Apresentação
Avaliação
- Média para Aprovação: 6,0
- Período das avaliações B1: 06 até 10 de Abril – 06/04 (SIS) e 07/04 (TADS)
- Período das avaliações B2: 15 até 19 de Junho
- ATPS: 20% da média = até 2,0 pontos
- Arredondamento: uma casa decimal (5,85 = 5,9)
- Prova substitutiva substitui a nota da B2
- Frequência: mínimo 75%, abaixo disso REPROVA
- TERÁ CHAMADA
- 1º Avaliação (Peso: 40%)
- Lista de Exercícios (8 pontos) + ATPS
- Individual
- Aula normal no dia da entrega dos exercícios. Entrega até as 20h50
- 2º Avaliação (Peso: 60%)
- Prova (8 pontos) + ATPS
- Individual
Prof. Thomás da Costa Programação Estruturada II
5. Apresentação
ATPS
- Data de Entrega B1: 30 de março (SIS) e 31 de março (TADS)
- O prazo para entrega é até as 20h50 do dia 30 (SIS) e 31 (TADS)
- Fora desse horário não será aceito
- Entrega da cópia para o representante da sala
- Mandar por e-mail os integrantes do grupo, máximo 5 pessoas
- Será disponibilizado um resumo da ATPS para melhor entendimento
- Resumo será enviado por e-mail para o representante e disponibilizado no site:
http://pt.slideshare.net/thomasdacosta/documents
Vamos ver a ATPS !!!
Prof. Thomás da Costa Programação Estruturada II
6. Apresentação
Plano de Ensino e Aprendizagem (PEA)
Linguagem de desenvolvimento C++
- Revisão de Programação Estruturada I
- Conceitos básicos de depuração e documentação de programas
- Funções e parâmetros em C++
- Tipos de dados definidos pelo programador: struct, union e enum
- Criação de arquivos. Operações de manipulação de arquivos e registros, incluindo
leitura, substituição de conteúdo, adição de novos dados; leitura e gravação de
dados
- Ponteiros em C++: conceituação e principais utilizações. Declaração de variável
ponteiro
- Incremento e decremento de ponteiros. Passagem de um argumento ponteiro para
função
- Definição de recursão. Algoritmos recorrentes
Prof. Thomás da Costa Programação Estruturada II
7. Apresentação
Sobre as Aulas
- O que vocês esperam da aula de Programação Estruturada II ?
- Por que aprender Programação Estruturada II ?
- Melhorar a lógica
- Adquire conhecimento em outras áreas (exe.: banco de dados)
- A profissão de Programador é uma das mais requisitadas
- Tem bons salários no mercado
- É possível fazer qualquer tipo de programa como jogos, sites e etc.
- O Programador é o Rei !!!
- Quero a opinião de todos sobre as aulas
- Conteúdo
- Método de ensino
- Material da Aula
- Não esqueçam de fazer o PAI
Estou aqui para fazer uma excelente aula e prepará-los para o mercado de
trabalho
Prof. Thomás da Costa Programação Estruturada II
8. Apresentação
Avisos
- Horário de Aula: 19h10 – 20h50 e 21h10 – 22h00 (Sem emenda de intervalos)
- Celulares desligados, atendam fora da sala caso precisem
- Controlem as conversas paralelas !!!
- Todos os programas foram testados. Teremos menos problemas de compatibilidade
do Dev-C++
- Qual linguagem foi estudada em Programação Estruturada I ?
- Vamos continuar com C++
- Quem ficou de DP em Programação Estruturada I ?
- Estarei a disposição para tirar dúvidas para quem ficou de DP. Podem entrar em
contato por e-mail
- A todos estarei a disposição para tirar dúvidas !!!!
- Vamos ter uma aula animada
- Participação de todos na aula
Prof. Thomás da Costa Programação Estruturada II
11. Revisão
Estrutura de um programa C++:
Revisão
#include <iostream>
using namespace std;
int main()
{
cout << "Olá Mundo !!!";
}
Bibliotecas de funções
Função principal do programa
Identificador da função
Prof. Thomás da Costa Programação Estruturada II
12. Revisão
Variáveis:
Revisão
#include <iostream>
using namespace std;
int main()
{
const float numero_pi = 3.14;
char genero = 'M';
int idade = 31;
float nota_final = 8.5;
double salario = 1200.12;
cout << "Variáveis:" << genero << "," << idade << "," << nota_final
<< "," << salario << "," << numero_pi << endl;
double nota1, nota2;
cout << "Digite as notas:" << endl;
cin >> nota1 >> nota2;
cout << "Notas: " << nota1 << "-" << nota2;
}
Tipo da variável
Nome da variável
Ler uma variável a partir
do teclado
Prof. Thomás da Costa Programação Estruturada II
13. Revisão
Operadores:
Revisão
#include <iostream>
using namespace std;
int main()
{
int x = 10 + 5;// soma
int y = 4 - 20;// subtração
int j = 34 * 160;// multiplicação
int i = 6 / 2;// divisão
int p = 150 % 2;// resto da divisão
int acelerar = 100;// incremento pós-fixado
acelerar++;
int desacelerar = 100;// decremento pós-fixado
desacelerar--;
}
#include <iostream>
using namespace std;
int main()
{
int correr = 20;// incremento pré-fixado
++correr;
int andar = 30;// decremento pré-fixado
--andar;
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
a += 1;// atribuição soma
b -= 1;// atribuição subtração
c *= 1;// atribuição multiplicação
d /= 1;// atribuição divisão
e %= 1;// atribuição resto da divisão
}
Prof. Thomás da Costa Programação Estruturada II
14. Revisão
Desvios Condicionais:
Revisão
#include <iostream>
using namespace std;
int main()
{
int idade;
cout << "Digite sua idade:";
cin >> idade;
if (idade >= 21)
{
cout << "Maior de idade";
}
else
{
cout << "Menor de idade";
}
}
#include <iostream>
using namespace std;
int main()
{
int opcao;
cout << "Informe uma opção (1,2,3):";
cin >> opcao;
switch (opcao)
{
case 1:
cout << "Opção 1 Selecionada";
break;
case 2:
cout << "Opção 2 Selecionada";
break;
case 3:
cout << "Opção 3 Selecionada";
break;
default:
cout << "Nenhuma Opção Selecionada";
break;
}
}
Condição
Condições
Prof. Thomás da Costa Programação Estruturada II
15. Revisão
Laço (Loops):
Revisão
#include <iostream>
using namespace std;
int main()
{
for (int i=0;i<=10;i++)
{
cout << i << "n";
}
int j = 0;
while (j <=10)
{
cout << j << "n";
j++;
}
int k = 0;
do
{
cout << k << "n";
k++;
}
while (k <= 10);
}
Condição inicial, final
do loop e contador
Condição do loop. Pode
não entrar na rotina
Condição do loop, passa pelo
menos uma vez na rotina
Prof. Thomás da Costa Programação Estruturada II
16. Revisão
Vetores:
Revisão
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int k[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // inicializando um vetor
for (int i=9;i>=0;i--)
{
k[i] = i;
cout << k[i] << "n";
}
char nome1[10] = "João"; // uma string
char nome2[10] = "Maria";
strcat(nome2, " das Graças"); // concatena duas strings
cout << "Nome1, Nome2: " << nome1 << "," << nome2 << "n";
cout << "Tamanho do Nome1: " << strlen(nome1) << "n"; // tamanho de uma string
cout << "Tamanho do Nome2: " << strlen(nome2) << "n";
cout << "Comparando:" << strcmp(nome1, nome2) << "n"; // compara duas strings
char usuario[100];
gets(usuario);// lê a string do teclado
cout << "Usuário: " << usuario;
}
Criando um vetor com 10 posições
Inicializando um vetor
Atribuindo um
valor na posição
Ler um vetor de char
pelo teclado
Prof. Thomás da Costa Programação Estruturada II
18. Depuração e Documentação
O que é:
É uma técnica para executar uma aplicação passo a passo, identificando possíveis
erros (bug) ou para o entendimento de uma funcionalidade do programa pelo
desenvolvedor.
Depuração ou Debug
Prof. Thomás da Costa Programação Estruturada II
19. Depuração e Documentação
Mais um pouco:
- Executa o programa linha a linha
- Visualizar valores das variáveis em tempo de execução
- Breakpoints
- Analise das funções do código fonte
Depuração ou Debug
BUGS = DEFEITOS = ERROS
Prof. Thomás da Costa Programação Estruturada II
20. Depuração e Documentação
Como fazer análise de um erro:
Tendo a premissa que conhecemos o programa a ser depurado, podemos seguir os
seguintes passos:
- 1º Passo:
- Verificar o problema reportado (normalmente por um usuário)
- 2º Passo:
- Entender o problema
- 3º Passo:
- Conhecer os parâmetros do usuário
- 4º Passo:
- Reproduzir o problema (isso pode ser extremamente difícil)
- 5º Passo:
- Após conseguir reproduzir o problema, efetuar a leitura do código e ver
possíveis erros de codificação ou utilizar uma ferramenta de depuração
Depuração ou Debug
Prof. Thomás da Costa Programação Estruturada II
21. Depuração e Documentação
Depuração ou Debug
Análise de Código:
No caso do código abaixo, conseguimos identificar um possível problema em nosso
programa ?
Sim temos !!!
Nosso vetor de inteiros, possui 10 posições e
para percorrer um vetor é sempre a posição – 1.
Então o i <= 10 deveria ser i <= 9
#include <iostream>
using namespace std;
int main()
{
int value[10];
int i = 0;
for (;i<=10;i++)
{
value[i] = i;
cout << i;
}
}
Prof. Thomás da Costa Programação Estruturada II
22. Depuração e Documentação
Depuração ou Debug
Debug no DevC++:
Muitas vezes efetuamos a análise do código, e não conseguimos identificar o
problema, pois o código pode ser extenso ou de difícil compreensão. Por isso as
ferramentas modernas, possuem funcionalidades que permitem rodar o programa
linha a linha.
Caçando os BUGS !!!
Prof. Thomás da Costa Programação Estruturada II
23. Depuração e Documentação
Depuração ou Debug
Breakpoints:
São marcações efetuadas na ferramenta, que tem como finalidade interromper o
programa na linha selecionada, até que o desenvolvedor continue para a próxima
instrução. Na imagem abaixo, o programa interrompe na linha 12.
Marcação do breakpoint
Prof. Thomás da Costa Programação Estruturada II
25. Depuração e Documentação
Depuração ou Debug
Watch:
No processo de depuração conseguimos visualizar os valores das variáveis em
tempo de execução. Para isso usamos o botão Add watch. Na barra lateral
podemos ver as variáveis do programa sendo preenchidas
Valores das variáveis em
tempo de execução
Botão Add Watch
Prof. Thomás da Costa Programação Estruturada II
28. Depuração e Documentação
Documentação
Sempre !!!:
Documentação do código serve principalmente quando outro desenvolvedor
precisa efetuar uma manutenção no programa. Podemos criar uma documentação
através de comentários dentro do código.
A documentação de um código pode ser feita com:
// - quando for uma linha
/** **/ - quando for um bloco de texto em mais de uma linha
Prof. Thomás da Costa Programação Estruturada II
29. Depuração e Documentação
Bloco de comentário
Comentário em linha
#include <iostream>
using namespace std;
/**
Autor: Thomás da Costa
Data de Criação: 01/01/2015
Titulo: Programa que efetua o cálculo de uma progressão aritmética
Descritivo: Progressão aritmética é um tipo de seqüência numérica que a partir
do segundo elemento cada termo (elemento) é a soma do seu antecessor por uma constante.
**/
int main()
{
const int TOTAL_PA = 10; // Limite total da progressão aritmética
int razao = 2; // Razão da progressão
int i = 0; // Indice para efetuar o loop da progressão
int resultadoPa = 0;// Resultado da posição da PA
int resultadoAntPa = 3;// Resultado anterior da posicao da PA
// Efetuado o cálculo da progressão de acordo
for (;i<=TOTAL_PA;i++)
{
// Cálculo da progressão ocorre indice atual mais a razão
resultadoPa = resultadoAntPa + razao;
resultadoAntPa = resultadoPa;
// Imprime valor na tela da PA
cout << resultadoPa << "n";
}
}
Prof. Thomás da Costa Programação Estruturada II
30. Depuração e Documentação
Resumo
- Depuração é o processo de identificação erros dentro de uma aplicação
- Podemos conhecer a funcionalidade de um programa
- Na depuração o programa é executado linha a linha
- Bugs são defeitos no programa
- Documentação é importante quando vamos efetuar a manutenção de um
programa
Prof. Thomás da Costa Programação Estruturada II
32. Depuração e Documentação
Exercícios
1 – Código abaixo mostra todas as tabuadas, mas o programa está mostrando
somente a tabuada do 1. Identifique o erro.
#include <iostream>
using namespace std;
int main()
{
int i=1;
int j=1;
for (;i<=10;i++)
{
for (;j<=10;j++)
{
cout << i << "x" << j << "=" << (i * j) << "n";
}
cout << "n";
}
}
Prof. Thomás da Costa Programação Estruturada II
33. Depuração e Documentação
Exercícios
2 – Programa abaixo efetua o cálculo do fatorial de 6, mas o usuário reclamou
dizendo que o valor não é exibido na tela. Qual o problema com o programa?
#include <iostream>
using namespace std;
int main()
{
int fat=6;
int fatorial = 1;
while (fat >= 1)
{
fatorial *= fat;
}
cout << fatorial << "n";
}
Prof. Thomás da Costa Programação Estruturada II
34. Depuração e Documentação
Exercícios
3 – Este programa mostra os números pares e impares de 100 até 1. Mostre todos
os possíveis problemas encontrados no programa.
#include <iostream>
using namespace std;
int main()
{
for (int k=100;k>=1;k++)
{
int ret = k % 2;
if (ret = 0)
{
cout << "Par:" << k << "n";
}
else
{
cout << "Impar:" << k << "n";
}
}
}
Prof. Thomás da Costa Programação Estruturada II