Capítulo 2 – Gerência de Projetos: Métricas de Software
É de fundamental importância considerar um software como produto, que necessita de um projeto muito bem estruturado e administrado. Não é raro, mesmo nas boas empresas, que os projetos de software enfrentem diversos contratempos, resultantes de problemas técnicos e administrativos.
Uma gerência de projetos capaz de estabelecer um cronograma e avaliar custos, riscos, limitações e impactos eficazmente minimiza problemas e melhora a produtividade, conseqüentemente aumentando a qualidade do resultado final (o software pronto e implementado).
Para que tais objetivos sejam alcançados faz-se necessário entender os elementos envolvidos no processo de gerência de projetos e conhecer as métricas e medidas utilizadas.
2.1 – O processo de Gerência de Projetos
A gerência de projetos é a base fundamental da engenharia de software. Não é uma etapa ou atividade executada em determinado momento do desenvolvimento - trata-se duma "camada" que abrange todo o processo, desde o esboço ou conceito inicial até a "aposentadoria" do software (quando ele se torna obsoleto e é descartado).
Como acompanha todo o ciclo do produto deve-se compreender o objetivo do projeto, os possíveis riscos, as tarefas a desenvolver, as referências de acompanhamento, o custo envolvido e a programação a ser seguida.
Deduz-se que o gerente do projeto saiba como executar as tarefas acima e os profissionais envolvidos entendam como trabalhar dentro dos limites estabelecidos.
2.1.1 – Iniciando um projeto de software: Antes do planejamento do projeto em si deve-se estabelecer seus objetivos, considerar soluções alternativas e avaliar as restrições técnicas e administrativas. Sem isso não é possível estimar custos, estabelecer cronogramas e nem mesmo definir e dividir as tarefas envolvidas. Considera-se também restrições de prazo, orçamento, pessoal, estrutura técnica, etc. - afinal o projeto será executado dentro de todos estes limites.
2.1.2 – Medidas e métricas: Todo processo técnico de um produto necessita de medições para se compreender cada aspecto relacionado. Mede-se tanto o produto como o processo, na tentativa de melhorar cada um. Não é diferente na engenharia de software. Todavia medições são práticas somente se os dados coletados forem relevantes, faz-se necessário utilizar métricas apropriadas. Há diversas métricas de software desenvolvidas para analisar cada aspecto de um programa, assim como do processo de engenharia por trás do mesmo.
2.1.3 – Estimativa: Antes de cada processo de desenvolvimento é preciso um planejamento detalhado. Neste são definidas as principais características do software e da execução das atividades. As técnicas de estimativa são úteis para aprimorar o planejamento.
2.1.4 – Análise dos riscos: Sempre haverá áreas de incerteza em programas de computador. A estrutura montada para a execução de um programa será adequada? O cronograma sofrerá atrasos em virtude de dificuldades técnicas? As mudanças que surgirem ao longo do processo impactarão a programação em curso? O software apresentará vulnerabilidades que comprometam sua estabilidade? Por se identificar, classificar e avaliar os riscos e montar umas estrutura para monitorá-los esboça-se uma estratégia para administrar os possíveis impactos.
2.1.5 – Determinação de prazos: Todo projeto tem um cronograma de atividades. Os programas são criados de forma diferente, mesmo que se assemelhem a outros já desenvolvidos. Há a necessidade de dividir corretamente as tarefas e executar os passos acima para se programar, com a maior exatidão possível, o tempo necessário de execução para cada tarefa envolvida no projeto. Cria-se uma "rede de tarefas", no intuito de relacioná-las e formar o planejamento do projeto (afinal devem ser definidos custos, pessoas, estrutura, etc).
2.1.6 – Monitoração e controle: Quando os trabalhos saem do planejamento e são executados inicia-se a monitoração do processo. É a ferramenta para o gerente do projeto "rastrear" a execução de cada tarefa, possibilitando o controle dos impactos se algo sair do planejado. São com esses dados que as decisões são tomadas ao longo do desenvolvimento - remanejamento de pessoal, redirecionamento de recursos, negociação de novos prazos, etc.
2.2 – Métricas de Produtividade e Qualidade de Software
Assim como qualquer produto resultado de um processo de engenharia é medido (tamanho, peso, qualidade de fabricação, custo, funcionalidade, etc) os softwares não são exceções. Deve-se medir suas características, para calcular o esforço necessário, o preço final e até mesmo parametrizar projetos futuros. Para tanto são necessárias métricas adequadas a cada tipo de medição requisitada.
2.3 – Medidas do Software
O software pode ser medido por diversos fatores: qualidade, benefícios gerados, produtividade (das pessoas envolvidas em seu desenvolvimento), facilidade/complexidade de uso (para avaliar a necessidade de treinamentos para uso), etc. Ele também pode se tornar referência para a avaliação futura de novos programas.
Para tanto cada fator deve ser corretamente quantificado, por meio de parâmetros adequados – as chamadas métricas. As métricas são alinhadas com o objetivo das medições: métricas técnicas, que avaliam as características do software; métricas de produtividade, para analisar o processo de engenharia de software; métricas de qualidade, que relaciona o produto final com as exigências e expectativas do cliente; e assim por diante.
Medições mais específicas (“diretas”) podem ser efetuadas utilizando métricas orientadas a determinadas grandezas:
2.3.1 – Métricas orientadas ao tamanho: Medida direta do tamanho do software, verificando fatores relacionados, como a quantidade de linhas de código. Serve, por exemplo, para o gerente de projeto calcular quando custa e quanto tempo demora para desenvolver uma linha de código e até prever uma média de erros que aparecerão ao longo do processo. OBS: Os críticos das métricas orientadas ao tamanho argumentam que programas “enxutos”, bem planejados e executados econseqüentemente menores são penalizados pelas medições desta grandeza, pois a mesma pressupõe que um programa é maior que o outro por ser mais complexo, o que nem sempre é verdade.
2.3.2 – Métricas orientadas à função: Ao invés de se concentrar no tamanho, as métricas de função calculam a quantidade de operações que o software é capaz de executar, medindo-se a utilidade ou funcionalidade do programa. São coletados dados, tais como: (números de) entradas de usuário, saídas para usuário, consultas, arquivos, interfaces, etc. Cada parâmetro, após quantificado, é classificado pela importância, gerando-se um “valor ponderado”. Todos são somados e o resultado é um “fator de funcionalidade” chamado de function point ou feature point, dependendo do método utilizado. Este fator mede a complexidade de um programa (ao invés de simplesmente medir o tamanho do mesmo). Há quem argumente que esta forma de medição não é precisa por ser excessivamente subjetiva (o fator de ponderação dos parâmetros é “decidido” por alguém).
2.4 – Métricas de Qualidade do Software
A qualidade pode ser medida no processo de engenharia do produto e também depois que o software for entregue aos usuários e avaliados pelos mesmos. O primeiro caso é apropriado para testes, que prevêem possíveis complicações técnicas ao longo do processo, permitindo decisões administrativas no curso do planejamento ou do desenvolvimento. O segundo caso (medição de qualidade após a entrega) revela o grau de satisfação do cliente, que também mede a efetividade do processso de engenharia de software.
2.4.1 – Fatores que afetam a qualidade: A partir de três pontos de vista – operação, revisão e transição do produto – avalia-se a qualidade do software. Introduz-se o conceito de framework, que seria o relacionamento entre os diversos fatores de qualidade, do qual é criado um conjunto de qualidades essenciais para determinado software. Com o framework definido a gerência do projeto tem um melhor diagnóstico do processo de engenharia, facilitando a tomada de decisões e o desenvolvimento de projetos futuros.
2.4.2 – Medida da qualidade: Há alguns parâmetros que permitem medir a qualidade de um software: Corretitude – Identifica se um programa funciona corretamente; Manutenibilidade – A facilidade de corrigir, adaptar ou ampliar um programa; Integridade – Capacidade que um sistema tem de suportar ataques e códigos maliciosos; Usabilidade – Grau de “amigabilidade” (facilidade de uso) e funcionalidade.
É de fundamental importância considerar um software como produto, que necessita de um projeto muito bem estruturado e administrado. Não é raro, mesmo nas boas empresas, que os projetos de software enfrentem diversos contratempos, resultantes de problemas técnicos e administrativos.
Uma gerência de projetos capaz de estabelecer um cronograma e avaliar custos, riscos, limitações e impactos eficazmente minimiza problemas e melhora a produtividade, conseqüentemente aumentando a qualidade do resultado final (o software pronto e implementado).
Para que tais objetivos sejam alcançados faz-se necessário entender os elementos envolvidos no processo de gerência de projetos e conhecer as métricas e medidas utilizadas.
2.1 – O processo de Gerência de Projetos
A gerência de projetos é a base fundamental da engenharia de software. Não é uma etapa ou atividade executada em determinado momento do desenvolvimento - trata-se duma "camada" que abrange todo o processo, desde o esboço ou conceito inicial até a "aposentadoria" do software (quando ele se torna obsoleto e é descartado).
Como acompanha todo o ciclo do produto deve-se compreender o objetivo do projeto, os possíveis riscos, as tarefas a desenvolver, as referências de acompanhamento, o custo envolvido e a programação a ser seguida.
Deduz-se que o gerente do projeto saiba como executar as tarefas acima e os profissionais envolvidos entendam como trabalhar dentro dos limites estabelecidos.
2.1.1 – Iniciando um projeto de software: Antes do planejamento do projeto em si deve-se estabelecer seus objetivos, considerar soluções alternativas e avaliar as restrições técnicas e administrativas. Sem isso não é possível estimar custos, estabelecer cronogramas e nem mesmo definir e dividir as tarefas envolvidas. Considera-se também restrições de prazo, orçamento, pessoal, estrutura técnica, etc. - afinal o projeto será executado dentro de todos estes limites.
2.1.2 – Medidas e métricas: Todo processo técnico de um produto necessita de medições para se compreender cada aspecto relacionado. Mede-se tanto o produto como o processo, na tentativa de melhorar cada um. Não é diferente na engenharia de software. Todavia medições são práticas somente se os dados coletados forem relevantes, faz-se necessário utilizar métricas apropriadas. Há diversas métricas de software desenvolvidas para analisar cada aspecto de um programa, assim como do processo de engenharia por trás do mesmo.
2.1.3 – Estimativa: Antes de cada processo de desenvolvimento é preciso um planejamento detalhado. Neste são definidas as principais características do software e da execução das atividades. As técnicas de estimativa são úteis para aprimorar o planejamento.
2.1.4 – Análise dos riscos: Sempre haverá áreas de incerteza em programas de computador. A estrutura montada para a execução de um programa será adequada? O cronograma sofrerá atrasos em virtude de dificuldades técnicas? As mudanças que surgirem ao longo do processo impactarão a programação em curso? O software apresentará vulnerabilidades que comprometam sua estabilidade? Por se identificar, classificar e avaliar os riscos e montar umas estrutura para monitorá-los esboça-se uma estratégia para administrar os possíveis impactos.
2.1.5 – Determinação de prazos: Todo projeto tem um cronograma de atividades. Os programas são criados de forma diferente, mesmo que se assemelhem a outros já desenvolvidos. Há a necessidade de dividir corretamente as tarefas e executar os passos acima para se programar, com a maior exatidão possível, o tempo necessário de execução para cada tarefa envolvida no projeto. Cria-se uma "rede de tarefas", no intuito de relacioná-las e formar o planejamento do projeto (afinal devem ser definidos custos, pessoas, estrutura, etc).
2.1.6 – Monitoração e controle: Quando os trabalhos saem do planejamento e são executados inicia-se a monitoração do processo. É a ferramenta para o gerente do projeto "rastrear" a execução de cada tarefa, possibilitando o controle dos impactos se algo sair do planejado. São com esses dados que as decisões são tomadas ao longo do desenvolvimento - remanejamento de pessoal, redirecionamento de recursos, negociação de novos prazos, etc.
2.2 – Métricas de Produtividade e Qualidade de Software
Assim como qualquer produto resultado de um processo de engenharia é medido (tamanho, peso, qualidade de fabricação, custo, funcionalidade, etc) os softwares não são exceções. Deve-se medir suas características, para calcular o esforço necessário, o preço final e até mesmo parametrizar projetos futuros. Para tanto são necessárias métricas adequadas a cada tipo de medição requisitada.
2.3 – Medidas do Software
O software pode ser medido por diversos fatores: qualidade, benefícios gerados, produtividade (das pessoas envolvidas em seu desenvolvimento), facilidade/complexidade de uso (para avaliar a necessidade de treinamentos para uso), etc. Ele também pode se tornar referência para a avaliação futura de novos programas.
Para tanto cada fator deve ser corretamente quantificado, por meio de parâmetros adequados – as chamadas métricas. As métricas são alinhadas com o objetivo das medições: métricas técnicas, que avaliam as características do software; métricas de produtividade, para analisar o processo de engenharia de software; métricas de qualidade, que relaciona o produto final com as exigências e expectativas do cliente; e assim por diante.
Medições mais específicas (“diretas”) podem ser efetuadas utilizando métricas orientadas a determinadas grandezas:
2.3.1 – Métricas orientadas ao tamanho: Medida direta do tamanho do software, verificando fatores relacionados, como a quantidade de linhas de código. Serve, por exemplo, para o gerente de projeto calcular quando custa e quanto tempo demora para desenvolver uma linha de código e até prever uma média de erros que aparecerão ao longo do processo. OBS: Os críticos das métricas orientadas ao tamanho argumentam que programas “enxutos”, bem planejados e executados econseqüentemente menores são penalizados pelas medições desta grandeza, pois a mesma pressupõe que um programa é maior que o outro por ser mais complexo, o que nem sempre é verdade.
2.3.2 – Métricas orientadas à função: Ao invés de se concentrar no tamanho, as métricas de função calculam a quantidade de operações que o software é capaz de executar, medindo-se a utilidade ou funcionalidade do programa. São coletados dados, tais como: (números de) entradas de usuário, saídas para usuário, consultas, arquivos, interfaces, etc. Cada parâmetro, após quantificado, é classificado pela importância, gerando-se um “valor ponderado”. Todos são somados e o resultado é um “fator de funcionalidade” chamado de function point ou feature point, dependendo do método utilizado. Este fator mede a complexidade de um programa (ao invés de simplesmente medir o tamanho do mesmo). Há quem argumente que esta forma de medição não é precisa por ser excessivamente subjetiva (o fator de ponderação dos parâmetros é “decidido” por alguém).
2.4 – Métricas de Qualidade do Software
A qualidade pode ser medida no processo de engenharia do produto e também depois que o software for entregue aos usuários e avaliados pelos mesmos. O primeiro caso é apropriado para testes, que prevêem possíveis complicações técnicas ao longo do processo, permitindo decisões administrativas no curso do planejamento ou do desenvolvimento. O segundo caso (medição de qualidade após a entrega) revela o grau de satisfação do cliente, que também mede a efetividade do processso de engenharia de software.
2.4.1 – Fatores que afetam a qualidade: A partir de três pontos de vista – operação, revisão e transição do produto – avalia-se a qualidade do software. Introduz-se o conceito de framework, que seria o relacionamento entre os diversos fatores de qualidade, do qual é criado um conjunto de qualidades essenciais para determinado software. Com o framework definido a gerência do projeto tem um melhor diagnóstico do processo de engenharia, facilitando a tomada de decisões e o desenvolvimento de projetos futuros.
2.4.2 – Medida da qualidade: Há alguns parâmetros que permitem medir a qualidade de um software: Corretitude – Identifica se um programa funciona corretamente; Manutenibilidade – A facilidade de corrigir, adaptar ou ampliar um programa; Integridade – Capacidade que um sistema tem de suportar ataques e códigos maliciosos; Usabilidade – Grau de “amigabilidade” (facilidade de uso) e funcionalidade.
Nenhum comentário:
Postar um comentário