Estratégias de Estruturação de Código-fonte e Controlo de Versão
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 1,763 views

Muitas das dificuldades no desenvolvimento profissional de software são causadas por problemas (ou a falta de) um correcto sistema e uso de controlo de versões. Nesta apresentação o Tiago Pascoal, ...

Muitas das dificuldades no desenvolvimento profissional de software são causadas por problemas (ou a falta de) um correcto sistema e uso de controlo de versões. Nesta apresentação o Tiago Pascoal, MVP em Visual Studio Team System, irá mostrar estratégias sobre como melhor estruturar todos os artefactos de um projecto, incluindo melhores práticas para uso de controlo de versões, tendo por base a plataforma de Application Lifecycle Management da Microsoft (Team Foundation Server / TFS).

Statistics

Views

Total Views
1,763
Views on SlideShare
1,763
Embed Views
0

Actions

Likes
0
Downloads
11
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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 Presentation Transcript

  • http://netponto.org
    12ª Reunião Presencial - 10/07/2010
    Estratégias de Estruturação de Código-fonte e Controlo de VersãoTiago Pascoal
  • Tiago Pascoal
    tiago.pascoal@agilior.pt
    http://agilior.pt/blogs/tiago.pascoal
  • Agenda
    Arquitectura?
    Padrões?
    Código?
    Estruturas?
    Veremos….
    View slide
  • 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.
    View slide
  • Aviso...
  • 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
  • TEM DE HAVER UMA MANEIRA MELHOR... UM POUCO MAIS FLEXÍVEL
  • 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
  • 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...
  • 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
  • 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
  • Isto anda tudo ligado...
    Padrões Organizacionais
    Padrões Arquitecturais
    Padrões Organização de código (dia-a-dia)
    Padrões “Formação” de código (a genese)
  • 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
  • Padrões de Organização de Código
  • Ou estas...
  • Padrões
  • Controlo de Versões
    Máquina do tempo
    Permite reconstruir e perceber o passado e a evolução do código fonte...
  • Controlo de Versões
    Máquina do tempo
    Permite reconstruir e perceber o passado e a evolução do código fonte...
  • Controlo de Versões
    Máquina do tempo
    Permite reconstruir e perceber o passado e a evolução do código fonte...
  • Controlo de Versões
    Máquina do tempo
    Permite reconstruir e perceber o passado e a evolução do código fonte...
  • Source Control Moderno
    Características Expectáveis
    Operaçõesatómicas
    Marcação de código (taggingoulabelling)
    Branching
    Merging
    Merge through Rename
    Navegaçãorepositório
    Cliente
    Web
  • Source Control Moderno
    Características Expectáveis
    Operaçõesatómicas
    Marcação de código (taggingoulabelling)
    Branching
    Merging
    Merge through Rename
    Navegaçãorepositório
    Cliente
    Web
  • Source Control Moderno
    Características Expectáveis
    Operaçõesatómicas
    Marcação de código (taggingoulabelling)
    Branching
    Merging
    Merge through Rename
    Navegaçãorepositório
    Cliente
    Web
  • Dinossauro
  • Dinossauro
  • Dinossauro
  • E os Sistemas Distribuídos? (DVCS)
    TeamWare (90s)
    Code Co-op (97)
    GNU Arch
    Darcs
    SVK
    Mercurial
    Bazaar
    Git
  • Cool Kids
  • Cool Kids
  • Source Control: Terminologia
    Mainlineou 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.
  • Padrões de OrganizaçãoControlo de Versões
  • 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
  • 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.
  • 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)
  • Cuidados a ter no Check-In
    Os check-insdevem 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
  • All fixed set patterns are incapable of adaptability or pliability.
    The truth is outside of all fixed patterns
    Bruce Lee
  • Estruturação de um Projecto
  • Obey the principles without being bound by them
    Bruce Lee
  • 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
  • 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
  • Estruturação de um Projecto
    Uma prática possível...
  • 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
  • Á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
  • 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
    ...
  • 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
  • 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
  • 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
  • O que ficou de fora?
    Builds
    Rastreabilidade
    Ligação a outros sistemas:
    Testes
    Requisitos
    Bugs
  • 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?
  • Questões?
  • Referências
    CM 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
  • Patrocinadores desta reunião
  • Próximas reuniões presenciais
    10/07/2010 - Julho
    14/08/2010 - Agosto
    18/09/2010 - Setembro
    23/10/2010 - OutubroReserva estes dias na agenda! :)
  • Obrigado!
    Tiago Pascoal
    tiago.pascoal@agilior.pt
    http://agilior.pt/blogs/tiago.pascoal