segunda-feira, 9 de maio de 2016

Design by contract, implementando primeiro um contrato

Design by Contract é baseado em uma poderosa metáfora de como elementos de um sistema de software de interagir uns com os outros, da mesma forma que as empresas colaboram: com base em obrigações ebenefícios mútuos. 
O "cliente" e "fornecedor" concordar com um "contrato" que:
  • O fornecedor deve fornecer um resultado determinado (obrigação) e tem o direito de esperar que o cliente ter satisfeito as condições exigidas (benefício).
  • O cliente deve satisfazer estas condições (obrigação) e tem o direito de obter o resultado (benefício).
  • Ambas as partes devem cumprir determinadas leis e regulamentos gerais, aplicando-se a todos os contratos.
Design by Contract transforma esses elementos em componentes integrais do software: pré-condições (obrigações do cliente, benefícios fornecedor);
Pós-condições (benefícios de cliente, obrigações do fornecedor);
Invariantes (regras gerais). 
Esses conceitos existem em todos os níveis:
  • requisitos
  • projeto
  • implementação
  • teste

Design by Contract revoluciona construção de software por eliminará erros antes que eles têm a oportunidade de prejudicar o software.
Design by Contract fornece:
  • documentação automática, de alta qualidade.
  • quadro integrado para testes específicos e eficazes.
  • a capacidade de comunicar seu projeto sem a necessidade de descrever os detalhes da implementação.
  • um guia claro e simples ao longo de todo o processo de desenvolvimento de software.
Aguardar uma certa condição para garantir que uma informação no módulo de clientes o chame: a pré-condição da rotina — uma obrigação para o cliente, e o benefício do fornecedor (a rotina em si), eliminando casos de executar por outros meios.
  • Garantir uma certa condição de saída: A pós-condição da rotina — uma obrigação do fornecedor, e obviamente um benefício (o maior benefício de chamar a rotina) para o cliente.
  • Manter uma determinada propriedade, assumida na entrada e garantida na saída: uma Classe Constante.
É possível resumir Programação por contrato através de "3 perguntas" que um designer deve-se fazer constantemente:
  • O que isto prevê?
  • O que isto garante?
  • O que isto mantém?
É um desafio para a construção de uma especificação que:
  • é o mais simples possível
  • é o mais claro possível
  • não tem nenhuma ambiguidade
  • é totalmente preciso
  • permite que o leitor ignore completamente os detalhes de implementação (a menos que há um bug)
  • forneça entendimento ao leitor o mais rápido possível, com pouca chance de mal-entendido
 Design By Contract é muito útil para a criação de classes e interfaces. 

Ele pode tanto orientar a descoberta de um design mais robusto.
Referências:

2 comentários:

  1. Muito legal este post, parabéns!
    Cadastra seu blog no /dev/All pro pessoal poder acompanhar seus posts!
    http://www.devall.com.br

    ResponderExcluir