ubiquitous language - portugues

11
Melhorando a comunicação entre stakeholder/desenvolvedor es com a Linguagem Ubíqua Alline Watkins

Upload: alline-oliveira

Post on 05-Dec-2014

1.366 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Ubiquitous Language - Portugues

Melhorando a comunicação entre

stakeholder/desenvolvedores com a

Linguagem Ubíqua

Alline Watkins

Page 2: Ubiquitous Language - Portugues

O problema:

Programadores conversam usando jargões técnicos (design patterns, abreviações, termos técnicos)

Especialistas do Domínio usam terminologias específicas de suas áreas de conhecimento (economia, hotelaria, telecom, …)

Computadores conversam linguagens de programação

alguém tem que ceder!

Page 3: Ubiquitous Language - Portugues

O Acordo:

Agile prega que programadores devem usar a linguagem de domínio como nomenclaturas no código fonte(“ubiquitous language”, “system metaphor” na XP)

Page 4: Ubiquitous Language - Portugues

u.bí.qu:o que está ao mesmo tempo em toda a parte, onipresente

(pt.Wikcionário.org)

UBIQUITOUS LANGUAGE

. 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)

. 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.)

Page 5: Ubiquitous Language - Portugues

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:

Page 6: Ubiquitous Language - Portugues

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)

Page 7: Ubiquitous Language - Portugues

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)

Page 8: Ubiquitous Language - Portugues

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

Page 9: Ubiquitous Language - Portugues

/** * 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)

Page 10: Ubiquitous Language - Portugues

Qual das duas opções um Stakeholder melhor entenderia?

Movimento do Jogador    Efetiva o movimento do jogador na grade do jogo.

Mover      Quando o jogador clica numa celula na grade do tabuleiro    

     o jogo desenha um 0 ou X dependendo de qual e o      jogador atual.

E Celula Vazia       Um jogador podera selecionar somente as celulas que 

       ainda nao foram selecionadas.

Mostra Cell Grid   Exibe a string O ou X na celula do jogo.                                              

Exibe Usuario        Is Vazio

(retiradas de um software exemplo para o Jogo da Velha)