estratégias de estruturação de código-fonte e controlo de versão

57
Estratégias de Estruturação de Código-fonte e Controlo de Versão Tiago Pascoal http://netpont o.org 12ª Reunião Presencial - 10/07/2010

Upload: comunidade-netponto

Post on 25-Jul-2015

1.333 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Estratégias de Estruturação de Código-fonte e Controlo de Versão

Tiago Pascoal

http://netponto.org12ª Reunião Presencial - 10/07/2010

Page 3: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Agenda

Arquitectura?Padrões?Código?Estruturas?

Veremos….

Page 4: Estratégias de Estruturação de Código-fonte e Controlo de Versão

I am not teaching you anything. I just help you to explore yourself.

If you want to learn to swim jump into the water. On dry land no frame of mind is ever going to help you.

Page 5: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Aviso...

Page 6: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Desenvolvimento em Série

• Quando alguém está a trabalhar num ou mais artefactos tem exclusividade sobre ele e mais ninguém lhe pode mexer

Page 7: Estratégias de Estruturação de Código-fonte e Controlo de Versão
Page 8: Estratégias de Estruturação de Código-fonte e Controlo de Versão
Page 9: Estratégias de Estruturação de Código-fonte e Controlo de Versão
Page 10: Estratégias de Estruturação de Código-fonte e Controlo de Versão

TEM DE HAVER UMA MANEIRA MELHOR... UM POUCO MAIS FLEXÍVEL

Page 11: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Conway Law

“...organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations.”

http://en.wikipedia.org/wiki/Conway%27s_Law

Page 12: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Meu Corolário

• A qualidade e a fluidez do desenvolvimento está dependente da estrutura e organização do código, mas acima de tudo pela flexibilidade e dos padrões oferecidos pelo sistema de controlo de versões...

Page 13: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Desenvolvimento Concorrente

• Modelo de concorrência optimista. Várias pessoas podem mexer no mesmo artefacto e só em caso de conflito será necessário intervenção humana

Page 14: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Mas e a arquitectura senhor?

• O que é que isto tem a ver com arquitectura?

hei-de ouvir o teu parecerhás-de me dizerhás-de me dizerhás-de me dizerse é cada coisa para seu ladoou se isto anda tudo ligado

Sérgio Godinho

Page 15: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Isto anda tudo ligado...

Padrões Organizacionais

Padrões Organização de código (dia-a-dia)

Padrões “Formação” de código (a genese)

Padrões Arquitecturais

Page 16: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Padrões Organizacionais

• TODO: meter o diagrama do livro– Vão ter de imaginar. O meu scanner não funciona no

Windows 7 :)

– Página 100

Page 17: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Padrões de Organização de Código

Page 18: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Ou estas...

Page 19: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Padrões

Page 20: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Controlo de Versões

• Máquina do tempo• Permite reconstruir e perceber o passado e a

evolução do código fonte...

Page 21: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Controlo de Versões

• Máquina do tempo• Permite reconstruir e perceber o passado e a

evolução do código fonte...

Page 22: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Controlo de Versões

• Máquina do tempo• Permite reconstruir e perceber o passado e a

evolução do código fonte...

Page 23: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Controlo de Versões

• Máquina do tempo• Permite reconstruir e perceber o passado e a

evolução do código fonte...

Page 24: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Source Control Moderno

• Características Expectáveis– Operações atómicas– Marcação de código (tagging ou labelling)– Branching– Merging– Merge through Rename– Navegação repositório• Cliente• Web

Page 25: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Source Control Moderno

• Características Expectáveis– Operações atómicas– Marcação de código (tagging ou labelling)– Branching– Merging– Merge through Rename– Navegação repositório• Cliente• Web

Page 26: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Source Control Moderno

• Características Expectáveis– Operações atómicas– Marcação de código (tagging ou labelling)– Branching– Merging– Merge through Rename– Navegação repositório• Cliente• Web

Page 27: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Dinossauro

Page 28: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Dinossauro

Page 29: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Dinossauro

Page 30: Estratégias de Estruturação de Código-fonte e Controlo de Versão

E os Sistemas Distribuídos? (DVCS)

• TeamWare (90s)• Code Co-op (97)• GNU Arch• Darcs• SVK• Mercurial• Bazaar• Git

Page 31: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Cool Kids

Page 32: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Cool Kids

Page 33: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Source Control: Terminologia• Mainline ou trunk – Árvore principal de

desenvolvimento. Possui os desenvolvimentos mais actuais.

• Branch – A separação de um item (directoria, ficheiro) para um caminho alternativo. Os caminhos são independentes.

• Label ou Tag – Define um snapshot de uma árvore de desenvolvimento a um dado momento. Auxílio para definição de uma baseline.

Page 34: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Padrões de OrganizaçãoControlo de Versões

Page 35: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Codeline por Versão / Release

• Existe uma árvore de desenvolvimento distinta para cada versão– Que terá que ser mantida

• Adequada para o desenvolvimento de produtos

Page 36: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Codeline por Ambiente

• Se substituirmos versão por ambiente, temos um padrão mais adequado a empresas que não desenvolvem produtos

• O código é promovido entre ambientes à medida das necessidades

• Eg: desenvolvimento, testes, qualidade e produção.

Page 37: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Um método possível• Uma árvore de desenvolvimento Trunk– A raiz deve ser muito pequena– Aconselhável criar especificamente um trunk na raiz. Facilita o

branching.

• Ao colocar criar uma versão colocar-lhe uma label– Permite reproduzir a qualquer altura uma dada versão– Se necessário corrigir um bug numa dada versão e não for

possível colocar a versão em produção, criar um branch a partir da label.• Corrigir o bug no branch, e fazer o merge para os ambientes necessários

(forward merge)

Page 38: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Cuidados a ter no Check-In

• Os check-ins devem ser atómicos• Não devemos misturar diferentes tarefas no

mesmo check-in• Uma tarefa por check-in apenas• Estas práticas facilitam a rastreabilidade

• Nota: Para sistemas em que existe capacidade de ligação entre código e tarefas

Page 39: Estratégias de Estruturação de Código-fonte e Controlo de Versão

All fixed set patterns are incapable of adaptability or pliability. The truth is outside of all fixed patterns–Bruce Lee

Page 40: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Estruturação de um Projecto

Page 41: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Obey the principles without being bound by them–Bruce Lee

Page 42: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Estruturação Árvore Desenvolvim.• Não existe uma maneira pré-definida de estruturação de

código...

• O sistema de controlo de versões não deve qualquer obrigação ou coloca restrição na estruturação da árvore de desenvolvimento

• Mas existem algumas práticas que facilitam o processo de desenvolvimento

Page 43: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Práticas de Estruturação?• Escrever um documento com as convenções e práticas a

utilizar na estruturação de código

• A estruturação pode não ser perfeita, mas a consistência facilita a comunicação, a migração entre equipas e o processo de desenvolvimento

Page 44: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Estruturação de um Projecto• Uma prática possível...

Page 45: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Estruturação de um Projecto• Na raiz criar uma directoria com o nome do projecto (raiz

do projecto)

• Não colocar ficheiros na raiz do projecto

• A raiz do projecto contém apenas directorias– Para cada um dos branches– Dar um nome bem definido para a arvore principal (eg trunk,

mainline). Este nome será comum a todos os projectos

Page 46: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Árvore de Projecto• Definir uma convenção para estruturação das directorias

do projecto e seguí-las em todos os projectos– Previsibilidade e ajudam a comunicação e à adaptação de um

projecto– Reduz Custo de entrada– Aumenta productividade– Reduz erros

Page 47: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Sugestão para Árvore de Projecto• Projecto A

– Trunk – Directoria principal. Contém o(s) ficheiro(s) da(s) solução(ões)• Solution Items• Dependencies – Bibliotecas licenciadas , bibliotecas comuns entre projecto• Installation – Ficheiros para criar o instalador da aplicação• Source – Código fonte da aplicação. Estruturar por módulos ou por tecnologia.

Contém os ficheiros de projecto de Visual Studio– Módulo 1– Modulo 2– Módulo ...

• Tests– Unit– Load– Manual– Integration– ...

Page 48: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Agregação de Código• Solution – Pode Conter:

– Um mais projectos– Ficheiros (Item)– Directorias virtuais (solution folders)

• Project – Contém– Tem um tipo

• Cada tipo poderá ter caracteristicas distintas– Referências para outros projectos (dependencias) da solução– Referências a DLLs– Código– Ficheiros

Page 49: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Estruturação da Solução• Utilizar Solution Folders

– Mapeia areas lógicas da solução– Facilita a organização e navegação no código– Não tem que ser um mapeamento directo para as directorias de projecto

Page 50: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Código Comum a vários Projectos• Colocado na directoria Dependencies

• Gerido tal e qual se fosse um componente desenvolvido por uma entidade externa (eg: biblioteca de gráficos)

• Não ligar directamente ao código-fonte do projecto comum

• Será feito o upgrade para uma nova versão quando a equipa o entender e não sempre que é feita uma alteração

Page 51: Estratégias de Estruturação de Código-fonte e Controlo de Versão

O que ficou de fora?

• Builds• Rastreabilidade– Ligação a outros sistemas:• Testes• Requisitos• Bugs

Page 52: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Em Suma• Repositório centralizado de todos os artefactos– Código fonte– Scripts– Modelo de dados– Scripts de instalação

• Teste do Algodão– Instalar uma nova máquina, ligá-la à rede, obter a última versão

do repositório– É possível compilar o código sem processos manuais?

Page 53: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Questões?

Page 54: Estratégias de Estruturação de Código-fonte e Controlo de Versão

ReferênciasCM Patterns for Agility

– http://www.scmpatterns.com

Microsoft Team Foundation Server Branching Guidance– http://www.codeplex.com/BranchingGuidance

Visual Studio TFS Branching Guide 2010– http://tfsbranchingguideiii.codeplex.com

Page 56: Estratégias de Estruturação de Código-fonte e Controlo de Versão

Próximas reuniões presenciais

• 10/07/2010 - Julho• 14/08/2010 - Agosto• 18/09/2010 - Setembro• 23/10/2010 - Outubro

Reserva estes dias na agenda! :)