![Page 1: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/1.jpg)
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 2: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/2.jpg)
Tiago [email protected]://agilior.pt/blogs/tiago.pascoal
![Page 3: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/3.jpg)
Agenda
Arquitectura?Padrões?Código?Estruturas?
Veremos….
![Page 4: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/5.jpg)
Aviso...
![Page 6: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/7.jpg)
![Page 8: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/8.jpg)
![Page 9: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/9.jpg)
![Page 10: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/17.jpg)
Padrões de Organização de Código
![Page 18: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/18.jpg)
Ou estas...
![Page 19: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/19.jpg)
Padrões
![Page 20: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/27.jpg)
Dinossauro
![Page 28: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/28.jpg)
Dinossauro
![Page 29: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/29.jpg)
Dinossauro
![Page 30: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/31.jpg)
Cool Kids
![Page 32: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/32.jpg)
Cool Kids
![Page 33: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/34.jpg)
Padrões de OrganizaçãoControlo de Versões
![Page 35: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/38.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/40.jpg)
Estruturação de um Projecto
![Page 41: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/45.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/46.jpg)
Á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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/47.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/48.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/49.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/50.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/51.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/52.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/53.jpg)
Questões?
![Page 54: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/54.jpg)
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 55: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/55.jpg)
Patrocinadores desta reunião
![Page 56: Estratégias de Estruturação de Código-fonte e Controlo de Versão](https://reader035.vdocuments.pub/reader035/viewer/2022062514/55b36349bb61eba8548b4599/html5/thumbnails/56.jpg)
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! :)