A criação de um documento de design de software após o desenvolvimento pode ser justificada?


11

Atualmente, estou trabalhando na minha graduação para meus estudos de "Desenvolvimento de Software", nos quais tenho que desenvolver software complexo individualmente em uma empresa externa. Tudo isso precisa ser feito de maneira estruturada, criando todos os documentos correspondentes.

Para este projeto, decidi trabalhar com os documentos padrão do IEEE: Documento de Requisitos de Software (SRS), Documentos de Arquitetura de Software (SAD) e Documento de Design de Software (SDD). Embora ensinado o contrário na escola, para este projeto eu escolhi criar o SDD após o desenvolvimento (em vez de antes). Meu raciocínio é:

A empresa em que faço meu estágio me deu instruções para criar um software complexo, satisfazendo um certo conjunto de requisitos, de maneira experimental. Devido à quantidade de liberdade que eles me deram na definição do projeto, quase nada é certo de antemão, e pode ser melhor encontrado durante as experiências no processo de desenvolvimento. Além disso, estou criando o software de maneira individual . Não traria nenhum benefício para qualquer pessoa na empresa fazer esse design de software com antecedência. Fazer isso de antemão me custará muito tempo para alterá-lo mais tarde, pois posso ter certeza de que, com as incertezas do projeto, o design que faço antes terá que ser muito alterado . Isso parece contraproducente para mim.

Essa é uma boa justificativa para criar o SDD após o desenvolvimento? Caso contrário, haveria uma boa justificativa para isso?

Edit: O motivo para criar o SDD posteriormente seria para futuros desenvolvedores continuarem no projeto. Não poderei concluir o projeto inteiro no meu período de graduação, portanto outros desenvolvedores terão que continuar na base de código atual.


2
Se você precisar alterar muito seu SDD durante / após o desenvolvimento, provavelmente ele possui muitos detalhes.
freedomn-m


Ovo ou galinha - o que veio primeiro é algo em que os filósofos se dedicam. SDD e software completo (complexo) devem ser os mesmos, eles evoluem juntos.
mattnz

Para mim, não funciona para documentar depois. É muito chato para mim. Preciso escrever enquanto estou projetando. Desenhar um SDD também é uma espécie de desvio de borracha: você precisa explicar o design e isso descobrirá problemas mais cedo.
jos

Respostas:


17

No IEEE Std 1016 Seção 3.1 Design de software em contexto, você pode encontrar este parágrafo:

Um SDD pode ser preparado e usado em várias situações de design. Normalmente, um SDD é preparado para dar suporte ao desenvolvimento de um item de software para resolver um problema, onde esse problema foi expresso em termos de um conjunto de requisitos. O conteúdo do SDD pode ser rastreado para esses requisitos. Em outros casos, um SDD está preparado para entender um sistema existente sem documentação de projeto. Nesses casos, um SDD é preparado de modo que as informações de interesse sejam capturadas, organizadas, apresentadas e disseminadas a todas as partes interessadas. Essas informações de interesse podem ser usadas para o planejamento, análise, implementação e evolução do sistema de software, identificando e abordando as preocupações essenciais do projeto.

Os autores do IEEE Std 1016 reconhecem que um SDD não pode ser criado antecipadamente. Um pode ser criado depois que o sistema de software existir, a fim de capturar informações para as partes interessadas.

A Seção 1.1 também fornece algumas informações interessantes:

Este padrão não prescreve metodologias específicas para design, gerenciamento de configuração ou garantia de qualidade.

No contexto dessas perguntas, as palavras-chave são "gerenciamento de configuração". O gerenciamento de configuração não se aplica apenas ao sistema de software que está sendo criado, mas a qualquer documentação associada.

Na sua situação pessoal e em muitas situações, criar um SDD antecipadamente é um desperdício. A resposta de David Arno está perto de ser o que eu consideraria a resposta certa. O verdadeiro design do seu sistema de software é o código. No entanto, você "cria o SDD antes" ou "cria o SDD depois" não são suas únicas opções. Você tem uma terceira opção - evolua o SDD com o sistema de software.

Se você está seguindo um padrão como o IEEE Std 1016, possui requisitos para um SDD. Especificamente, a Seção 4 deste padrão define o conteúdo que você possui. À medida que você trabalha nas decisões de design, comece a criar os diferentes pontos de vista, vistas e sobreposições. Ao tomar decisões, capture a lógica do design para elas.

Isso permitirá que as partes interessadas sigam a evolução do design do software sem precisar se aprofundar no código. Obviamente, as pessoas podem ter comentários ou sugestões. Se você estiver atualizando o SDD, eles poderão acompanhar seu progresso e fornecer feedback sobre a abordagem mais cedo, que você poderá incorporar ao produto e ao SDD. Quando você faz a transição do projeto, se o código do software e o SDD estiverem em sincronia, alguém deverá ser capaz de facilmente integrar e iniciar o trabalho.


Na verdade, eu confundi ISO e IEEE, deveria ser IEEE de fato. Obrigado por citar alguns comentários dos próprios autores do IEEE Std. Esta "terceira" opção é realmente a melhor. Pena que nunca fomos ensinados dessa maneira.
Simon Baars

@SimonBaars Não estou surpreso. Se você é ensinado sobre padrões como o IEEE e ISO, é quase sempre em um contexto orientado a planos / cascatas. Quando você aprende sobre abordagens de desenvolvimento iterativo e incremental, tende a não aprender sobre esses padrões. No entanto, as versões mais recentes dos padrões IEEE tendem a considerar métodos iterativos e incrementais (ágeis) e geralmente podem ser aplicados mesmo nesses ambientes.
Thomas Owens

8

Se tudo o que você procura no SDD é comunicar o design com outras pessoas, sim, você pode criá-lo após o desenvolvimento. A única coisa é que é chamado de documentação.

No entanto, gostaria de salientar que um SDD também pode servir a outro propósito. Também pode ajudá-lo a raciocinar sobre o design e garantir que "falhe rapidamente". Isso é bom, especialmente se muitas coisas são incertas de antemão, porque você pode descartar abordagens que não funcionariam durante toda a implementação desde o início. Também pode impedir que você se concentre nos detalhes técnicos em breve, não codificando nada até descobrir o design.

Eu aconselho você a, pelo menos, fazer uma tentativa no SDD de antemão. Se você encontrar coisas nas quais não tem certeza de como as coisas funcionariam, poderá criar pequenos protótipos dos problemas que está tentando resolver. Isso lhe dará experiência na solução de problemas específicos do seu projeto que beneficiarão a qualidade da solução completa a longo prazo.


Como o SDD seria chamado se criado anteriormente e mantido durante o projeto?
Simon Baars

Apenas o SDD :)
Jonathan van de Veen

Você sugeriria renomeá-lo para evitar mal-entendidos pelos supervisores?
Simon Baars

Que tipo de mal-entendido você espera que aconteça?
Jonathan van de Veen

8
@SimonBaars: há realmente uma diferença tão grande entre o "Documento de Concepção de Software" ou "Software Documento de Concepção do ation "?
Doc Brown

2

O único documento de design detalhado e verdadeiro que você criará é o código. Ele diz precisamente ao compilador como criar seu aplicativo. Como tal, seu design não pode ser concluído até a construção final antes do envio.

Quaisquer outros documentos de design que você criar, como um SDD, precisarão ser atualizados após a conclusão do design (código). Portanto, há um motivo convincente para escrever o SDD posteriormente: você só precisa fazer isso uma vez.

O contrário óbvio disso é: "com que frequência você realmente escreve um SDD após o evento"? O aplicativo é enviado, portanto, é provável que você não queira gastar tempo documentando nessa fase. Mas isso se aplica igualmente à atualização de um existente. O que é pior: nenhum SDD ou SDD está errado e não pode ser confiável?

Existem duas razões para escrever com antecedência. Em primeiro lugar, pode ser um requisito obrigatório para você fazer isso (não é legal; mas acontece). Em segundo lugar, a criação desse documento pode ajudá-lo a formular uma estratégia geral para o design. Mas isso pode ser feito igualmente bem desenhando, anotando notas, etc., de maneira informal. E como ele precisará ser reescrito posteriormente, há muitos benefícios na abordagem "rápida e suja" desse processo inicial de design de macro.


The app is shipped, so you aren't likely to want to spend time documenting at that stage. Nesse caso, o aplicativo não será finalizado dentro do meu período de graduação, portanto, precisamos de documentação para que outros desenvolvedores possam continuar o desenvolvimento do produto.
Simon Baars

0

Para mim, não seria uma boa argumentação.

Se realmente necessário, eu argumentaria com um forte foco no desenvolvimento de protótipos para uma melhor compreensão de um domínio de problema desconhecido. No entanto, mesmo nesses casos, algumas peças de design seriam úteis antes.


0

Há um argumento a ser feito para fazê-lo de qualquer maneira . Porque você está fazendo isso para aprender a escrever documentos como este. Ignorar este trabalho porque talvez não seja 100% necessário aqui significa que você ignora seu aprendizado.

Um compromisso pode ser escrevê-lo durante a implementação. Antes de cada componente / módulo / tela ou outra subdivisão do seu programa, você precisa pensar sobre como fazê-lo. Em seguida, você adiciona suas decisões ao documento de design e as implementa.

Se algo mudar mais tarde, você atualiza o documento.

Isso tem várias vantagens em comparação com a escrita após o fato:

  • Você aprenderá a manter os documentos de design atualizados quando os requisitos mudarem, um hábito útil

  • Você aprenderá a pensar em design antes da implementação

  • Não é tão entediante como escrever documentos de design depois que o fato é

  • Se o tempo acabar, você terá um documento de design descrevendo o que você tem até agora para que outras pessoas possam continuar seu trabalho

  • Não é muito trabalho extra dessa maneira

  • À medida que o projeto avança, você pode não ter certeza do motivo pelo qual fez algo assim há dois meses e terá suas anotações para lhe contar.


-2

System Design Document, um registro de requisitos básicos mais (novos recursos) é atualizado à medida que o projeto avança com novos atributos de design e solução. Mantido até que o projeto / solução seja entregue. Útil, ele se comunica com todos os envolvidos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.