Olha, se existe um modelo formal, eu nao conheço...
Geralmente eu uso um documento do Word, formatado como um relatorio com as especificações do software, partindo das mais genericas (nivel usuario) para as mais especificas (nivel programador)...
As primeiras paginas, com o nivel mais abstrato é o que o usuario le e ve se atende as necessidades dele.
A parte mais especifica eu deixo para ele ter noçao do que exatamente o software vai fazer, qual tecnologia vai usar, quais restrições vai ter, etc... para ele assinar e depois nao poder alegar que nao conhecia algum detalhe...
Anexo esse relatorio à um contrato de desenvolvimento de software e assistencia posterior (prestação de serviço) e anexo tambem uma tabela com o cronograma para desenvolvimento e os prazos e custos de cada parte do projeto.
O usuario estando de acordo, assina. Senao, vamos sentar e ver o que ele quer que mude de acordo com aquele relatorio descritivo e o cronograma.
Nunca usei um modelo muito rigido. Cada caso é um caso, inclusive para o contrato tambem cada caso exige um contrado diferente.