dívida tecnica: precisando de crédito? quão fundo entrar e como evitar que o cobrador bata na sua...

Post on 04-Dec-2014

4.332 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Com métodos ágeis na moda, temos ferramentas para conseguir entregar mais valor com mais velocidade, mas muitas vezes ignoramos práticas que ajudam na manutenção da qualidade técnica da base de código. Num outro extremo, a busca pelo perfeccionismo causa tanto atraso que projetos acabam, tecnicamente perfeitos, mas sem nunca ter sido utilizados por clientes. Nesta palestra vou tratar do investimento em qualidade técnica buscando maximizar o retorno do investimento mínimo que conseguimos fazer. Pretendo dar exemplos de projetos reais, onde vi desde qualidade desnecessária à dívidas técnicas profundas e desconhecidas que inviabilizavam progresso. Vou apresentar técnicas para evidenciar e lidar com esta dívida no dia-a-dia e nas relações com os diversos stakeholders de um projeto.

TRANSCRIPT

DívidaTécnica

by @freire_da_silvaalexandre.freire@locaweb.com.br

O que vai rolar nessa palestra?

• Leis• Metáforas• Balas de prata• Histórias• Sintomas• Causas• Estratégias• Práticas• Padrões• Anti-padrões• Recomendações de livros

METÁFORAthe long lost XP practice

CoCeTCOestãoligados

SWITCH (key) {case ‘a’: printf(”a”)case ‘b’:…}

I O U $$$

METÁFORADívida irresponsável

- proposital ou não

Dívida consciente- empréstimo do carro- dívida de cartão de crédito ou cheque

especial - empréstimo da casa

METÁFORA

débito não é dívida!

lost in translation…

vs

“MEUS TESTES ESTÃO RODANDO.”

TESTANDO!

//TODO: refatorar aqui

//FIXME: isso não deveria //estar duplicado

//WTF! PERIGO!

A incrível capacidade de

análise dos seres humanos

?

SISTEMAS COMPLEXOS ADAPTATIVOS

+

O ministério da agilidade adverte: cuidado com seu uso de métricas

Big Visible Charts

By Matthew Bisanz

Não vamos nos preocupar com uma das causas de dívida técnica:

Falta de um processo claro de desenvolvimento

kanban

análise desenvolvimento aceitação produção

análise desenvolvimento aceitação produção

história: a dívida desconhecida do

e-mail

Não sabiamos qual era a dívida

Temos problemas

Acumulo de dívidas pequenas

Um novo fornecedor

oferece uma solução

Centenas de milhares de R$

Equipe junior para o novo

webmail

Continuamos com problemas

Novo responsável

No final os problemas que tinhamos eram

razoáveis…

… ainda por cima a nova solução não

aguentou

Pagamos a dívida do antigo

sistema

Descontinuamos a nova solução

CAUSAS

FALHASNA

COMUNICAÇÃO

FALHASNA

COLABORAÇÃO

Em Retrospectiva

BAD MANAGMENT

CALCULE e MOSTRE sua

DÍVIDA

http://www.sonarsource.org/

https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin

DOH!

Lei de Parkinson

O trabalho expande para ocupar o tempo reservado para sua execução

FOLGA + refactoring sprint

Time completo

Lei de Murphy

história: falência do SI

Sistema Interno (ou central)

Nasce em 1998 como um banco

access pelas mãos do nosso fundador

Passa por várias outras mãos…

… não conheciamos as

boas práticas

lib_fichao2.asp

Big Ball of Mud

Renovamos domínios sem os clientes pedirem

Centenas de milhares de R$

Não conseguimos entregar o

chargeback a tempo

Centenas de milhares de R$

Falência

Tem que pagar.Investimento

quase R$1milhão

Novo sistema, mas…

• Atentos a dívida

• Lei de Conway

• Camadas anti-corrupção

• Desacoplamento incremental

• Virada suave e reversível

+ refactoring to patterns

análise desenvolvimento aceitação produção

Story Maps

CFD

Use Case

Validated Learning

análise desenvolvimento aceitação produção

Seus testes podem ser

dívida

Acúmulo de wait()

Scenario: Tooltip viewGiven I selected the "lite" planWhen I move mouse over "tooltip”Then I should see tooltip contentAnd I move mouse out "tooltip”And I should not see tooltip content

análise desenvolvimento aceitação produção

Muitas métricas nesse espaço

• Linhas de código• Tamanho do método• Tamanho da classe• Complexidade ciclomática• Métodos por classe• Acoplamento entre objetos• Duplicação• Atividade do repositório• Cobertura dos testes• Testabilidade• Razão de linhas de teste por linhas de código

TRACKERThe long lost XP role

Code Smells – The bloaters

• Long Method• Large Class• Primitive Obsession• Long Parameter List• DataClumps

Code Smells – The OO abusers

• Switch Statements• Temporary Field• Refused Bequest• Alternative Classes with Different Interfaces

Code Smells –

The change preventers

• Divergent Change• Shotgun Surgery • Parallel Inheritance Hierarchies

Code Smells – The Dispensables

• Lazy class• Data class • Duplicate Code• Dead Code• Speculative Generality

Code Smells – The Couplers

• Feature Envy• Inappropriate Intimacy• Message Chains • Middle Man

http://metric-fu.rubyforge.org/

http://metric-fu.rubyforge.org/

http://metric-fu.rubyforge.org/

Toxicidade - no excel ;-)

http://findbugs.sourceforge.net/

Turbulência

Tree map de classes

Pirâmede de tamanho e complexidade

Testes/Código

Complexidade do design

Diagrama de sequência

Code City

Matriz de dependências

Última história: WebStore

Time 2 Market

Use FLOSS para ganhar vantagem

Entrando na dívida:

escalando com links simbólicos

80 clientes / servidor

12 servidores

Custo cliente: R$150

O Marketing vai pra TV

Just-in-time para pagar a dívida

Midleware + Cloud

Custo cliente: R$ 8

(e descendo)

Sempre existem 3 opções

Gambiarra não é opção

Não se endividar

Divida com juros

Divida sem juros

O futuro hoje

• Fuzzy tests– Injeção proposital de defeitos– Crawlers mal intencionados

• Self-healing systems– Algoritmos genéticos que consertam bugs

Referências• http://c2.com/cgi/wiki?TechnicalDebt• http://blog.csdn.net/firecoder/article/details/5264031• http://petdance.com/perl/technical-debt/• http://www.construx.com/Page.aspx?cid=2801• http://blog.objectmentor.com/articles/2009/09/22/a-mess-is-not-a-technical-debt• http://martinfowler.com/bliki/TechnicalDebtQuadrant.html• http://www.jimhighsmith.com/2010/10/19/the-financial-implications-of-technical-debt/• http://www.startuplessonslearned.com/2009/07/embrace-technical-debt.html• http://requirements.seilevel.com/blog/2011/03/software-requirements-impact-on-technical-debt-–-pa

rt-1.html• http://martinfowler.com/bliki/TechnicalDebtQuadrant.html• http://www.slideshare.net/dtsato/managing-your-technical-debt-agilebrazil-2011• http://www.slideshare.net/dwildt/da-mtrica-a-diverso-como-as-mtricas-no-desenvolvimento-de-softw

are-podem-ajudar-times-a-se-divertirem• http://www.infoq.com/news/2010/03/monetizing-technical-debt• http://www.soberit.hut.fi/mmantyla/badcodesmellstaxonomy.htm• http://pyxis-tech.com/en/expertise/refactoring• http://akitaonrails.com/2008/12/18/tradu-o-d-vida-t-cnica• http://www.infoq.com/presentations/Software-Quality-You-Know-It-when-You-See-It• http://programmingtour.blogspot.com/2011/03/turbulence-measuring-turbulent-nature.html

top related