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?
44
Respostas:
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.
fonte
Isso é muito ambíguo…
Duas coisas que posso dizer:
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.
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte