Melhorando  a comunicação entre stakeholder/desenvolvedores com a  Linguagem Ubíqua   Alline Watkins
O problema: <ul><li>Programadores conversam usando jargões técnicos  ( design patterns, abreviações, termos técnicos ) </l...
O Acordo: <ul><li>Agile prega que programadores devem usar a linguagem de domínio como nomenclaturas no código fonte (“ubi...
<ul><li>u. bí .qu:o   </li></ul><ul><li>que está ao mesmo tempo em toda a parte, onipresente    (pt.Wikcionário.org) </li>...
Histórias de Usuário Reuniões E-mails   Mensagens Intântaneas Planejamento de Projeto Documentação do Software E  CÓDIGO F...
As vantagens... Comunicação mais Eficiente Menor  risco de desentendimentos Conhecimento do Domínio armazenado no código f...
NÃO Quando o  Usuário  clica no  Grid , o  sistema  exibe  0 ou X dependendo que qual é o  Usuário  atual.   Exemplo de Hi...
NÃO . Integer  i  =  new Integer(); . String  char1  =  new String(); . public class GameDAO() { } . catch (Exception e) E...
/**   * Exibe a string O ou X na celula do jogo. */ public class   MostraCellGrid { public static void   exibeUsuario  (Gr...
Qual das duas opções um Stakeholder melhor entenderia ? <ul><li>Movimento do Jogador      Efetiva o movimento do jogador n...
<ul><li>[email_address] </li></ul>!!  OBRIGADA !!
Próximos SlideShares
Carregando em…5
×

Ubiquitous Language - Portugues

1.354 visualizações

Publicada em

1 comentário
3 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
1.354
No SlideShare
0
A partir de incorporações
0
Número de incorporações
368
Ações
Compartilhamentos
0
Downloads
8
Comentários
1
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Main problem in software is miscommunication
  • The common language is in the middle and not more of business language nor technical language Somewhere in between, not programmers completely conforming to biz language
  • Maintainability – classes and packages are named/grouped in a way that makes sense in the real world Agility improve - Precise Communication
  • We understand each other Software development is by its nature a series of translations and compromises. What the end user wants, what the customer is willing to pay for, and what is technically feasible rarely combine to form a unified set of features. In this talk we will explore how an Agile team can work to understand each other better, in particular at the communication divide between stakeholders and developers. We will show you how to develop a domain-specific ubiquitous language, how to lessen the responsibility gap between managers and developers, and how to use your codebase as the central source for documentation.
  • Ubiquitous Language - Portugues

    1. 1. Melhorando a comunicação entre stakeholder/desenvolvedores com a Linguagem Ubíqua Alline Watkins
    2. 2. O problema: <ul><li>Programadores conversam usando jargões técnicos ( design patterns, abreviações, termos técnicos ) </li></ul><ul><li>Especialistas do Domínio usam terminologias específicas de suas áreas de conhecimento (economia, hotelaria, telecom, …) </li></ul><ul><li>Computadores conversam linguagens de programação </li></ul><ul><li>alguém tem que ceder! </li></ul>
    3. 3. O Acordo: <ul><li>Agile prega que programadores devem usar a linguagem de domínio como nomenclaturas no código fonte (“ubiquitous language”, “system metaphor” na XP) </li></ul>
    4. 4. <ul><li>u. bí .qu:o </li></ul><ul><li>que está ao mesmo tempo em toda a parte, onipresente (pt.Wikcionário.org) </li></ul><ul><li>UBIQUITOUS LANGUAGE </li></ul><ul><li>. A language structured around the domain model and used by all team members to connect all the activities of the team with the software. (Excerpted from Domain-Driven Design by Eric Evans ) </li></ul><ul><li>. We understand each other. (Excerpted from The Art of Agile Development by James Shore and Shane Warden, published by O'Reilly. Copyright © 2008 the authors. All rights reserved.) </li></ul>
    5. 5. Histórias de Usuário Reuniões E-mails Mensagens Intântaneas Planejamento de Projeto Documentação do Software E CÓDIGO FONTE !! Onde aplicar:
    6. 6. As vantagens... Comunicação mais Eficiente Menor risco de desentendimentos Conhecimento do Domínio armazenado no código fonte Código mais compreensível (manutenibilidade, extensibilidade)
    7. 7. NÃO Quando o Usuário clica no Grid , o sistema exibe 0 ou X dependendo que qual é o Usuário atual. Exemplo de História de Usuário: SIM Quando o Jogador clica no Tabuleiro, o Jogo exibe o símbolo 0 ou X dependendo de qual é o Jogador atual. (retiradas de um software exemplo para o Jogo da Velha)
    8. 8. NÃO . Integer i = new Integer(); . String char1 = new String(); . public class GameDAO() { } . catch (Exception e) Exemplos no Código Fonte: SIM . String realSignificadoDaString = new String(); . public class ScoreDataLoader() { } . catch (Exception ExcecaoUsuarioNaoAutenticado) NÃO . Ambiguidades . Inconsistências . Sinônimos . Abreviações SIM . Clareza . Precisão . Reuso . Nomes Completos
    9. 9. /**   * Exibe a string O ou X na celula do jogo. */ public class   MostraCellGrid { public static void   exibeUsuario (Grid  grid , Cell  cell ) {            if (! Inicializacao. flag    &&  Inicializacao.statusJogo.getSequencia () == null     &&  isVazio ( grid ,  cell )) {   Inicializacao. flag = true;   String  mk =  exibeString ( Inicializacao.statusJogo        . getUsuarioCorrente (). getStringUsuario ());   grid .setHTML( cell. getRowIndex(),  cell .getCellIndex(),  mk );   Inicializacao.statusJogo.getStatus ()[ cell .getRowIndex()] [ cell .getCellIndex()] =  Inicializacao.statusJogo . getUsuarioCorrente (); GameEnd . verificaFim ( Inicializacao.statusJogo , cell .getRowIndex(),  cell .getCellIndex());        } (...) } Uma classe ANTES e DEPOIS da Linguagem Ubíqua /**   * Efetiva o movimento do jogador na grade do jogo.   */ public class  MovimentoDoJogador   { /**  * Quando o jogador clica numa celula na grade do tabuleiro o jogo desenha  * um 0 ou X dependendo de qual e o jogador atual.  */ public static void mover   (GradeDoJogo  gradeDoJogo , Cell celulaSelecionada ) { if (! VariaveisGlobais.flagDeAguardoDoMovimento && VariaveisGlobais.statusCorrenteDoJogo.getSequenciaGanhadora () == null && eCelulaVazia ( gradeDoJogo , celulaSelecionada )) { VariaveisGlobais.flagDeAguardoDoMovimento = true; String simbolo = exibeSimboloDoJogador ( VariaveisGlobais.statusCorrenteDoJogo . getJogadorCorrente (). getSimboloDoJogador ()); gradeDoJogo .setHTML( celulaSelecionada .getRowIndex(), celulaSelecionada .getCellIndex(), simbolo ); ChamadaParaOJulgamentoDoMovimento.verificaSeGanhou ( VariaveisGlobais.statusCorrenteDoJogo , celulaSelecionada .getRowIndex(), celulaSelecionada .getCellIndex()); } } (...) } (Excerpted from a Tic Tac Toe Game source code)
    10. 10. Qual das duas opções um Stakeholder melhor entenderia ? <ul><li>Movimento do Jogador      Efetiva o movimento do jogador na grade do jogo. </li></ul><ul><ul><ul><li>Mover  </li></ul></ul></ul><ul><ul><ul><li>      Quando o jogador clica numa celula na grade do tabuleiro          o jogo desenha um 0 ou X dependendo de qual e o       jogador atual. </li></ul></ul></ul><ul><ul><ul><li>E Celula Vazia </li></ul></ul></ul><ul><ul><ul><li>        Um jogador podera selecionar somente as celulas que         ainda nao foram selecionadas. </li></ul></ul></ul><ul><li>Mostra Cell Grid </li></ul><ul><li>    Exibe a string O ou X na celula do jogo.                                               </li></ul><ul><ul><ul><li>Exibe Usuario  </li></ul></ul></ul><ul><ul><ul><li>        </li></ul></ul></ul><ul><ul><ul><li>Is Vazio </li></ul></ul></ul>(retiradas de um software exemplo para o Jogo da Velha)
    11. 11. <ul><li>[email_address] </li></ul>!! OBRIGADA !!

    ×