Tarefa: Projetar a Solução
Identificar os elementos e planejar as interações, o comportamento, os relacionamentos e os dados necessários para construir uma funcionalidade.

Elabore visualmente o design para ajudar na solução do problema e na comunicação da solução.

Disciplinas: Desenvolvimento
Objetivo

A finalidade desta tarefa é descrever os elementos do sistema de modo que suportem o comportamento necessário, sejam de alta qualidade, e adaptem-se a arquitetura.

Relacionamentos
PapéisExecutor Principal: Executores Adicionais:
EntradasObrigatório:
    Opcional:
      Saídas
        Descrição Principal

        Esta tarefa serve para projetar parte do sistema, não o sistema inteiro. Deve ser aplicada com base em um pequeno grupo dos requisitos. Os requisitos que orientam o Design podem ser requisitos funcionais baseados em cenários, requisitos não-funcionais ou uma combinação destes.

        Esta tarefa pode ser aplicada em um contexto específico tal como os elementos de acesso à base de dados necessários para algum cenário. Neste caso a tarefa pode ser aplicada outra vez mais tarde, para tratar um contexto diferente com os mesmos requisitos. Tenha em mente que para construir uma funcionalidade que tenha valor para os usuários, todos os contextos precisarão ser projetados e implementados. Por exemplo, para completar uma parte da capacidade do sistema ela deverá ser projetada e implementada em todos os seus contextos, tais como a interface de usuário, as regras de negócio, o acesso à base de dados, etc.

        Para coesão e completude, esta tarefa é descrita como passos de início-ao-fim do design de um cenário de uso do sistema. Na prática, esta tarefa será executada várias vezes quando o design for considerado pela primeira vez, as partes forem implementadas, mais design for realizado com base no que foi aprendido, etc. A aplicação mais saudável desta tarefa está na grande proximidade da implementação.

        Se esta tarefa estiver sendo executada em um elemento arquiteturalmente significante, os resultados deste design devem ser referenciados pelo Caderno de Arquitetura. Veja Guideline: Determinar os Requisitos Arquiteturalmente Significantes para mais informações.

        Passos
        Compreenda os detalhes dos requisitos

        Examine os Caso de Uso relevantes e a Especificação de Requisitos Suplementares para compreender o escopo da tarefa de design e as expectativas sobre o Design. Trabalhe com os Stakeholder e o Analista para esclarecer informações ambíguas ou incompletas. Veja Guideline: Analisar o Design.

        Se os requisitos não estiverem representados em algum tipo de cenário (por exemplo, um requisito não-funcional pôde não ter um cenário associado a ele), um cenário terá que ser identificado para exercitar apropriadamente os requisitos sob consideração.

        Se for determinado que os requisitos estejam incompletos ou incorretos, trabalhe com um analista e um Stakeholder para melhorar os requisitos e possivelmente submeta uma solicitação de mudança para os requisitos.

        Compreenda a arquitetura

        Revise o Caderno de Arquitetura para identificar mudanças e adições à arquitetura. Veja Guideline: Evoluir o Design para mais informações. Trabalhe com o arquiteto se houver alguma incerteza sobre a compreensão das partes relevantes da arquitetura ou sobre a conformidade da estratégia de design.

        Este passo pode ser ignorado se, não houve alterações na arquitetura na iteração anterior.

        Identifique elementos de design

        Identifique os elementos que colaboram entre si para fornecer o comportamento desejado. Isto pode começar com as principais abstrações identificadas no Caderno de Arquitetura, no design, na análise de domínio e na análise clássica dos requisitos (filtragem de substantivo) para derivar os elementos que serão necessários para cumpri-los. O Padrão Entidade-Controle-Fronteira fornece um bom começo para identificar elementos. Veja também Guideline: Analisar o Design.

        Os elementos de design existentes devem ser examinados para determinar se eles podem participar na colaboração. É um erro criar todos os novos elementos em cada execução desta tarefa.

        Determine como os elementos colaboram para realizar o cenário

        Percorra o cenário distribuindo as responsabilidades aos elementos participantes e assegurando que eles têm os relacionamentos necessários para colaborar.

        Estas responsabilidades podem ser simples declarações do comportamento atribuídas aos elementos; não necessitam ser especificações detalhadas de operações com parâmetros, etc. De forma similar, os relacionamentos podem ser definidos apenas nesta etapa. Esta etapa serve para assegurar que um modelo de qualidade esteja sendo criado e que seja robusto o bastante para suportar os requisitos. Veja Guideline: Analisar o Design.

        Verifique o Caderno de Arquitetura e o trabalho de design prévio para criar uma colaboração consistente. Trabalhe com o Arquiteto para entender os detalhes e as motivações da arquitetura. Procure reutilizar relações e comportamentos existentes ou aplique estruturas similares para simplificar o design de todo o sistema.

        Refine as decisões de design

        Refine o design até um nível apropriado de detalhe para orientar a implementação e assegurar que se adapta à arquitetura. Nesta etapa o design pode levar em consideração a linguagem de implementação real e outras decisões técnicas. Revise a identificação dos elementos e das colaborações que realizam os cenários se for necessário enquanto este refinamento leva em consideração detalhes em um nível menor de abstração. Discuta questões sobre teste, tais como os elementos de design que são difíceis de testar ou áreas críticas de desempenho, com o Testador e o Arquiteto.

        Evolua o design, analisando as alterações recentes no maior contexto do design e determine se as técnicas de re-fatoração e re-elaboração irão melhorar a robustez, a flexibilidade e a compreensão do design. Veja Guideline: Evoluir o Design para mais informações.

        Incorpore os Mecanismo Arquitetural. Aplique uma estrutura consistente dos elementos e organização do comportamento como em outras áreas do design e use os padrões identificados na arquitetura.

        Projete o interior (para elementos grandes ou complexos)

        Projete elementos grandes ou complexos ou algum comportamento interno complexo mais detalhadamente.

        Isto pode apenas envolver o planejamento de um algoritmo que possa ser executado para produzir o comportamento desejado. Adicione operações, atributos e relacionamentos adicionais para suportar as expectativas de um elemento.

        Projete o estado do elemento sobre o curso de sua vida para assegurar o comportamento apropriado em várias circunstâncias. Pode ser útil descrever uma máquina de estado para os elementos com estados complexos.

        Comunique o Design

        Comunique o design do sistema para aqueles que necessitam compreende-lo. Embora isto esteja descrito daqui até o fim da tarefa, a comunicação deve acontecer em todas as etapas. Trabalhar colaborativamente é sempre melhor do que revisar o trabalho depois dele estar completo.

        Aqui estão algumas formas de comunicar o design:

        • Modelos formais especificados em UML.
        • Diagramas informais que mostrem a estrutura estática e capturem o comportamento dinâmico.
        • Código comentado que comunique informações sobre a estrutura estática. Podendo ser complementado com descrições textuais do comportamento colaborativo através dos módulos de código.
        • Modelos de dados para descrever o esquema da base de dados.

        Aqui estão alguns exemplos dos indivíduos que precisarão entender o design do sistema:

        • Os desenvolvedores que implementarão uma solução baseados no design.
        • Os arquitetos que podem revisar o design para assegurar que se conforma com a arquitetura ou que possa examinar o design para oportunidades de melhoria na arquitetura.
        • Outros projetistas que podem examinar o design para aplicabilidade em outras partes do sistema.
        • Desenvolvedores ou outros projetistas que estarão trabalhando em outras partes do sistema que dependerão dos elementos projetados nesta tarefa.
        • Outros revisores que revisarão o design em relação à qualidade e aderência aos padrões.
        Avalie o Design

        Avalie o design de objeto para acoplamento, coesão e outras medidas de qualidade de design.

        Considere o design de vários ângulos para assegurar que seja um design de alta qualidade e comunicável. Trabalhe com outros membros técnicos da equipe; uma parte independente pode fornecer uma perspective nova. Use o Testador e o Arquiteto para fornecerem perspectivas sobre a qualidade e aderência do design à arquitetura. Entretanto, ao identificar potenciais revisores tenha em mente que se alguém puder adicionar valor revisando o design, então talvez ele possa adicionar ainda mais valor participando ativamente no próprio esforço de design. Se falhas de design forem identificadas, melhore o design.

        Veja Concept: Design, Guideline: Analisar o Designe Guideline: Evoluir o Design para mais informações.

        Principais Considerações

        Cada etapa nesta tarefa pode fazer com que todas as etapas precedentes sejam revisadas a luz de novas informações e decisões. Por exemplo, ao determinar como os elementos colaboram você pode encontrar uma falha nos requisitos que lhe remetem ao início após conversar com o Analista. Ou quando da avaliação do design, um revisor poderia notar que um elemento reutilizável que está sendo usado não funciona como esperado e pode fazer com que você identifique novos elementos para utilizar em seu lugar.

        Considere a arquitetura ao executar esta tarefa. Todo trabalho de design deve ser feito considerando a arquitetura na qual o Design existe. Além disso, determinados elementos de design serão considerados arquiteturalmente significantes; estes elementos irão demandar atualizações na arquitetura.

        Esta tarefa será aplicada várias vezes. O design é mais bem executado em pequenas partes.

        Mesmo ao começar o design para um projeto espera-se que existam frameworks e elementos reutilizáveis. Cada etapa desta tarefa deve dar atenção ao Design e a Implementação existentes, utilizando elementos existentes quando possível e emulando ou melhorando os elementos existentes de acordo com o necessário ao projetar esta parte da solução.

        Aplique padrões durante toda esta tarefa. Os padrões representam designs aprovados e seu uso promove qualidade e consistência em todo o Design.

        Informações Adicionais