Como já sabemos, desenvolver um software não é uma tarefa trivial, já que, além da habilidade em programação, também é necessário compreender a regra de negócio do cliente. Durante o desenvolvimento, o nosso maior objetivo obviamente é satisfazer as necessidades pelas quais o sistema foi concebido. Mas será que só isso é importante?
Antes de entrar no assunto, vale ressaltar o conceito de “requisitos funcionais” e a sua importância na qualidade do produto final.
Requisitos funcionais são as necessidades apontadas pelo cliente, ou seja, o que ele quer que o sistema faça. Gerenciar vendas, manter fornecedores e emitir relatórios mensais são exemplos de requisitos funcionais, que geralmente são obtidos durante a etapa de levantamento de requisitos junto ao cliente e demais usuários. Portanto, boa parte da qualidade do software está centrada em atender tais requisitos, uma vez que esse é o comportamento esperado pelo cliente. Imagine um sistema onde somente 8 das 10 funções solicitadas foram implementadas. Em uma analogia, é a mesma coisa que comprar um carro que não possui freios e faróis: ele anda, mas uma hora irá bater. É importante implementar cada requisito do cliente, e é justamente por isso que existem as fases de análise e modelagem em um projeto.
O problema é que, na preocupação de satisfazer as necessidades do cliente, os responsáveis pelo projeto esquecem que existem os requisitos não-funcionais, que também influenciam bastante na qualidade do software.
Requisitos não-funcionais são as características e aspectos internos do sistema, envolvendo especificamente a parte técnica. Ao contrário dos requisitos funcionais, estes requisitos não são explicitamente expostos pelo cliente, mas devem ser implicitamente compreendidos pelo desenvolvedor. Os requisitos não-funcionais basicamente se resumem em seis itens, descritos logo abaixo.
Segurança: o software deve garantir a segurança dos dados, bem como as permissões de acesso às suas funcionalidades, como por exemplo, usar criptografia em senhas e liberar acesso aos menus do sistema de acordo com a hierarquia do usuário. Quando se trata de um software com informações confidenciais (como dados de vendas, faturamentos ou citações de pessoas), este item se torna indispensável.
Usabilidade: procure desenvolver um sistema fácil de usar, que dispense muitos recursos gráficos. Se possível, adicione descrições das funções (hints) aos botões e configure teclas de atalho para as funções mais utilizadas. Quanto mais simples for a usabilidade, maior será a aceitação dos usuários.
Confiabilidade: determina a capacidade do sistema em lidar com eventos inesperados. Suponha que o usuário esteja cadastrando um novo registro, e após inserir todas as informações, ocorre um erro no sistema e o usuário acaba perdendo as informações digitadas. Revoltante, não? A confiabilidade significa que o sistema deve ser capaz de tratar exceções e se recuperar de falhas, sem que haja perda de dados. Backup e restauração do banco de dados também se encaixam neste item.
Padrão: define a padronização de interface e código utilizada no desenvolvimento do software. Embora seja mais voltado para a equipe de desenvolvimento, é essencial para facilitar a manutenção e atualização do sistema. Este item também envolve conceitos de arquitetura, como utilizar MVC, padrões de projeto ou frameworks.
Desempenho: de nada adianta ter um sistema seguro, interativo e confiável se ele consome muitos recursos do computador e demora pra executar os processamentos. Um sistema lento é alvo de crítica dos usuários, mesmo que seja funcional. A performance do software pode ser melhorada utilizando técnicas de programação orientada a objetos, threads e otimização de código. Outros fatores como consultas SQL aprimoradas no banco de dados e liberação de recursos da memória também devem ser estudados para aprimorar o desempenho.
Hardware e Software: define os requisitos mínimos para o funcionamento adequado do software. Por exemplo, se o sistema faz integração com o Microsoft Outlook, este deve estar instalado no computador como pré-requisito. Da mesma forma, se o sistema trabalha em rede, é necessário que o computador tenha uma interface física de rede instalada. Esse item também abrange a portabilidade do software para outros sistemas, tal como a sua facilidade de configuração.
Além dos itens acima, outras características também podem ser citadas, respeitando os fundamentos da Engenharia de Software. É por esse motivo que no enunciando do artigo mencionei sobre o domínio da regra de negócio e habilidade de programação. O primeiro se refere aos requisitos funcionais, enquanto o segundo trata de ambos.
Conclusão: ser programador realmente não é fácil… rs.
Abraço!
Publicado originalmente no blog SubRotina
O post A importância dos requisitos não-funcionais apareceu primeiro em Profissionais TI.