SlideShare uma empresa Scribd logo
1 de 57
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….
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.
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 ,[object Object],[object Object]
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
Estratégias de Estruturação de Código-fonte e Controlo de Versão

Mais conteúdo relacionado

Mais procurados

O papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de softwareO papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de softwareLeonardo Zanivan
 
Tdd como uma ferramenta de arquitetura
Tdd como uma ferramenta de arquiteturaTdd como uma ferramenta de arquitetura
Tdd como uma ferramenta de arquiteturaEverton Tavares
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)Renato Groff
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareUFPA
 
MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!Flávio Lisboa
 
Crescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidadeCrescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidadeFelipe Nascimento
 
Poo apostila visual c
Poo apostila visual cPoo apostila visual c
Poo apostila visual cFabiano Lima
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasVagner Santana
 
Processos Ágeis - Scrum, Kanban ou ScrumBan
Processos Ágeis - Scrum, Kanban ou ScrumBanProcessos Ágeis - Scrum, Kanban ou ScrumBan
Processos Ágeis - Scrum, Kanban ou ScrumBanSamuel Cavalcante
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
Usabilidade aplicada a dispositivos móveis
Usabilidade aplicada a dispositivos móveisUsabilidade aplicada a dispositivos móveis
Usabilidade aplicada a dispositivos móveisleomario
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
 
Engenharia Reversa e Reengenharia Software
Engenharia Reversa e Reengenharia SoftwareEngenharia Reversa e Reengenharia Software
Engenharia Reversa e Reengenharia Softwareelliando dias
 

Mais procurados (20)

O papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de softwareO papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de software
 
Iniciando no Codeigniter
Iniciando no CodeigniterIniciando no Codeigniter
Iniciando no Codeigniter
 
Tdd como uma ferramenta de arquitetura
Tdd como uma ferramenta de arquiteturaTdd como uma ferramenta de arquitetura
Tdd como uma ferramenta de arquitetura
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
 
Framework JGenesis
Framework JGenesisFramework JGenesis
Framework JGenesis
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!
 
Crescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidadeCrescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidade
 
Poo apostila visual c
Poo apostila visual cPoo apostila visual c
Poo apostila visual c
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
 
Cs 2
Cs 2Cs 2
Cs 2
 
Processos Ágeis - Scrum, Kanban ou ScrumBan
Processos Ágeis - Scrum, Kanban ou ScrumBanProcessos Ágeis - Scrum, Kanban ou ScrumBan
Processos Ágeis - Scrum, Kanban ou ScrumBan
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Usabilidade aplicada a dispositivos móveis
Usabilidade aplicada a dispositivos móveisUsabilidade aplicada a dispositivos móveis
Usabilidade aplicada a dispositivos móveis
 
DevOps: Entregando software e serviços rapidamente
DevOps: Entregando software e serviços rapidamenteDevOps: Entregando software e serviços rapidamente
DevOps: Entregando software e serviços rapidamente
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de Software
 
Engenharia Reversa e Reengenharia Software
Engenharia Reversa e Reengenharia SoftwareEngenharia Reversa e Reengenharia Software
Engenharia Reversa e Reengenharia Software
 

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

Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6Alessandro Almeida
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioRalph Rassweiler
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Rodrigo Marinho
 
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team SystemTeched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team SystemFábio Câmara
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Ramon Durães
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versãoMarcos Pessoa
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANEAPSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANEFco Edilson Nascimento
 
Integracao Continua em projetos .NET
Integracao Continua em projetos .NETIntegracao Continua em projetos .NET
Integracao Continua em projetos .NETLuthiano Vasconcelos
 

Semelhante a Estratégias de Estruturação de Código-fonte e Controlo de Versão (20)

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team SystemTeched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team System
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
1º FasS2B 2010
1º FasS2B 20101º FasS2B 2010
1º FasS2B 2010
 
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANEAPSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANE
 
Integracao Continua em projetos .NET
Integracao Continua em projetos .NETIntegracao Continua em projetos .NET
Integracao Continua em projetos .NET
 

Mais de Comunidade NetPonto

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Comunidade NetPonto
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Comunidade NetPonto
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaComunidade NetPonto
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaComunidade NetPonto
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloComunidade NetPonto
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazComunidade NetPonto
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João JesusComunidade NetPonto
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComunidade NetPonto
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsComunidade NetPonto
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpComunidade NetPonto
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosComunidade NetPonto
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoComunidade NetPonto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realComunidade NetPonto
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteComunidade NetPonto
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 

Mais de Comunidade NetPonto (20)

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara Silva
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo Costa
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno Cancelo
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
ASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco GodoiASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco Godoi
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor Tomaz
 
HTML5 - Pedro Rosa
HTML5 - Pedro RosaHTML5 - Pedro Rosa
HTML5 - Pedro Rosa
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João Jesus
 
OData – Super Cola W3
OData – Super Cola W3OData – Super Cola W3
OData – Super Cola W3
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharp
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes Unitários
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de Projecto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 

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

  • 1. 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
  • 2. Tiago Pascoal tiago.pascoal@agilior.pt http://agilior.pt/blogs/tiago.pascoal
  • 3. Agenda Arquitectura? Padrões? Código? Estruturas? Veremos….
  • 4. 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.
  • 6. 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
  • 7.
  • 8.
  • 9.
  • 10. TEM DE HAVER UMA MANEIRA MELHOR... UM POUCO MAIS FLEXÍVEL
  • 11. 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
  • 12. 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...
  • 13.
  • 14. 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)
  • 15. 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
  • 19. Controlo de Versões Máquina do tempo Permite reconstruir e perceber o passado e a evolução do código fonte...
  • 20. Controlo de Versões Máquina do tempo Permite reconstruir e perceber o passado e a evolução do código fonte...
  • 21. Controlo de Versões Máquina do tempo Permite reconstruir e perceber o passado e a evolução do código fonte...
  • 22. Controlo de Versões Máquina do tempo Permite reconstruir e perceber o passado e a evolução do código fonte...
  • 23. 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
  • 24. 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
  • 25. 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
  • 29. E os Sistemas Distribuídos? (DVCS) TeamWare (90s) Code Co-op (97) GNU Arch Darcs SVK Mercurial Bazaar Git
  • 32. 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.
  • 34. 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
  • 35. 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.
  • 36. 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)
  • 37. 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
  • 38. All fixed set patterns are incapable of adaptability or pliability. The truth is outside of all fixed patterns Bruce Lee
  • 40. Obey the principles without being bound by them Bruce Lee
  • 41. 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
  • 42. 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
  • 43. Estruturação de um Projecto Uma prática possível...
  • 44. 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
  • 45. Á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
  • 46. 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 ...
  • 47. 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
  • 48. 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
  • 49. 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
  • 50. O que ficou de fora? Builds Rastreabilidade Ligação a outros sistemas: Testes Requisitos Bugs
  • 51. 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?
  • 53. 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
  • 55. 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! :)
  • 56. Obrigado! Tiago Pascoal tiago.pascoal@agilior.pt http://agilior.pt/blogs/tiago.pascoal