Semana passada, estive envolvido em um diagnóstico na função de desenvolvimento e manutenção de software enquanto estive em São Paulo. Um dos achados nesse trabalho é a visão que muitas pessoas ainda têm (sua cultura) de que as métricas de software em geral (e a Análise de Pontos de Função — APF — em particular) sejam métricas elásticas conforme a conveniência daquele responsável pelo desenvolvimento e manutenção de sistemas.
Esse pode ser o caso para aqueles que tenham um conhecimento superficial do método e cujo conhecimento foi aplicado quando o principal uso do método era estimar e não medir como é o caso em nossa atualidade.
O que é elástico são os requisitos do usuário! Neste texto vou explorar o assunto com um caso hipotético de um tipo de sistema que tem sido bastante utilizado — Calendário — por isso, requer menos exercício de abstração para depreender os requisitos do usuário. Aproveito também para abordar um dos pontos mais críticos na APF que é a determinação se um cenário constitui apenas uma função ou várias. Faço isso usando dois cenários diferentes que tem a mesma raiz no domínio do problema.
O domínio do problema
A demanda que provocou o trabalho de desenvolvimento do calendário estabelece que:
- O usuário atua em grupos de trabalho e algumas de suas agendas são compartilhadas com outras pessoas nesses grupos de forma que seus compromissos estejam disponíveis para consulta quando da programação de algumas dessas pessoas;
- O usuário tem subordinados que secretariam suas atividades e para os quais deseja delegar o poder de compartilhar algumas de suas agendas com outras partes. Contudo; nem todo subordinado tem essa função;
- Em determinados grupos de trabalho, o usuário é subordinado a uma autoridade com competência para (ela) criar compromissos em sua agenda; não em todas as suas agendas, mas apenas naquelas relativas aos grupos onde ela exerça essa autoridade.
Os requisitos funcionais e das partes interessadas
Partindo das necessidades de negócio estabelecidas no domínio do problema, o analista de requisitos realiza uma série de atividades de levantamento junto às partes interessadas e como resultado de sua análise identifica (dentre outros) três requisitos funcionais:
- Listar agendas do usuário;
- Listar agendas onde o usuário as possa compartilhar com outros usuários;
- Listar agendas onde o usuário possa criar compromissos.
A partir desse ponto vou apresentar dois cenários diferentes ainda no plano da engenharia de requisitos e que como consequência produzem contagem diferentes… não porque a métrica seja elástica mas porque o universo de soluções para um mesmo problema é.
Cenário 01:
Ao apresentar o resultado para as partes interessadas, o analista propõe a consolidação desses diferentes requisitos funcionais preliminares em um único requisito funcional no qual o usuário escolheria um critério de seleção e, a partir desse critério, seria apresentado uma saída única com as diferentes agendas. O esboço a seguir ilustra as necessidades de informação discutidas:

Critério de Seleção
A partir desse esboço se estabeleceu apenas um requisito funcional do usuário (RFU) e foi elaborada a seguinte especificação:
RFU01 Listar Agendas
Dicionário de Dados (D01)
| Descrição | Nome | Obrig. | Tipo | E/S |
| Nome do usuário | nm_usuário | S | Texto (30) | S |
| Indicador para excluir agendas onde usuário não possa criar eventos | In_criar | N | S/N | E/S |
| Indicador para excluir agendas onde o usuário não as possa compartilhar | In_compartilhar | N | S/N | E/S |
| Descrição da agenda | ds_agenda | N | Texto (20) | S |
Fluxo Principal
- O sistema apresenta o nome do usuário e apresenta as opções de consulta disponíveis para critérios de seleção na apresentação das agendas;
- O usuário informa os parâmetros para a seleção das agendas a serem apresentadas;
- O sistema obtém as suas agendas usando a RN01:
- Sistema apresenta a relação das agendas obtidas.
Regras de Negócio
RN01– Obter agendas do usuário
- Obter as agendas do usuário;
- Obter as agendas compartilhadas com o usuário e os respectivos direitos;
- Consolidar os dois conjuntos de agendas obtidas nos passos anteriores, considerando que em suas agendas o usuário tem plenos poderes; para cada agenda nesse novo conjunto realizar os passos a seguir:
- Avaliar se o usuário deseja apenas listar aquelas agendas em que possa criar eventos e se esse for o caso, incluir a agenda na lista a ser apresentada;
- Avaliar se o usuário deseja apenas listar aquelas agendas que possam ser compartilhadas e se esse for o caso, incluir a agenda na lista a ser apresentada quando a agenda ainda não estiver nela presente;
- Avaliar se o usuário deseja listar qualquer agenda e se esse for o caso, incluir a agenda na lista a ser apresentada quando a agenda ainda não estiver nela presente;
Quantas funções contar?
Observe que quem quer que use a consulta para listar apenas as agendas em que se pode criar eventos pode também usar a mesma consulta para listar apenas as agendas que pode compartilhar ou mesmo para listar todas as agendas. Isso independentemente da tarefa que esteja executando: seja na criação de um evento, seja em compartilhar uma agenda com outrem.
Apenas uma função será contabilizada onde, em diferentes casos de execução é possível haver pequenas diferenças em função de lógicas de processamento em que:
04. Dados são filtrados e selecionados utilizando determinados critérios para comparar múltiplos conjunto de dados; ou
05. Condições são analisadas para determinação de qual se aplica.
Cenário 02:
Ao apresentar o resultado para as partes interessadas, o analista de requisitos propõe a consolidação desses diferentes requisitos funcionais preliminares em um único requisito funcional como descrito no cenário anterior. Ao contrário daquele cenário, esse não é o interesse dos usuários. Seu interesse é que haja uma consulta conforme as diferentes tarefas que ele executa. Por exemplo, se ele está no âmbito da criação de um evento, deseja uma consulta alinhada a essa tarefa em particular; se ele está no âmbito do compartilhamento de uma agenda, deseja uma consulta nos mesmos moldes; e se está simplesmente selecionando quais agendas deseja visualizar no calendário, deseja ver todas as suas agendas independentemente de qualquer coisa.
Por quê? Porque é assim que ele trabalha, é assim que ele organiza as tarefas em diferentes funções. Ou seja, trata-se de uma consideração que está no plano das tarefas e serviços do usuário e não no plano de atributos na dimensão da facilidade de uso.
Como consequência daquela análise se produz três diferentes e independentes RFUs:
RFU02 Listar Agendas

Esboço RF02
Dicionário de Dados (D02)
| Descrição | Nome | Obrig. | Tipo | E/S |
| Nome do usuário | nm_usuário | S | Texto (30) | S |
| Descrição da agenda | ds_agenda | N | Texto (20) | S |
Fluxo Principal
- O sistema apresenta o nome do usuário atualmente usando o sistema; obtém as suas agendas usando a RN02: e apresenta a relação das agendas obtidas.
Regras de Negócio
RN02– Obter agendas do usuário
- Obter as agendas do usuário;
- Obter as agendas compartilhadas com o usuário;
- Consolidar os dois conjuntos de agendas obtidas nos passos anteriores;
- Para cada agenda nesse novo conjunto, incluir a agenda na lista a ser apresentada.;
RFU03 Listar Agendas para Criar Evento

Esboço RF03
Dicionário de Dados (D02)
| Descrição | Nome | Obrig. | Tipo | E/S |
| Nome do usuário | nm_usuário | S | Texto (30) | S |
| Descrição da agenda | ds_agenda | N | Texto (20) | S |
Fluxo Principal
- O sistema apresenta o nome do usuário atualmente usando o sistema; obtém as suas agendas usando a RN03: e apresenta a relação das agendas obtidas.
Regras de Negócio
RN03– Obter agendas do usuário para criar evento
- Obter as agendas do usuário;
- Obter as agendas compartilhadas com o usuário e os respectivos direito;
- Consolidar os dois conjuntos de agendas obtidas nos passos anteriores, considerando que em suas agendas o usuário tem plenos poderes; para cada agenda nesse novo conjunto realizar os passos a seguir:
- Avaliar se o usuário pode criar eventos e se esse for o caso, incluir a agenda na lista a ser apresentada;
RFU04 Listar Agendas para Compartilhar

Esboço RF04
Dicionário de Dados (D02)
| Descrição | Nome | Obrig. | Tipo | E/S |
| Nome do usuário | nm_usuário | S | Texto (30) | S |
| Descrição da agenda | ds_agenda | N | Texto (20) | S |
Fluxo Principal
- O sistema apresenta o nome do usuário atualmente usando o sistema; obtém as suas agendas usando a RN04: e apresenta a relação das agendas obtidas.
Regras de Negócio
RN04– Obter agendas do usuário para compartilhar evento
- Obter as agendas do usuário;
- Obter as agendas compartilhadas com o usuário e os respectivos direito;
- Consolidar os dois conjuntos de agendas obtidas nos passos anteriores, considerando que em suas agendas o usuário tem plenos poderes; para cada agenda nesse novo conjunto realizar os passos a seguir:
- Avaliar se o usuário pode compartilhar a agenda e se esse for o caso, incluir essa agenda na lista a ser apresentada;
Já parou para se perguntar porque Consulta “Externa”?
Se formos comparar graficamente esses dois cenários poderíamos ter a seguinte representação destacando que no primeiro cenário as decisões acontecem internamente à aplicação em analise; enquanto no segundo cenário há diferentes consultas externas, cada uma com uma particularidade em sua lógica de processamento conforme a tarefa em que se aplica em particular:

- Interno x Externo
CUIDADO!
Chamo a atenção que o fundamento para contar os três RFUs acima (RFU02, RFU03 e RFU04) é haver diferentes tarefas no plano da divisão do trabalho pelo usuário. Se em termos de requisitos confirmamos o cenário 01 (onde há apenas um RFU01) e em tempo de análise e projeto (outra disciplina da Engenharia de Software) se estabelecem três telas diferentes, ainda assim apenas uma função deve ser contabilizada!







agosto 15th, 2012 at %H:%M 11Wed, 15 Aug 2012 11:09:32 +000032.
Pergunta se um usuário solicita o agrupamento cenário 1 e os outros precisam das funcionalidades separadas cenário 2 . Na contagem do sistema todo eu teria 3 funcionalidades, independente da forma como estão sendo apresentadas. Questiono então se no cenário 1 nao temos 3 PE? Quebra por lógica
[Translate]
agosto 15th, 2012 at %H:%M 07Wed, 15 Aug 2012 19:20:40 +000040.
Fátima,
Eu vejo que o meu referencial ao realizar a Análise de Pontos de Função seja sempre as tarefas do usuário e não o projeto físico da solução.
Vejo que no Cenário 01 o analista de requisitos ao realizar a sua tarefa de organizar os requisitos e, em seguida, de especificar e modelar os requerimentos (tenho usado a palavra requerimento para diferenciar uma especificação de requisitos de um conjunto difuso de requisitos, coisa que tem me ajudado muito) conseguiu *conciliar os interesses* de diferentes usuários desempenhando diferentes funções no sentido de que todos eles tivessem um mesmo objetivo (do usuário).
Acho que é relevante citar neste contexto alguns trechos do CPM; Cito:
“Quando os dois processos elementares são comparados e se determina que eles contém diferentes DERs, RLRs ou Processamento Lógico, eles são identificados como processos elementares separados se forem especificados como requisitos functionais distintos pelo usuário.”
Não é o caso do cenário 01! Adicionalmente, cito:
“O teste de unicidade acima deve ser utilizado para comparar dois PEs que já tenham sido identificados e não como justificativa para dividir um único PE em dois PEs como resultado de variações. Dividir um único PE em dois PEs baseado nas variações pode indicar que as regras para identificar um PE não tenha sido satisfeitas.”
Eu não consigo imaginar o porquê o cenário que descreveu (chamemos de Cenário 03) que une os meus Cenários 01 e 02 de certa forma… Mas quem sou eu para julgar os procedimentos operacionais e os requisitos de meus usuário?
Se eu fosse um fiscal de contrato, um gerente de projetos, ou um analista de requisitos, enfim, alguém com competência e cuja função deve ser norteada pela busca da melhor relação custo benefício, provocaria os usuários desse Cenário 03 em termos de que benefícios eles obteriam com esse cenário em contrapartida ao Cenário 01 ou Cenário 02.
No que se refere ao Cenário 02, eu consigo imaginar contrapartidas em benefícios comparados ao Cenário 01.
Concorda?
[]s
Cadu.
[Translate]
agosto 20th, 2012 at %H:%M 02Mon, 20 Aug 2012 14:58:29 +000029.
APF
[Translate]