Baixe o app para aproveitar ainda mais
Prévia do material em texto
Gestão de Projetos de Tecnologia da Informação Métricas de Orientação a Objetos Material Teórico Responsável pelo Conteúdo: Prof. Ms. Fábio Peppe Beraldo Revisão Textual: Prof. Ms. Claudio Brites. 5 • Introdução • Métricas de Orientação a Objetos • Additional Measures (Medidas Adicionais) O objetivo do estudo da disciplina Gestão de Projetos da TI é habilitar a planejar, organizar e gerenciar pools de recursos e desenvolver estimativas de recursos. Dependendo da sofisticação do software, você poderá gerenciar a estimativa e o planejamento, a programação, o controle de custos e a gestão do orçamento, a alocação de recursos, o software de colaboração, a comunicação, a tomada de decisão, a gestão da qualidade e dos sistemas de documentação ou de administração. · Falaremos bastante sobre tecnologia, tecnologia da informação, os sistemas da informação, e a gestão de todos os elementos, chamada de Governança de TI. · Nesse contexto, esta unidade apresenta a definição das métricas do projeto de software, definindo os tipos e focando principalmente nas métricas de orientação a objetos ou métricas orientadas a objetos. Métricas de Orientação a Objetos 6 Unidade: Métricas de Orientação a Objetos Contextualização As métricas de orientação a objetos (ou orientadas a objeto) são cada vez mais utilizadas na avaliação e prevenção da qualidade de softwares. Um grande número de resultados valida a teoria dessas métricas, esses indicadores demonstram que as métricas externas são importantes elementos de avaliação de confiabilidade, facilidade de manutenção e propensão a falhas, pois os atributos internos não podem ser medidos até muito tarde no processo de desenvolvimento de software. 7 Introdução Programadores de software tem uma relação de amor e ódio com métricas. Por um lado desprezam e desconfiam de qualquer coisa que soe ou pareça uma medição, assim sendo são rápidos em apontar as “falhas” nos argumentos daqueles a favor da medição de produtos de software, processos de software, e (especialmente) as pessoas de software. Mas o que são as Métricas de Software? O termo “métricas” é frequentemente utilizado para designar um conjunto de medidas específicas tomadas em um item ou processo particular. As métricas de engenharia de software são unidades de medida que são usados para caracterizar: » produtos de engenharia de software, por exemplo, desenhos e código-fonte, » processos de engenharia de software, por exemplo, as atividades de análise, projeto e codificação, » profissionais em engenharia de software, por exemplo, a eficiência de um testador, ou a produtividade de um designer. » Se usado corretamente as métricas de engenharia de software permitem: » quantitativamente definir o sucesso e o fracasso, e/ou o grau de sucesso ou fracasso, para um produto, um processo, ou uma pessoa, » identificar e quantificar a melhoria, a falta de melhoria ou degradação em produtos, processos e pessoas, » tomar decisões gerenciais e técnicas significativas e úteis, » identificar tendências, » fazer estimativas quantificadas e significativas. As Métricas Orientadas a Objetos diferem das tradicionais devido a: » Localization: que é o processo de alocação de itens fisicamente próximos uns dos outros dentro da programação, » Encapsulation: que é a aglomeração (ou união) de um conjunto de itens, » Information hiding: que é a supressão de detalhes, » Inheritance: que é o mecanismo através do qual um objeto adquire as características de um, ou mais, outros objetos, » Abstraction: que é o mecanismo que foca nos detalhes importantes (ou essenciais) de um conceito ou item, ignorando os detalhes não essenciais, 8 Unidade: Métricas de Orientação a Objetos Métricas de Orientação a Objetos É cada vez mais abrangente o uso de métricas de orientação a objetos (ou orientadas a objeto) na avaliação e prevenção da qualidade de softwares. Um grande número de resultados valida a teoria dessas métricas, esses indicadores demonstram que as métricas externas são importantes elementos de avaliação de confiabilidade, facilidade de manutenção e propensão a falhas, pois os atributos internos não podem ser medidas até muito tarde no processo de desenvolvimento de software. As figuras a seguir demonstram, não só as áreas medidas, mas também os métodos de medição (note que alguns modelos não utilizam as métricas que serão estudadas); a segunda figura mostra, em profundidade, as técnicas de medições das métricas (tanto as tradicionais quanto as orientadas a objetos) Vide páginas 11 e 12. Limitações das Métricas de Orientação a Objetos O padrão internacional ISO/IEC, para qualidade de produtos de softwares, afirma que as métricas internas são de pouco valor a menos que haja evidência de que eles estão relacionados com a qualidade externa. É preciso notar que a validade destas métricas podem, às vezes, ser criticado. Muitas coisas, incluindo a fadiga e estresse físico/mental, pode afetar o desempenho de programadores com impacto resultante sobre as métricas externas. A única coisa que pode ser razoável afirmar é que a relação empírica entre as métricas de produtos de software não é muito forte, porque há outros efeitos que não são contabilizados.” Métricas para Análise de Softwares Orientados a Objetos Nesta seção, vamos descrever as métricas mais utilizadas para analise de softwares orientados a objetos: Coupling (Acoplamento): Em 1974 definiu-se o acoplamento como “a medida da força de associação estabelecida através de uma ligação a partir de um módulo para o outro”; o acoplamento é uma medida da interdependência dos objetos. Por exemplo, objetos A e B são acoplados se um método do objeto A chama um método ou acessa uma variável no objeto B. As classes são acopladas quando os métodos declarados em uma classe usam métodos ou atributos das outras classes. O fator de acoplamento (CF) é avaliado como uma fração onde o numerador representa o número de ligações sem herança; o denominador é o número máximo de acoplamentos de sistema. O número máximo de acoplamentos inclui tanto herança quanto acoplamento sem herança. Acoplamentos à base de herança surgem quando as classes derivadas (subclasses) herdam métodos e atributos de sua classe base (superclasse). Evidencias suportam os benefícios do baixo acoplamento entre os objetos. Os principais argumentos são de que quanto mais forte o acoplamento entre artefatos de software: 9 • mais difícil é compreender artefatos individuais, e, portanto, manter ou melhora-los corretamente, • maior a sensibilidade de mudança e de efeitos de propagação através de artefatos, • mais testes são necessários para atingir níveis de confiabilidade satisfatórios. Além disso, o acoplamento excessivo é prejudicial para o design modular e impede reutilização. Resumindo, o baixo ou fraco acoplamento é o mais desejável. Cohesion (Coesão): Coesão refere-se a quão perto as operações em uma classe são relacionadas umas das outras. A coesão de uma classe é o grau em que os métodos locais estão relacionados com as variáveis de instância local na classe. Um conjunto de métricas examina a falta de coesão “Lack of Cohesion” (LOCOM), que é o número de vácuos nos métodos locais. Existem pelo menos duas maneiras diferentes para se medir a coesão: » calcular para cada campo de dados que percentagem dos métodos usar; calcule a média das percentagens e então subtrair de 100%. Percentagens mais baixas significam uma maior coesão. » métodos são mais similares que operem nos mesmos atributos. Contar o número de conjuntos vazios produzidos a partir da interseção dos conjuntos de atributos utilizados pelos métodos. Alta coesão indica boa subdivisão da classe. A falta de coesão ou a baixa coesão aumentam a complexidade, aumentando assim a probabilidade de erros durante o processo de desenvolvimento. Classes com baixa coesão provavelmente poderiam ser subdividida em duas ou mais subclasses com maior coesão.Esta métrica avalia a implementação de design, bem como a reutilização. Encapsulation (Encapsulamento): Ocultar informações é uma maneira de projetar rotinas de tal forma que apenas um subconjunto de seja conhecido dos usuários do módulo. Informações ocultas dão origem ao encapsulamento em linguagens orientadas a objeto. Encapsulamento significa que tudo o que é visto de um objeto é a sua interface, ou seja, as operações que podem ser executadas sobre o objeto. O ocultamento de informações é uma técnica que tem provado seu valor na prática, onde, os programas de grande porte que utilizam informações ocultas são mais fáceis de ser encontrados e modificados quatro vezes mais que aqueles que usam o encapsulamento. A seguir seguem duas medidas de encapsulamento: Attribute Hiding Factor (AHF): O Fator de Ocultação de Atributos mede as invisibilidades dos atributos. A invisibilidade de um atributo é o percentual das classes totais a partir do qual o atributo não é visível. Um atributo é chamado visível se ele pode ser acessado por outra classe ou objeto. Atributos devem ser “ocultos” dentro de uma classe. Eles podem ser impedidos de serem acessados por outros objetos por ser declarado privado. O AHF é uma fração onde, o numerador é a soma das invisibilidades de todos os atributos definidos em todas as classes e o denominador é o número total de atributos definidos no projeto. É desejável um alto valor de AHF. Method Hiding Factor (MHF): O Fator de Ocultação de Método mede a invisibilidade de métodos em classes. A invisibilidade de um método é a percentagem do total de classes 10 Unidade: Métricas de Orientação a Objetos de que o método não é visível. O MHF é uma fração em que o numerador é a soma das invisibilidades de todos os métodos definidos em todas as classes e o denominador é o número total de métodos definidos no projeto. Os métodos devem ser ocultados dentro de uma classe e não estão disponíveis para o uso de outros objetos. Inheritance (Herança): A herança diminui a complexidade, reduzindo o número de operações e operadores, mas essa abstração de objetos pode fazer a manutenção e design se tornar mais difícil. As duas métricas usadas para medir a quantidade de herança são a profundidade e a amplitude da hierarquia de herança. Depth of Inheritance Tree (DIT): A profundidade de uma classe dentro da hierarquia de herança é definida como o comprimento máximo do nó de classe para a raiz da árvore da hierarquia e é medido pelo número de classes predecessoras. Nos casos que envolvem herança múltipla, o DIT é o comprimento máximo do nó para a raiz da árvore. Number of Children (NOC): Esta métrica é o número de descendentes diretos (subclasses) para cada classe. Classes com grande número de descendentes são consideradas difíceis de se modificar e, geralmente, necessitam de mais testes devido aos efeitos sobre as modificações em todas os descendentes. Eles também são considerados mais complexo e propenso a falhas porque uma classe com vários descendentes podem ter de prestar serviços em um número maior de contextos e, portanto, deve ser mais flexível. Complexity (Complexidade): Também conhecido como Weighted Methods/Class (WMC) ou Métodos Ponderados/Classe mede a complexidade de uma classe individual. Uma classe com mais funções do que os seus pares é considerado mais complexo e, portanto, mais propenso a erros. Quanto maior o número de métodos em uma classe, maior o impacto sobre os descendentes, pois estes irão herdar todos os métodos definidos em uma classe. Classes com um grande número de métodos são mais específicos o que limita a possibilidade de reutilização. Esse raciocínio indica que um número menor de métodos é bom para a usabilidade e reutilização. Recentemente, a tendência é utilizar métodos menores para reduzir a complexidade, aumentar a capacidade de leitura e melhorar a compreensão. Additional Measures (Medidas Adicionais) » Number of Classes (Número de Classes): Se é feita uma comparação entre projetos com funcionalidade idêntica, os projetos com mais classes são melhor captados. » Lines of Code (Linhas de Código): Se é feita uma comparação entre os projetos com funcionalidade idêntica, os projetos com menos linhas de código tem design superior e requerem menos manutenção. Além disso, métodos maiores sempre representarão um risco maior em atributos como compreensibilidade, reutilização, e sustentabilidade. 11 Áreas medidas na Engenharia de Software 12 Unidade: Métricas de Orientação a Objetos Técnicas de medições das métricas 13 Material Complementar GRAEML, A. R. Sistemas de informação: o alinhamento da estratégia de TI com a estratégia corporativa. 2. ed. São Paulo: Atlas, 2003. (e-book) OLIVEIRA, F. B. (org.). Tecnologia da informação e da comunicação: desafios e propostas estratégicas para o desenvolvimento dos negócios. São Paulo: Pearson/FGV, 2010. v.1 (e-book) PAGE-JONES, M. Fundamentos do desenho orientado a objeto com UML. São Paulo: Pearson, 2000. (e-book) PRESSMAN, R. S. Engenharia de software. 7. ed. Porto Alegre: Grupo A, 2011. (e-book) SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Addison-Wesley, 2011. (e-book) 14 Unidade: Métricas de Orientação a Objetos Referências CARVALHO, M. M.; RABECHINI JR., R. Construindo competências para gerenciar projetos. 3. ed. São Paulo: Atlas, 2011. COHN, M. Desenvolvimento de software com Scrum. Porto Alegre: Grupo A, 2011. (e-book) GIDO, J.; Clements, J. P. Gestão de projetos. 3. ed. São Paulo: Cengage, 2007. 15 Anotações www.cruzeirodosulvirtual.com.br Campus Liberdade Rua Galvão Bueno, 868 CEP 01506-000 São Paulo SP Brasil Tel: (55 11) 3385-3000 http://www.cruzeirodosulvirtual.com.br
Compartilhar