O documento discute a importância da Linguagem Ubíqua para melhorar a comunicação entre desenvolvedores e stakeholders através de uma linguagem comum compreensível por ambos. A Linguagem Ubíqua envolve usar os termos do domínio do problema no código-fonte para tornar o software mais compreensível e manter o conhecimento do domínio armazenado nele.
1. Melhorando a comunicação entre stakeholder/desenvolvedores com a Linguagem Ubíqua Alline Watkins
2.
3.
4.
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. 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. 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. 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. /** * 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.
11.
Hinweis der Redaktion
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.