Upload
carlos-eduardo-dantas
View
188
Download
1
Embed Size (px)
Citation preview
Qualidade de Software: algumas boas práticas adotadas por
Programadores
Carlos Eduardo [email protected]
http://carloseduardoxp.wordpress.com
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA
TRIÂNGULO MINEIRO – Campus Avançado Uberlândia
“Experiência sem teoria é cegueira, mas teoria sem experiência é mero jogo intelectual” – Immanuel Kant
Quem sou?
• Professor Efetivo no IFTM Campus Uberlândia-Centro;
• 9 anos criando gambiarras em diversas empresas de TI.
“A morte do homem começa no instante em que ele desiste de aprender” – Albino Teixeira
Motivação
• Informação:
• Experiência:
“As três coisas mais difíceis no mundo: guardar segredo, perdoar uma injúria e aproveitar o tempo”– Benjamin Franklin
Introdução
Sociedade demanda:
• Grande quantidade de sistemas e aplicações;
• Software complexo, sistemas distribuídos e heterogêneos;
• Requisitos mutantes (todo ano, mês e dia).
“A melhor maneira de fugir do seu problema é resolvê-lo” – Robert Anthony
Introdução
Expectativa de projetos com menor custo, no menor prazo, com o maior escopo e a melhor qualidade
“É impossível para um homem aprender aquilo que ele acha que já sabe” – Epíteto
Problemas
• A qualidade do Software nem sempre é a maior prioridade;
• Pouca qualidade = retrabalho;
• Software com falhas ou indisponibilidades = perda de dinheiro
“O pessimista queixa-se do vento, o otimista espera que ele mude e o realista ajusta as velas. “ – Willian George Ward
Problemas
• Projetos possuem uma forte tendência a entrarem na chamada “curva do pânico”, sacrificando a qualidade
“Pensa como pensam os sábios, mas fala como falam as pessoas simples” – Aristóteles
Qualidade de Software
• O Software atende as necessidades do cliente?
• O Software é funcional para o cliente?
“O êxito não se consegue só com qualidades especiais. É sobretudo um trabalho de constância, de método e deorganização” – J. P. Sergent
Qualidade de Software
• O Software é flexível?
• O Software é reutilizável?
• O Software é fácil de manter?
“Não é a montanha que nos faz desanimar, mas a pedrinha que trazemos no sapato” – Autor desconhecido
Algumas boas práticas adotadas por programadores
“O primeiro passo para conseguirmos o que queremos na vida é decidirmos o que queremos”– Ben Stein
Considerar novas metodologias para criação de Softwares
• Entregas rápidas e incrementais;
• Cliente como membro da equipe;
• Prática/cultura de mudanças;
• Foco nos programadores;
• Programação em par;
• Padronização do código;
• Semana de 40 horas.
“A cooperação é a convicção plena de que ninguém pode chegar à meta se não chegarem todos” – Virginia Burden
Considerar novas metodologias para criação de Softwares
“Uma imagem vale mais que mil palavras”– Napoleão Bonaparte
Aceitar a programação poliglota
“Se está muito difícil encontrar o caminho, faça-o” – Autor desconhecido
Adotar versionamento de projetos
“Os nossos desejos são como crianças pequenas: quanto mais lhes cedemos, mais exigentes se tornam” –Provérbio Chinês
Desconsiderar Programação estruturada em Linguagens OO
• Aprender os conceitos de POO é fácil, o problema é modelar o sistema.
“Péssima ideia, a de que não se pode mudar” – Montaigne
Desconsiderar Programação estruturada em Linguagens OO
“A ciência nunca resolve um problema sem criar mais dez” – George Bernard Shaw
Desconsiderar Programação estruturada em Linguagens OO
“A libertação do desejo conduz à paz interior”– Lao-Tsé
Desconsiderar Programação estruturada em Linguagens OO
• Diagrama de Sequência POO vs Estruturado
• Obs: considere a UML como ótima solução para realização de esboços entre a equipe.
“Não se deseja aquilo que não se conhece”– Ovídio
Desconsiderar Programação estruturada em Linguagens OO
• Foco em classes e nas mensagens trocadas entre estas, ao invés de tabelas e seu modelo relacional.
“A Inteligência é quase inútil para quem não tem mais nada”– Carrel, Alexis
Desconsiderar Programação estruturada em Linguagens OO
• Adoção de Princípios OO:
Evite o modelo anêmico;
Aberto-Fechado (OCP);
Não se Repita (DRY);
Responsabilidade Única (SRP);
Encapsule o que varia;
Substituição de Liskov (LSP);
Programe para interface e não para implementação;
Entidades de software devem ser abertas a extensão, mas fechadas a modificação.” – Bertrand Meyer
Desconsiderar Programação estruturada em Linguagens OO
• Adoção de Princípios OO:
Componha comportamentos;
Evite Herança, favoreça Composição;
Favoreça Imutabilidade e Simplicidade.
“Ninguém é dono da multidão, ainda que creia tê-la dominada.”– Eugene Ionesco
Desconsiderar Programação estruturada em Linguagens OO
• Adoção de Padrões de Projeto:
MVC;
• Strategy;
Factory;
Template Method;
Observer;
Strategy;
Proxy;
Decorator, etc.. etc.. etc..“A verdadeira felicidade vem da alegria de atos bem feitos, o entusiasmo de criar coisas novas.” – Antoine de
Saint-Exupery
Aplicar fundamentos da Computação em Soluções
• Programadores ruins utilizam-se constantemente de soluções “força bruta”
“Não existe colher. Você verá que não é a colher que se dobra, apenas você mesmo. “ – Garoto com a colher, Matrix
Aplicar fundamentos da Computação em Soluções
“Eu diria algo como ‘Software está gerenciando o mundo’. Nosso trabalho é apenas polinizá-lo ...”– Brian Foote
Aplicar fundamentos da Computação em Soluções
• Uso de soluções razoáveis de busca;
• Aplicação de diferentes tipos de Estruturas de Dados para cada contexto (conjuntos, árvores, tabelas hash, mapas, listas);
• Paralelização de tarefas com threads;
• Domínio de técnicas para controle de concorrência como semáforos e monitores.
“Não há uma verdade fundamental, apenas há erros fundamentais”– Bachelard , Gaston
Considerar a “Escalabilidade” na composição de soluções
• Casos onde a falha de escalabilidade é momentânea
“Ensinar é aprender duas vezes.” – Joseph Joubert
Considerar a “Escalabilidade” na composição de soluções
• Casos onde a solução pode deixar de ser escalável com o tempo
“São muitos os que usam a régua, mas poucos os inspirados.”– Platão
Considerar a “Escalabilidade” na composição de soluções
• Ferramentas baseadas na cultura noSqltêm ajudado na produção de soluções performáticas de persistência.
“Vivemos todos sob o mesmo céu, mas nem todos temos o mesmo horizonte.” – Konrad Adenauer
Fazer uso de testes automatizados
“O maior prazer é esperar pelo prazer.”– Gotthold Lessing
Antes gerenciar do que reinventar a roda
• Servidores de aplicação separam o desenvolvedor de Software de algumas das complexidades de um sistema computacional
“Saber é compreendermos as coisas que mais nos convém.”– Friedrich Nietzsche
Escolher e adotar bons frameworks de Desenvolvimento
“Eu apenas invento e espero que outros apareçam precisando do que inventei” – R. Buckminster Fuller
Priorizar convenção sobre configuração
• Visa diminuir o número de decisões que o desenvolvedor precisa tomar;
• Definir apenas aspectos
não convencionais da
aplicação;
• Diminuir esforço com
arquivos de configuração.
“O homem comum fala, o sábio escuta, e o tolo discute”. Sabedoria oriental
Práticas clichê adotadas por programadores
“A arte nunca está terminada, apenas abandonada.” – Leonardo Da Vinci
Seja um Programador Pragmático
“Um homem pinta com seu cérebro e não com suas mãos.”– Michelangelo
Pratique comunicação
“Experiência é apenas o nome que damos aos nossos erros.”– Oscar Wilde
Conheça áreas relacionadas
• Gerenciamento de Projetos;
• Técnicas para coleta de requisitos;
• Infra-estrutura.
“Fazer troça da •filoso•fia é, na verdade, �filosofar”– Blaise Pasca
Adote o Inglês como primeiro idioma
• Livros e manuais de referência não são traduzidos do dia para a noite;
• As mais importantes discussões sobre qualquer assunto de TI estão escritas e divulgadas em Inglês.
“É uma experiência eterna de que todos os homens com poder são tentados a abusar.” – Baron de Montesquieu
Participe de fóruns, comunidades e projetos Open-Source
“A nuca é um mistério para a vista.” – Paul Valéry
Compartilhe conhecimento via blogs
“O caminho do inferno está pavimentado de boas intenções.” – Marx
Considere a opção de criar o seu próprio negócio
“Nove pessoas não fazem um bebê em 1 mês” – Fred Brooks
Dúvidas?