Escrever software na ausência de requisitos é uma habilidade a possuir ou uma situação que devo evitar?

44

Acho que alguns desenvolvedores de software são muito hábeis nisso e, muitas vezes, são elogiados por sua capacidade de oferecer um conceito funcional com requisitos abstratos. Francamente, isso me deixa louco, e eu não gosto de "inventar" enquanto vou. Eu achava que isso era problemático, mas comecei a sentir uma mudança, e me pergunto se preciso ajustar meu processo de pensamento (e programação) quando recebo muito pouca orientação. Devo começar a adquirir essa habilidade como uma habilidade ou seguir a ideia de que a coleta de requisitos e as regras de negócios são a primeira prioridade?


fonte
2
Uma situação a evitar. A única coisa é que você não pode. E eu falei sobre isso há algumas semanas ...
yannis 29/05
64
Os dois são como operar um extintor de incêndio.
Ben Brocka 29/05
3
Se você falha em planejar, você planeja falhar. Esses projetos criados sem requisitos podem ou não atender às expectativas do cliente quando eles saem da loja, mas quase certamente escondem uma infinidade de pecados, o que significa que, quando os requisitos mudam (e sempre mudam), um mundo de mágoa aguarda a pessoa que precisa faça as alterações necessárias. Os programadores que escrevem sem requisitos formais não deve ser elogiado, eles devem ser repreendidos por não estar preparado para a futura manutenção a longo prazo do projeto
GordonM
10
Dilbert obrigatório: dilbert.com/strips/comic/2006-01-29
Dan Neely
5
Às vezes, o cliente não sabe o que deseja. Eles querem que você faça "experimentos" para determinar o que eles querem. Certa vez, escrevi um sistema de comissões em que o único requisito era pagar comissões. A porcentagem e os itens a serem pagos pela comissão seriam determinados pela experiência com o sistema de comissão experimental.
Gilbert Le Blanc

Respostas:

80

A habilidade não é escrever software sem requisitos. Em vez disso, é para obter requisitos do proprietário do projeto, independentemente de haver ou não uma documentação formal de requisitos.

A coleta de requisitos é definitivamente sua primeira prioridade, mas você não precisa necessariamente anotar todas as necessidades do cliente com antecedência. O risco, é claro, é que você pode perder algumas informações vitais que tornam a arquitetura do sistema inútil se você não conseguiu ter o tipo certo de conversas com o cliente, no entanto, não é incomum definir um produto e até obter grande parte do desenvolvimento, enquanto adia as principais decisões da arquitetura do sistema até o último momento possível. Essa é uma abordagem de desenvolvimento enxuto, que visa garantir que você não se comprometa com uma arquitetura potencialmente incompatível muito cedo no desenvolvimento do seu produto, até ter informações mais sólidas. Nas situações que o OP descreveu em sua pergunta,

Sim, às vezes você precisa olhar um pouco para chegar ao coração daquilo que o cliente realmente está pedindo, e é aí que a prototipagem dispara e o lento - e às vezes doloroso - desenho incremental de requisitos requer que você realmente desenvolva boas habilidades de relacionamento com o cliente e também tenha paciência para perceber que, com qualquer ideia complexa de software, que no início o cliente nem sempre sabe muito mais do que você sobre o que o software realmente precisa fazer. Na maioria das vezes, o cliente liga para você desde o início, dependendo de sua experiência para definir seus requisitos, pois nem sempre possui a experiência ou o conhecimento necessário do processo de desenvolvimento de software.

S.Robins
fonte
22
"A habilidade não é escrever software sem requisitos. É obter requisitos do proprietário do projeto, independentemente de haver ou não uma documentação formal de requisitos". Isso também é algo em que tenho pensado muito. É quase como ser um bom detetive ou saber entrevistar alguém e fazer as perguntas certas. Nessa situação, encontro a pergunta: "Você pode me dizer o que deseja fazer?" funciona muito melhor do que "Você pode me dizer como deve funcionar?"
5
@BrianReindel Às vezes começo com uma combinação Mind-Map / Binary-Tree dos pensamentos do cliente. Eu pergunto "Qual é a ideia?" E depois uso a associação de palavras para ver o que cada ideia traz à mente do cliente. A partir daí, construo uma imagem do que o cliente está pensando e começo a definir os requisitos a partir daí. Cada requisito evoca perguntas que precisam ser feitas. Normalmente, as perguntas "Por que" me dão uma resposta melhor do que as perguntas "O que / Como", pois oferecem ao cliente a oportunidade de pensar além do básico. É basicamente uma arte em usar a psicologia para fazer com que o cliente revele necessidades.
S.Robins
3
Parte da habilidade é saber a ordem na qual fazer as coisas e evitar "aperfeiçoar" as coisas que serão rasgadas de qualquer maneira. Dessa forma, você pode se encontrar com o cliente / gerente / o que quer que seja, mostrar o que você tem até agora e ajustar à medida que avança. Você precisa saber como dar os grandes passos na direção geral certa primeiro.
David Schwartz
4
Uma maneira de obter requisitos é fornecer a eles algo básico e ver de que partes eles se queixam. Por exemplo, crie um protótipo de papel ( amazon.co.uk/… ) e execute as interações com eles.
Deworde 29/05
35

Isso é muito ambíguo…

Duas coisas que posso dizer:

  1. Existem muitas pessoas técnicas muito talentosas cujas carreiras são interrompidas porque aguardam requisitos perfeitos. Ou eles jogam o "Desculpe, não posso fazer isso, não estava nos requisitos". A realidade é que escrever requisitos é muito difícil. A precisão necessária para bons requisitos é diferente de tudo que a maioria das pessoas de negócios já criou. Há uma ponte entre a tecnologia e os negócios, e as pessoas que fazem os outros chegarem 100% do caminho para encontrá-los geralmente perdem.

  2. Existem pessoas de software que aprendem os domínios como bons ou melhores que seus clientes. Essas pessoas valem seu peso em ouro, mesmo que não sejam 100% dos melhores desenvolvedores. Vi pessoas de software anteciparem as necessidades quantitativas de marketing dos melhores gerentes de marca do país. Eles não eram os melhores em codificar todas as soluções, mas eram heróis porque podiam atravessar a ponte.

A vida não é sobre negros e brancos. Se você desenhar uma caixa estreita ao seu redor, você se limitará. Por outro lado, uma organização que dispensa o que é necessário para criar tecnologia também é limitada. Você terá que ver onde você prefere estar no cinza.

MathAttack
fonte
12

Requisitos são os passos da jornada, uma visão é a direção

Para muitas aplicações, uma especificação técnica altamente detalhada é antecipada, pois uma discussão rápida pode tornar inútil o documento cuidadosamente digitado. Em vez disso, comece com uma visão. Se todos entenderem o quadro geral, os requisitos poderão ser preenchidos ao longo das discussões.

Como desenvolvedor, você deve aprender a usar essas discussões para procurar requisitos . Isso significa fazer ao cliente as perguntas principais que os levam a pensar sobre como sua decisão hoje se encaixa na visão geral. Quanto mais cedo essas discussões mais detalhadas ocorrerem, mais rapidamente a visão geral se solidificará em um design coerente.

Você deve acompanhar o resultado dessas discussões em algum tipo de rastreador de problemas, para que outras pessoas possam comentá-las se perderem a discussão original. E para que você tenha um registro, você ou outros membros da sua equipe podem consultar se precisar de esclarecimentos.

Portanto, aprenda a codificar contra a visão, mas esteja pronto para seguir esses requisitos quando chegar a hora.

Gary Rowe
fonte
+1 para "Requisitos são as etapas da jornada, uma visão é a direção"
usuário
10

Steve Jobs acreditava que os clientes não podem descrever exatamente como eles querem que os futuros produtos sejam, portanto, é seu trabalho entregá-los. Portanto, a menos que você forneça software personalizado o tempo todo, esqueça as especificações formais e comece a criar protótipos, deixando os clientes brincar com eles e dizer o que pensam. Você precisa colocar a pessoa certa para fazer a prototipagem e ela precisa de ajuda. Digo isso por experiência própria - sou o macaco de prototipagem que adora criar interfaces intuitivas e me uni a alguém do produto que entende o que os clientes querem e pode explicar as coisas em papel ou usando o Excel.

Nenhum de nós é gênio, mas pensamos da mesma forma - você quase pode dizer que temos química e tivemos um enorme impacto sobre como as coisas estão sendo construídas e como. Agora, apenas uma equipe de médio a grande porte pode ter um protótipo e um não codificador que desenvolvem o produto exclusivamente, mas vale a pena. A prototipagem é o estágio mais barato no desenvolvimento de software; portanto, faz sentido obter a interface do usuário e o comportamento aparente corretamente. Eu não li o Código Completo, mas acho que há algo assim escrito nesse livro.

É bom ter especificações, mas nunca são perfeitas. Existe um teorema sobre isso. Você não pode provar que a especificação está completa e não pode provar que a ferramenta não possui bugs ou que irá parar :)

No entanto, as empresas de software fornecem software o tempo todo, apesar dessas imperfeições no processo. A especificação nunca será perfeita. A especificação também é NÃO NATURAL e desatualizada. Uma especificação para um protótipo é como a tabela de logaritmo é para um único gráfico - uma especificação é essencialmente uma brochura chata que deve ser impressa, enquanto você pode interagir com uma ferramenta / gráfico. Confira http://www.i-programmer.info/news/112-theory/3900-a-better-way-to-program.html para obter inspiração.

Agora, a especificação é boa se você precisar de um contrato para cobrir sua bunda. Mas uma especificação ainda deve vir após um protótipo, não antes. É seu trabalho descobrir como fazer protótipos baratos.

Trabalho
fonte
+1 para a especificação nunca sendo perfeita, mas -1 para a especificação não natural e desatualizada. Pense nos requisitos como uma lista de recursos que um cliente deseja e um Spec sendo a lista de comportamentos que definem o que o cliente precisa. Essencialmente, um tipo de contrato que define como o sistema funciona, em vez de qual é o sistema. O design e a especificação antecipados de grandes dimensões são problemáticos, mas, como todos os grandes problemas, é mais fácil de resolver quando discriminados, um pouco de cada vez. A prototipagem também raramente é rentável se você não tem idéia do QUE fazer protótipo. É aqui que as especificações oferecem um ponto de partida ...
S.Robins
... no entanto, as especificações não devem necessariamente ser escritas em pedra. A criação de protótipos (essencialmente provocando problemas) é mais valiosa quando eles alimentam novas informações de volta à especificação e onde a especificação pode mudar para acomodar as coisas que você aprendeu com o protótipo. Sem as especificações, você corre o risco de simplesmente inventar coisas, o que nem sempre é do melhor interesse do cliente. Os clientes esperam que você atenda às necessidades deles, e você corre o risco de sofrer menos atritos quando pode fornecer evidências de que concordou com alguma coisa, mesmo que apenas provisoriamente.
S.Robins
@S. Robins, um médico (cliente), pode dizer algo tão simples como "Quero ver uma árvore genealógica com o risco estimado de câncer correspondente para cada membro da família". Como existem muitas maneiras diferentes de apresentar essas informações e se preocupar com famílias numerosas que abrangem várias páginas, acho que seria absurdo começar a documentar isso como uma especificação imediatamente. Entendemos o que o médico disse, mas queremos ser mais precisos. Um protótipo interativo que exibe números e nomes aleatórios que um documento pode dizer sim ou não é mais natural do que uma especificação incompleta de 30 páginas que tenta descrever o mesmo.
1
Entendo de onde você é, mas o que você sugere é geralmente uma abordagem cara. Obviamente, não estou sugerindo que o protótipo seja um produto completo, mas qualquer coisa que você construa onde houver interatividade precisará de tempo para se desenvolver. Uma opção menos dispendiosa é ficar em um quadro branco, esboçar algumas idéias e fazer perguntas específicas para ajudá-lo a restringir seus critérios. Também não estou defendendo a criação de uma grande especificação. Documentos de estrutura de tópicos, ou mesmo modelos de código de teste, produzidos iterativamente e conforme necessário, geralmente são mais simples e baratos do que a criação de protótipos primeiro.
31712 S.Robins
3

Descobri muitas vezes que, em algumas situações, preciso atuar como analista de negócios, descobrindo exatamente como o negócio funciona atualmente, como as pessoas pensam que ele funciona (geralmente coisas muito diferentes) e como gostariam que ele funcionasse.

Eu obtive sucesso sempre sendo claro sobre as decisões que estou sendo forçado a tomar para criar o software. Eu explico meu raciocínio, escrevo documentação sobre o que descobri, faço gráficos e os distribuo para todos, etc.

Você provavelmente não causará uma boa impressão ao recusar qualquer trabalho até que os requisitos completos sejam entregues. Porém, reunindo requisitos de boa qualidade (sem necessariamente chamar a atenção para o fato), você alcançará o mesmo objetivo de software de qualidade.

E sim, como outros comentaristas disseram, sempre construa o software assumindo que ele mudará. Mudança é a única constante em que você pode confiar. Sempre construa seu software flexível e modular o suficiente para que não seja doloroso atualizá-lo quando alguns novos requisitos aparecerem repentinamente.

Will Sheppard
fonte
3

Se você deseja trabalhar como desenvolvedor de software em uma startup, é uma habilidade de possuir.

Se você deseja trabalhar em uma empresa de consultoria, é uma situação a evitar a todo custo. Isso ocorre porque sua empresa é paga de acordo com o quão bem você implementa as especificações / requisitos e não com o quão bem você resolveu o problema do cliente.

Se você está codificando para se divertir no seu tempo livre, a decisão é sua. Se você não se sentir qualificado para fazer a chamada para seus projetos de tempo livre, tente alguns em cada sentido e veja o que funciona. Também não é necessário uma coisa única, alguns projetos exigem um ou outro tipo de abordagem. Normalmente, se você escolher o errado em um desses projetos, descobrirá muito rapidamente.

John
fonte
2

Um pouco dos dois. Você precisa satisfazer seus clientes, o que significa que você precisa saber o que eles querem. Por outro lado, os clientes são notoriamente ruins em comunicar o que realmente querem.

Portanto, você deseja evitar cenários em que não sabe o que os clientes desejam, mas inevitavelmente se deparará com um cenário em que os requisitos são "mole" na melhor das hipóteses e enganosos na pior. Um bom programador do mundo real requer adaptabilidade.

Telastyn
fonte
2

Não é possível escrever um programa sem requisitos. Até o 'Hello World' tem o requisito: produzir saída. Então, acho que você está perguntando sobre requisitos formais, na forma de uma grande pilha de algo parecido com UML. E com relação a isso, eu conheci 2 tipos de pessoas:

1) Pessoas que precisam de requisitos formais. Eles precisam saber exatamente o que fazer e, na melhor das hipóteses, como fazê-lo. Eles amam frases como O procedimento A, ao usar o argumento B, produzirá C e odeiam: O programa deve tornar o trabalho de nosso departamento mais eficaz . Eles geralmente são animais corporativos.

2) Pessoas que são opostas a 1. Eles odeiam ser instruídos sobre o que fazer e como fazer, adoram saber o que deve ser alcançado. Eles gostam de conversar com o cliente, analisar o que dizem e depois desenvolver sua própria solução. Eles geralmente são freelancers e não se encaixam bem na corporação.

Não direi qual deles é melhor. Ambos têm seus prós e contras. São simples adequados para as outras condições.

Marinheiro Danubiano
fonte
0

Você NÃO pode desenvolver software operacional sem conhecer os Requisitos; mas você pode ter uma ótima facada no desenvolvimento do que sua experiência diz que os requisitos provavelmenteser estar. O desenvolvimento ágil usa uma combinação de técnicas "intuitivas", incluindo a regra 80:20 e a "descoberta" de requisitos por prototipagem. Em outras palavras, uma equipe de desenvolvimento experiente adivinha o que é necessário e produz um protótipo do software. A regra 80:20 diz que eles estarão 80% corretos. As partes interessadas no projeto revisam o protótipo tangível. O feedback deles começa a preencher a lacuna de 20% em nossa compreensão dos Requisitos. Portanto, com efeito, o Agile não se trata de escrever software sem nenhum requisito, mas usar sua experiência anterior para dizer: "você está querendo algo assim?" O que, em 80% dos casos, permitirá que você salte à frente e confirme o que é realmente necessário mais rapidamente do que percorrer os processos tradicionais de requisitos.

Richard Seddon
fonte
Agile não é sobre intuição, é sobre comunicação. A entrega de software em funcionamento com frequência para receber feedback geralmente incentiva a comunicação e valoriza a entrega das coisas que o cliente precisa. Sim, a experiência entra em jogo, mas é mais provável que você desenvolva o que o cliente precisa se perguntar primeiro o que o cliente exige. A chamada regra 80:20 não se aplica realmente, a menos que você esteja familiarizado com o domínio comercial do cliente, e mesmo assim eu pegaria essa 'estatística' com uma colher grande de sal.
S.Robins
-2

Quem disse que o Agile estava escrevendo código na ausência de requisitos? Eu sei que o Manifesto foi interpretado dessa maneira por alguns ... mas isso não faz as coisas direito.

Trent
fonte
1
Olá Trent, embora eu concorde com o seu comentário em princípio (e também estou cansado de ver como as pessoas usam o Agile como uma desculpa para estragar o processo de desenvolvimento e chamá-lo de "ser ágil"), essa resposta realmente não aborda os OPs pergunta, que não é sobre o Agile, mas sim perguntar se escrever um software sem requisitos é uma habilidade a ser desenvolvida. Talvez você pretenda adicionar isso como um comentário à resposta de outra pessoa?
7892 S.Robins