programação e fatores de qualidadeif669ec/aulas/aulaip-fatoresqualidade.pdf · desafio atual é...

40
Introdução à Programação Programação e Fatores de Qualidade

Upload: others

Post on 01-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

Introdução à Programação

Programação e Fatores de

Qualidade

Page 2: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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!

Page 3: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 4: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 5: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 6: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 7: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 8: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

8

Dificuldade de Formalização

Page 9: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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!!!

Page 10: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 11: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 12: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 13: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 14: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

14

Outros Fatores Externos

Portabilidade

Escalabilidade

Integridade e segurança

Compatibilidade

Testabilidade

Page 15: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 16: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 17: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 18: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 19: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 20: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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 */

Page 21: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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)

Page 22: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 23: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 24: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 25: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 26: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 27: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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 ( _)

Page 28: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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 */

Page 29: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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 */

Page 30: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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)

Page 31: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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++;

Page 32: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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;

}

Page 33: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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)

Page 34: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 35: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 36: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 37: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 38: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 39: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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

Page 40: Programação e Fatores de Qualidadeif669ec/aulas/aulaIP-FatoresQualidade.pdf · Desafio atual é melhorar qualidade e custo do software Problemas 25% dos projetos são cancelados

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