sexta-feira, 27 de junho de 2008

Engenharia de Software - Resumo do Capítulo 2 Parte 1

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.

Nenhum comentário: