• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

Share "Introdução à Programação. Programação e Fatores de Qualidade"

Copied!
40
0
0

Texto

(1)

Introdução à Programação

Programação e Fatores de

Qualidade

(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.

(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

(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

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

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

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

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

(11)

Robustez

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)

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)

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)

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

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

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

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

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

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

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

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

(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

(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

(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

(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

(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

(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

(29)

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

Constante para representar o número de vagas da disciplina de IP

VAGAS_IP = 60 /*Bom */

(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

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

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

(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

(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

(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

(39)

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

(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

Referências

Documentos relacionados

Era de conhecimento de todos e as observações etnográficas dos viajantes, nas mais diversas regiões brasileiras, demonstraram largamente os cuidados e o apreço

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

Apesar do glicerol ter, também, efeito tóxico sobre a célula, ele tem sido o crioprotetor mais utilizado em protocolos de congelação do sêmen suíno (TONIOLLI

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

A solução, inicialmente vermelha tornou-se gradativamente marrom, e o sólido marrom escuro obtido foi filtrado, lavado várias vezes com etanol, éter etílico anidro e

de lôbo-guará (Chrysocyon brachyurus), a partir do cérebro e da glândula submaxilar em face das ino- culações em camundongos, cobaios e coelho e, também, pela presença

Os objetivos de Vox Scripturae – Revista Teológica Internacional são: viabilizar a publicação e disseminação dos resultados de pesquisas científicas e trabalhos acadêmicos