domingo, 13 de setembro de 2009

A Importância dos Requisitos de Software: Uma Abordagem Prática

Em postagens anteriores, foram apresentados conceitos sobre requisitos de software, os diferentes tipos de requisitos, bem como o gerenciamento dos requisitos.


Nesta oportunidade, gostaria de discutir um pouco da aplicação prática dos requisitos, sobre quais os benefícios de ter um bom processo de levantamento de requisitos e também como proceder com os requisitos para que sua elaboração seja útil ao projeto que está sendo desenvolvido.


Aproximadamente, 60% das falhas de software e defeitos são resultantes de má gestão do software e de seus requisitos. Este percentual eu mesmo determinei através de um trabalho de pesquisa que realizei numa empresa de desenvolvimento de produtos de software.


Metade destas falhas poderiam ter sido evitadas se tivesse sido clara desde o início, qual era realmente a expectativa do usuário/cliente. Logo, chegamos ao consenso de que o trabalho de desenvolvimento foi bem feito, mas foi desenvolvido de maneira diferente do que era esperado. Novamente fizemos um link com a tradicional imagem abaixo que visa elicitar de maneira descontraída como é um processo de desenvolvimento de um requisito de software.


FIGURA 1 – Processo de Desenvolvimento do Requisito de Software (DAGNONE, 2009)


Vimos também que Requisitos de Software podem ser compreendidos como a capacidade do software que deve ser atendida pelo sistema para satisfazer o problema do usuário (DORFMANN; THAYER, 1990). Na prática, o que ocorre é que nem sempre o levantamento dos requisitos é claro, sendo até mesmo mal interpretado, dificultando ainda mais o trabalho de manutenção quando se descobre esta divergência num momento tardio.


Em razão disso, o ideal seria fazer um bom trabalho prévio de levantamento das necessidades, o que já minimizaria pela metade os problemas com requisitos entendidos de maneira inadequada. Porém, este trabalho precisa ser desenvolvido e ter a colaboração de todos os envolvidos na sua concepção: gerentes de projeto, analistas de negócio, analistas de sistemas, clientes e usuários finais.


Sabemos que escrever requisitos da maneira plenamente satisfatória leva tempo e exige prática, mesmo tendo atualmente uma série de ferramentas que auxiliam, não será da noite para o dia que se conseguirá atingir bons resultados. Para isto, a pessoa precisa ter clareza para descrever as necessidades, ser organizada e principalmente ter bons conhecimentos de programação, pois é preciso saber exatamente o que sua equipe de desenvolvedores podem fazer, além disso, é preciso ter certeza de que você fala a mesma linguagem deles. Além disso, é muito importante que a pessoa também tenha capacidade de lidar com outras pessoas, pois é preciso entrar em contato com clientes para descobrir o que querem, como querem, e conseguir traduzir isto para compreensão dos desenvolvedores.


Um problema bastante típico é que nem sempre os clientes sabem o que eles precisam, outros não tem capacidade de ter uma visão de um todo para formular sua necessidade, outros pensam que sabem demais, guardando o conhecimento para si e lhe passando as idéias erradas e outros não estão preocupados necessariamente com o atendimento de sua necessidade e sim se os seus encargos são devidamente depositados no final do mês.


Assim, há um grande desafio de conseguir convencer pessoas com diferentes perfis a cooperar, repassando-lhes a importância desta etapa de levantamento de requisitos. Contudo, se mesmo assim houver dificuldades para elicitar os requisitos, uma segunda alternativa seria usar sua empatia, ou seja, posicionar-se no lugar do cliente e tentar entender a sua necessidade por conta própria. De qualquer forma, este tipo de posicionamento também exige um bom conhecimento e prática.


Se houver um bom contato com o cliente para elicitação dos requisitos, procure manter este contato durante toda a duração do processo, inclusive, posicionando o cliente. Esta ação é importante porque necessidades podem mudar, o cliente pode se dar conta de algo que havia esquecido de mencionar ou que talvez não tenha explicado de maneira mais adequada para ser entendido. Em contrapartida, o responsável pelo levantamento de requisitos precisa estar ciente de que sempre deve estar à disposição para entender novamente as solicitações e repassar por todas novamente caso seja necessário, visando repassar o desenvolvimento de um requisito de maneira satisfatória.


Além do cliente, o setor de testes de software também precisa estar plenamente ciente e comunicado sobre os requisitos que estão sendo desenvolvidos, de preferência, desde o início dos trabalhos, pois eles é que vão desenvolver os trabalhos de testes de conformidade e anteceder alguns detalhes sobre o que poderia dar errado no requisito que foi desenvolvido.


Analisando atualmente, um dos maiores problemas da elicitação de requisitos é o tempo necessário para descrevê-los de maneira satisfatória, pois as vezes não se tem todo o tempo necessários disponível. Mas, é iminente que quando o desenvolvimento começa a ser trabalhado antes de completarmos os requisitos podemos causar uma série de problemas mais tarde, onde o custo para ajustá-los é o dobro do custo que seria se fosse verificado ainda na etapa de levantamento de requisitos.


Um processo de desenvolvimento termina somente quando o cliente recebe a versão final do produto de software e se declara satisfeito com o que fora implementado. Assim, quanto menos divergências houver com relação às expectativas do usuário, melhor para todos, pois menos desgaste será causado.


Outro problema que pode acontecer é o cliente sinalizar que necessita de mais um requisito, num momento já inadequado, quando o processo de desenvolvimento, por exemplo, já estiver sendo finalizado. Normalmente, quando isto ocorre, o trabalho e os custos para realizar mais este requisito são demasiadamente grandes para valer a pena desenvolvê-lo. Contudo, se você tiver um bom processo de levantamento de requisitos, conseguirá mensurar claramente ao cliente os custos da adição de mais este ajuste no produto de software, apresentando-lhe o efeito desta nova implementação, traduzindo para a linguagem do cliente. Por sua vez, o cliente pode acabar acatando sua decisão e optando por deixá-la para um próximo momento, mais adequado. Isto tudo faz parte da negociação do projeto com o cliente, mas um bom trabalho de levantamento de requisitos auxilia também nas negociações.


Existem inúmeras ferramentas, livros, conceitos e orientações que podem ser verificados e utilizados para conseguir realizar um bom trabalho/processo de levantamento de requisitos de software, dentre elas: IEEE software Enginering Collection, IEEE STD 830-1998, bibliografia citada neste artigo, CMMI, MPS.BR, dentre outras.


Espero que este artigo os auxilie a vislumbrar a importância da realização de um bom processo de levantamento de requisitos de software. É um esforço, nem tão grande assim, que vale muito apena em projetos de software.


Cordialmente,


Marcelo Schumacher

http://isosoftware.blogspot.com


Bibliografia:


DAGNONE, Donaldo M. How Projects Really Work (Version 1.5).Disponível em: <http://www.projectcartoon.com/cartoon/611>. Acesso em: 5 mar. 2009.


DORFMANN, Merlin; THAYER, Richard H. Standards, Guidelines, and Examples of System and Software Requirements Engineering. Los Alamitos, CA: IEEE Computer Society Press, 1990.


5 comentários:

  1. Prezado Marcelo,

    Li seu artigo e digo que fiquei atraído por este tópico, não simplesmente da necessidade de levantar os requisitos de software na qual já comentei em outra oportunidade que você tratava do assunto, mas sim no lado humano que vem antes do lado técnico como : entrevistas com clientes usando recursos da comunicação para extrair o máximo de informações necessárias.

    Como enfatizou em um trecho muitas vezes o cliente não é claro e objetivo, assim tornando o entendimento confuso.

    Penso mais, é preciso ser muito técnico mas desenvolver capacidades humanas é o grande desafio em área de atuação. Fica evidente no texto :
    "... escrever requisitos ...Para isto, a pessoa precisa ter clareza para descrever as necessidades,
    ser organizada e principalmente ter bons conhecimentos de programação, pois é preciso saber exatamente
    o que sua equipe de desenvolvedores podem fazer ..."

    "...importante que a pessoa também tenha capacidade de lidar com outras pessoas, pois é preciso entrar em contato
    com clientes para descobrir o que querem,como querem, e conseguir traduzir isto para compreensão dos desenvolvedores. ..."

    Sua matéria justifica da valia que tem nossas capacidades humanas.

    Thiago Corrêa

    ResponderExcluir
  2. Olá, Thiago.

    Muito importante esta ênfase que deste ao conteúdo.

    Realmente é um desafio para profissionais da nossa área desenvolver a capacidade humana.

    Na Universidade vemos pessoas questionando disciplinas humanas, chamando-as de "caça-níquel", mas eu particularmente as defendo e adorei cursá-las.

    Na prática, um profissional que é um desenvolver e consegue desenvolver suas características pessoais humanas tem plenas condições de atuar como um grande Analista de Negócio ou Analista de Sistemas. Para mim, profissionais destas entitulações que um dia foram desenvolvedores são os melehores que existem.

    Obrigado pela participação.

    Abraço,

    Marcelo Schumacher
    http://isosoftware.blogspot.com

    ResponderExcluir
  3. Muito boa sua matéria, parabéns!!

    ResponderExcluir
  4. Muito boa sua matéria, parabéns!!

    ResponderExcluir