programação e fatores de qualidadeif669ec/aulas/aulaip-fatoresqualidade.pdf · desafio atual é...
TRANSCRIPT
Introdução à Programação
Programação e Fatores de
Qualidade
2 2
Qualidade de Software
Quero que você escreva rapidamente um sistema de folha de pagamento que funcione corretamente, que seja robusto e que seja rápido. Ah! Pretendo lançar uma outra versão deste mesmo programa, daqui a uns 6 meses.
Sem problema, chefe.
Ferrou!
3 3
Tópicos da Aula
Hoje aprenderemos alguns fatores de
qualidade de software Fatores de qualidade externos
Fatores de qualidade internos
Depois aprenderemos algumas técnicas para
melhorar alguns fatores de qualidade de um
programa
Comentários
Padrões de Codificação
Papel da indentação em um programa
Algumas dicas para melhorar a eficiência de um
programa
4
Disponibilidade de serviços essenciais
home banking
telefonia
Segurança de pessoas
sistemas de monitoramento de pacientes
sistemas de controle de tráfego aéreo
freios ABS
O impacto na prática
5
Competitividade das empresas
Melhores produtos a um menor custo
Atração de novas empresas para a região
Investimentos na região
Arrecadação de impostos
Impacto econômico e social do
software de qualidade
6 6
Crise de Software
Nas 3 primeiras décadas da Computação, a preocupação maior era hardware
Custo de processamento e armazenamento de dados
Desafio atual é melhorar qualidade e custo do software
Problemas 25% dos projetos são cancelados
O tempo e custo de desenvolvimento é bem maior do que o estimado
em 53% dos projetos
65 - 80% dos sistemas não funcionam como planejado
A manutenção e reutilização são difíceis e custosas
A produtividade dos profissionais da área de software não
tem acompanhado a demanda por seus serviços
7
Causas da Crise de Software
Essências
Complexidade crescente dos sistemas
Dificuldade e custos de formalização
Uma linha de código do sistema de controle de
lançamento do ônibus espacial da NASA custa
1.000 dólares!
Essências não podem ser evitadas
8
Dificuldade de Formalização
9
Causas da Crise de Software
Acidentes
Má qualidade das linguagens, ferramentas e
metodologias
Problemas gerenciais (pessoas, riscos, etc.),
políticos, e organizacionais
Pouca comunicação entre o cliente e o
desenvolvedor
Manutenção de software, geralmente não é
considerada como parte do ciclo de software
Acidentes PODEM ser evitados!!!
10 10
Fatores de Qualidade de Software
Qualidade de software é uma combinação de vários fatores
Estes fatores podem ser classificados em: Fatores Externos
Qualidades percebidas pelos usuários de um software
Usuários incluem: usuário final e aquela pessoa que
contratou o desenvolvimento do software
Ex: corretude, eficiência, reusabilidade, etc
Fatores Internos
Qualidades percebidas somente por profissionais de
software que têm acesso ao código do software
Ex: modularidade, legibilidade, etc
11
Robustez
11
Alguns Fatores Externos
Corretude é a capacidade do software executar de forma correta todas as tarefas que foram pedidas nos requisitos e especificação do software
Especificação
Corretude
Robustez é a capacidade do software funcionar, mesmo em situações não previstas na especificação
É o complemento de corretude
12 12
Alguns Fatores Externos
Extensibilidade é a facilidade em que o software pode ser alterado para que atenda novas exigências da especificação
Software está em constante mudança
≈70% de custo do software é a fase de manutenção
Mudanças de requisitos são responsáveis por ≈ 50% das atividades de manutenção
Reusabilidade é a capacidade que o software tem de ser usado em novas aplicações.
Este uso pode ser de partes do software ou dele todo
Grande impacto no tempo de desenvolvimento de software
Menor tempo de desenvolvimento é importante para sucesso do software
13 13
Alguns Fatores Externos
Eficiência é a capacidade do software de otimizar a
utilização dos recursos de hardware
Muitas vezes requer um bom conhecimento do hardware
onde o software será executado
Pode tornar a implementação do software dependente demais
da plataforma alvo
Facilidade de Uso é uma qualidade que diz respeito a
facilidade com que usuários com diferentes perfis
conseguem aprender a utilizar o software e resolver os
problemas desejados
Engloba também o aprendizado de instalação, operação e
monitoramento
Representa economia para a empresa que utiliza o software
em relação aos custos de treinamento
14
Outros Fatores Externos
Portabilidade
Escalabilidade
Integridade e segurança
Compatibilidade
Testabilidade
15 15
Alguns Fatores Internos
Um software é modular se ele é construído à
partir de elementos autônomos conectados
Modularidade Reusabilidade e Extensibilidade
Legibilidade de um programa é a facilidade
com que profissionais de software conseguem
entender o código do programa
Documentação é importante
Padrões de codificação devem ser seguidos
Legibilidade Reusabilidade e Extensibilidade
16 16
Algumas Considerações sobre
Qualidade
Fatores internos Fatores externos
Softwares são utilizados em aplicações dos mais
diversos domínios
Freqüentemente, não se pode obter todos os fatores
de qualidade
Diferentes fatores podem ser conflitantes
Ex: Freqüentemente para aumentar a eficiência, código do
programa deve ser mais específico a uma plataforma, o
que diminui a reusabilidade e/ou portabilidade do código
17 17
Algumas Considerações sobre
Qualidade
Cabe ao desenvolvedor avaliar quais
fatores são mais importantes
de acordo com a aplicação
O que foi que aconteceu? Eu pisei no freio e ele demorou um século para ser acionado
Eu ouvi dizer que este sistema novo de controle de freio, pelo menos, é mais reusável
18 18
Comentando um Programa
Um programa deve ser bem documentado
Documentação externa para usuários
Documentação no próprio programa
Aumenta a legibilidade
Comentário é um mecanismo oferecido pelas linguagens de programação que permite que o programador expresse em linguagem natural a lógica pensada para escrever um programa ou
um trecho de programa
19 19
Comentando um Programa
Usa-se o termo inline documentation para
comentários em um programa
Devem ser incluídos para explicar o propósito
do programa e algumas partes dele
Comentários não afetam o funcionamento do
programa
São ignorados na hora da execução
Dica: Comente o código enquanto o estiver escrevendo, senão há uma forte probabilidade
de não o fazer depois
20 20
Comentários em C
Em C para incluir comentários:
Usa-se /* e */
Pode conter múltiplas linhas
/* Este tipo de comentário só termina
quando o asterisco barra é encontrado */
Não se pode colocar os símbolos de
comentário dentro de um comentário
/* Este tipo de comentário /*só termina*/
quando o asterisco barra é encontrado */
21 21
Comentários em C
// Este é um comentário de uma linha
Precedido de //
Isto ocorre porque a maioria das IDEs suportam C++
Este tipo de comentário é aceito em C++
Comentários de uma linha usando // são
aceitos pela maioria dos ambientes de
programação (IDEs)
22 22
Reuso de Código
Reusabilidade é um fator importante para
acelerar o desenvolvimento de um sistema
Reuso pode se dar de várias formas:
Função inteira
Uma função chama outra função
Trechos de programa ou funções
23 23
Reuso de Código
Existem muitas técnicas existentes para
reutilizar código ou pelo menos aumentar o
potencial de reuso
Uma “técnica” infelizmente muito difundida é o
copy & paste
Solução rápida e “boa” para quem não quer pensar
Solução péssima para a manutenção do sistema
Se uma alteração for requerida, esta também deverá ser
propagada por todos os trechos repetidos
Se um bug for encontrado, terá de ser corrigido em todos
os outros códigos repetidos
Melhor do que isto é usar Refactoring
24 24
Refactoring
Refactoring consiste em uma série de técnicas que
reestruturam o código do software, aumentando o
potencial de reuso, extensibilidade e legibilidade
O comportamento do software continua o mesmo, só muda a
estrutura
Muito difundido entre metodologias de desenvolvimento de
software orientadas a objetos
Porém, muitas técnicas podem ser aplicadas a programas
desenvolvidas em linguagens como C
Exemplos de refactoring:
Generalizar uma função com parâmetros
Transformar um trecho de codigo em uma função
25
Padronização de Codificação
Quanto mais fácil for o entendimento
(legibilidade) do código do sistema, mais
produtiva será a equipe de desenvolvimento
Freqüentemente as pessoas que escrevem o
código não são as mesmas que o mantém
Pode haver dificuldades de entendimento entre as
diferentes pessoas que trabalham sobre o mesmo
código
Atrasa o desenvolvimento do sistema
26
Padronização de Codificação
Um padrão de codificação visa minimizar esses
problemas
Estabelece regras, definindo como o código deve
ser escrito para favorecer a impessoalidade do
programa
Facilita a integração de novos desenvolvedores ao
ambiente de desenvolvimento
Em C, não existe um padrão internacional
aceito de codificação
Empresas geralmente estabelecem um próprio
Porém, veremos os padrões mais utilizados em C
27
Nomenclatura de Contantes e
Variáveis
A princípio, identificadores não devem ser
abreviados
Quando o fizer, usar bom senso para que não se
perca expressividade
Usar bom senso para que nome da variável ou
constante não fique grande demais
Focar no que a variável ou a constante
representam
Recomenda-se colocar o identificador de uma
constante em letras maiúsculas
Se houver mais de uma palavra, as palavras
seguintes devem ser separadas com o caracter de
underscore ( _)
28
Nomenclatura de Contantes e
Variáveis
Recomenda-se colocar o identificador de uma
variável começando com letra minúscula
Se houver mais de uma palavra, as palavras
seguintes devem começar com maiúscula ou
serem separadas com o caracter de underscore (_)
Para nome de variáveis locais que
representam contadores, pode-se colocar
apenas uma letra do alfabeto
for (i = 0; i < 5; i++) /*Aceitável */
Exemplos de Constantes e Variáveis
quantidadeAutores /*Bom */
Variável para representar a quantidade de autores de
um livro
qtdAutores /* Aceitável */
qtdAut /* Inaceitável */
variavelQueArmazenaQuantidadeDeAutores /*Ruim*/
29
Constante para representar o número de vagas da
disciplina de IP
VAGAS_IP = 60 /*Bom */
Vg_Ip = 60 /*Inaceitável */
30
Nomenclatura de Funções
Identificadores não devem ser abreviados
Recomenda-se colocar o nome começando letra minúscula
Se houver mais de uma palavra, as palavras seguintes devem começar com maiúscula ou serem separadas com o caracter de underscore (_)
Não se deve colocar nomes misturando palavras de línguas diferentes
Muitas vezes, coloca-se na primeira palavra um verbo no infinitivo representando a utilidade da função
Ex: imprimirPrimos(int comeco, int fim)
Muitas vezes se coloca um nome igual ao nome de uma função matemática
Ex: fatorial(int n)
31
Importância da Indentação
Como sabemos, o compilador C ignora espaços e
tabulações
Porém, para aumentar a legibilidade do código é muito
importante se preocupar com sua indentação Torna mais claro o que será feito dentro de comandos
condicionais e laços
Torna mais claro o limite de funções
if (total > MAX)
printf ("Erro!!");
contador++;
if (total > MAX)
printf ("Erro!!");
contador++;
32
Que trecho de código é mais claro? int divisao(int dividendo, int divisor){int i, resultado = 0;
if (divisor != 0)
for(i = dividendo; i >= divisor ; i = i - divisor)
resultado++;
return resultado;
}
int divisao(int dividendo, int divisor){
int i, resultado = 0;
if (divisor != 0)
for(i = dividendo; i >= divisor ; i = i - divisor)
resultado++;
return resultado;
}
33
Algumas Dicas para Melhorar
Eficiência
Evitar o uso de variáveis globais
Ocupam memória durante toda a execução do
programa
Não declarar variaveis que não serão
utilizadas
Não declarar variáveis com tipos que ocupam
mais memória quando a aplicação não
trabalha com valores muito grandes
Aritmética de inteiros é mais rápida do que
aritmética de ponto flutuante (reais)
34
Algumas Dicas para Melhorar
Eficiência
Sempre que puder privilegiar soluções
iterativas sobre as recursivas
Pode diminuir uso da memória
Pode economizar tempo de processamento
Evitar executar todas as iterações de um laço
quando não é necessário
Economiza tempo de processamento
35
Exemplo de Melhoria de Eficiência
Evita um teste desnecessario
se o numero for
maior do que 100
int existeNumeroPrimoEntre(int inicio, int fim){
int i, existe = 0;
for(i = inicio; i <= fim;i++){
/*Considere que exista uma função que diz se um num é primo*/
if (numeroPrimo(i) == 1) {
existe = 1;
}
}
return existe;
}
Mesmo achando um numero
primo, continua laço
36
Exemplo de Melhoria de Eficiência int existeNumeroPrimoEntre(int inicio, int fim){
int i, existe = 0;
for(i = inicio; i <= fim && existe == 0;i++){
/*Considere que exista uma função que diz se um num é primo*/
if (numeroPrimo(i) == 1) {
existe = 1;
}
}
return existe;
} Evita continuação do laço
quando encontra numero primo
37
Algumas Dicas para Melhorar
Eficiência
Quando usar comandos condicionais, analisar
se certos caminhos podem realmente ser
executados
Elimine caminhos que nunca podem ser
executados
Quando o programa tiver muitos if testando
uma mesma variavel, verificar se não é
melhor colocar alguns else para evitar testes
desnecessários
38
Exemplo de Melhoria de Eficiência void maiorQue100(int numero){
if (numero > 100){
printf(“%d eh maior que 100”,numero);
}
if (numero <= 100) {
printf(“%d nao eh maior que 100”,numero);
}
}
void maiorQue100(int numero){
if (numero > 100){
printf(“%d eh maior que 100”,numero);
} else {
printf(“%d nao eh maior que 100”,numero);
}
}
Evita um teste desnecessario
se o numero for
maior do que 100
39 39
Referências Adicionais
Crise do software Software‘s Chronic Crisis http://www.cin.ufpe.br/~if669/files/MaterialDeEnsino/Referencias/SoftwareChronicsCrisis/SciAmSept1994.html
Fatores de Qualidade Bertrand Meyer. Object-Oriented Software Construction. Segunda Edição. Prentice Hall, 1988
Otimização de código C http://www.abarnett.demon.co.uk/tutorial.html#ARRAY
Práticas que NÃO devem ser seguidas
Programação Orientada a Gambiarra
http://desciclo.pedia.ws/wiki/Programação_Orientada_a_Gambiarras
40 40
Resumindo ...
Fatores de qualidade de software Fatores de qualidade externos
Fatores de qualidade internos
Técnicas para melhorar alguns fatores de qualidade de
um programa
Comentários
Refactoring
Endentação
Melhorando a eficiência