Estou no processo de escrever uma especificação de requisitos e tenho um dilema em formular uma parte dos requisitos.
Cenário: baixamos arquivos de um site e os arquivos baixados precisam ser anexados a um item na ferramenta CM que temos. Os arquivos baixados contêm nomes que podem ser ASCII, ISO-8859-1, japonês, etc.
No fraseado abaixo, "non-ASCII" abrange todas as situações?
O nome do arquivo baixado pode conter caracteres não ASCII e o processamento disso não deve travar o aplicativo
Respostas:
O requisito, como afirmado, é confuso para mim.
A primeira pergunta que eu teria é: quantas codificações de caracteres precisam ser suportadas? As possíveis interpretações incluem:
Se você não especificar quais codificações você quer dizer, quando ocorrer um erro específico da codificação, você e o implementador poderão brigar e os dois estarão certos. Essa é, por definição, a consequência de uma especificação nebulosa.
Indo além, o que o software precisa fazer com o nome do arquivo, além de não travar? Deveria…
Uma versão melhor de sua exigência seria
Os exemplos específicos de codificações necessárias são essenciais para a elaboração de critérios de aceitação. As frases adicionadas indicam o que o software precisa fazer, além de não travar.
fonte
O requisito que você escreveu não possui as características de um bom requisito . Especificamente, não é coeso, não é atômico e não é ambíguo. Devido à falta dessas características, também não é facilmente verificável.
Seu requisito inicial de estado é:
Eu recomendaria remover o "... e o processamento disso não deve travar o aplicativo". Se você tem a exigência de que um software precise fazer alguma coisa, acho que não há problema em assumir que ele deve ser feito sem travar o software.
Isso transforma o requisito em:
Agora, você tem um requisito coeso e atômico. No entanto, não tenho certeza de que seja inequívoco. Na sua pergunta, você menciona vários formatos diferentes. Existem algumas opções.
Alguns recomendariam um requisito separado e exclusivo para cada codificação de nome de arquivo que deve ser suportada. Isso melhor suportaria requisitos coesos, atômicos, rastreáveis, inequívocos e verificáveis. Também facilitaria a especificação da importância de cada requisito - talvez o suporte para algumas codificações seja mais importante ou necessário mais cedo.
Outros podem recomendar uma tabela de formatos suportados e esse requisito vincularia a uma tabela. Seria menos completo (você tem uma sentença textual e uma tabela a ser mantida), mas elas estariam no mesmo documento ou banco de dados. No entanto, se você executasse o vínculo em uma ferramenta de gerenciamento de requisitos, eles poderiam ser vinculados para que as alterações em um destacassem o requisito vinculado. Também permitiria que o texto fluísse para outros pacotes de software como está, mas com uma tabela diferente para codificações diferentes.
Porém, como você documenta os requisitos depende de suas necessidades específicas.
fonte
Existem alguns problemas com sua redação que enfraquecem o requisito:
1) Você deve expressar o requisito em termos positivos , e não em termos do que ele não deve fazer . Como se faz um teste para "não travar".
2) A frase "O nome do arquivo baixado pode conter ..." é vaga.
Uma redação alternativa sugerida (puramente subjetiva, é claro) pode ser:
O aplicativo deve suportar nomes de arquivos baixados contendo caracteres não ASCII.
(A palavra "suporte" ainda é um pouco vaga e pode ser alterada para ser mais concreta quando combinada com outros requisitos para sua aplicação.)
fonte
O problema com a especificação escrita é que ela não diz o que o aplicativo deve fazer com os nomes de arquivos "interessantes". Encontrei um programa que substituía qualquer caractere de nome de arquivo que ele não entendesse
_
, com o efeito de que, quando solicitado a copiar um diretório que continha dois caracteres cujos nomes eram idênticos, exceto nos caracteres que o utilitário não entendia, o segundo arquivo gravado no diretório substituiria o primeiro. Esse comportamento seria qualificado como "não travar", mas isso não deve implicar que seja aceitável a ausência de uma especificação explícita dizendo isso.Eu sugiro que uma boa especificação especifique afirmativamente o que deve acontecer, ou observe quais cursos de ação são aceitáveis, por exemplo, "Se um nome de arquivo contiver caracteres não reconhecidos, o sistema deverá gerar um novo GUID para a operação geral e gerar um nome de arquivo. que combina esse GUID, um número de índice e qualquer parte do nome do arquivo original que possa ser facilmente acomodada; deve produzir uma tabela mapeando os nomes de arquivos novos e antigos "ou" Se um nome de arquivo contiver caracteres não reconhecidos, o sistema poderá formar um novo nome concatenando os caracteres que ele reconhece; se dois nomes de arquivos acabarem se tornando idênticos por meio dessa transformação, qualquer um deles poderá ser arbitrariamente declarado o 'vencedor' ".
fonte