Ferramenta para avaliar a complexidade de código escrito em PHP \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 22 Horas 

 20 Min 

 21 Seg 

   Tempo restante da oferta: 22 20 21 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Ferramenta para avaliar a complexidade de código escrito em PHP  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Ferramenta para avaliar a complexidade de código escrito em PHP

 Conheça um pouco mais sobre a phploc, ferramenta para avaliar a complexidade de código escrito em PHP.

 [ Kennedy Tedesco ](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco) 10 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/complexity-code-copy.jpg)  

Recentemente o *Taylor Otwell* (criador do Laravel Framework) publicou um [artigo](https://medium.com/@taylorotwell/measuring-code-complexity-64356da605f9) avaliando a complexidade de código dos principais frameworks utilizados em [PHP](https://www.treinaweb.com.br/blog/o-que-e-php/ "O que é PHP?"). Ele decidiu simplificar e colocar na análise apenas as seguintes informações/métricas:

- Quantidade de linhas de código.
- Método mais longo (em número de linhas).
- Média da complexidade dos métodos.
- Máxima complexidade de um método.
- Porcentagem de métodos não estáticos.

Essa última métrica é importante (especialmente) para [Frameworks](https://www.treinaweb.com.br/blog/para-que-serve-um-framework/ "Para que serve um framework?"), pois há uma relação direta entre baixa testabilidade e métodos estáticos (quanto ao uso indiscriminado). Portanto, em teoria, quanto menos métodos estáticos, mais facilmente “testável” é o “todo”.

A ferramenta utilizada por ele para gerar o relatório foi a [*phploc*](https://github.com/sebastianbergmann/phploc) do [*Sebastian Bergmann*](https://github.com/sebastianbergmann) (criador do [PHPUnit](https://github.com/sebastianbergmann/phpunit)).

[  ![Ruby on Rails - Testes unitários](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/ruby-on-rails.svg)   Curso Ruby on Rails - Testes unitários Conhecer o curso ](https://www.treinaweb.com.br/curso/testes-unitarios-em-aplicacoes-rails)

## phploc

A instalação da *phploc* se dá pelo [Composer](https://getcomposer.org/), numa instalação *global*, de tal forma que o binário da ferramenta fique disponível no caminho de busca do SO.

Como pré-requisitos, você precisa ter o PHP e o Composer instalados (e no caminho de busca global). Se você tiver alguma dúvida sobre como proceder com a instalação do *Composer*, verifique [aqui](https://getcomposer.org/doc/00-intro.md).

#### Instalando a ferramenta

No terminal (ou CMD, se você estiver no Windows), execute:

```bash
composer global require 'phploc/phploc=*'

```

Finalizado, tudo o que você precisa fazer é navegar até a pasta do projeto que você quer gerar o relatório e executar:

```bash
phploc ./folder

```

Para que possamos aqui visualizar a saída da execução da ferramenta, vamos clonar o core do Laravel e executá-la na pasta do componente *Database*.

Para isso, no diretório padrão onde você tem os seus projetos PHP (ou em outro, se preferir), execute:

```bash
composer require laravel/framework

```

Isso vai criar uma pasta chamada `framework`. Para executar a análise somente no componente *Database*, primeiro navegue até essa pasta e em seguida execute:

```bash
phploc src/Illuminate/Database/

```

Veja:

![Print do Terminal](https://d2m498l008ebpa.cloudfront.net/2017/01/Screen-Shot-2017-01-16-at-12.37.31.png)

[  ![Yii - Framework PHP](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/yii-framework.svg)   Curso Yii - Framework PHP Conhecer o curso ](https://www.treinaweb.com.br/curso/yii-framework-completo)

Esse foi o relatório gerado:

```bash
Directories                                         16
Files                                              107

Size
  Lines of Code (LOC)                            26752
  Comment Lines of Code (CLOC)                   12193 (45.58%)
  Non-Comment Lines of Code (NCLOC)              14559 (54.42%)
  Logical Lines of Code (LLOC)                    3884 (14.52%)
    Classes                                       3450 (88.83%)
      Average Class Length                          32
        Minimum Class Length                         0
        Maximum Class Length                       345
      Average Method Length                          1
        Minimum Method Length                        0
        Maximum Method Length                       12
    Functions                                        0 (0.00%)
      Average Function Length                        0
    Not in classes or functions                    434 (11.17%)

Cyclomatic Complexity
  Average Complexity per LLOC                     0.24
  Average Complexity per Class                    9.88
    Minimum Class Complexity                      1.00
    Maximum Class Complexity                    104.00
  Average Complexity per Method                   1.61
    Minimum Method Complexity                     1.00
    Maximum Method Complexity                    17.00

Dependencies
  Global Accesses                                   10
    Global Constants                                10 (100.00%)
    Global Variables                                 0 (0.00%)
    Super-Global Variables                           0 (0.00%)
  Attribute Accesses                              1374
    Non-Static                                    1317 (95.85%)
    Static                                          57 (4.15%)
  Method Calls                                    2606
    Non-Static                                    2407 (92.36%)
    Static                                         199 (7.64%)

Structure
  Namespaces                                        17
  Interfaces                                         5
  Traits                                            13
  Classes                                           89
    Abstract Classes                                 9 (10.11%)
    Concrete Classes                                80 (89.89%)
  Methods                                         1566
    Scope
      Non-Static Methods                          1496 (95.53%)
      Static Methods                                70 (4.47%)
    Visibility
      Public Methods                              1037 (66.22%)
      Non-Public Methods                           529 (33.78%)
  Functions                                        119
    Named Functions                                  0 (0.00%)
    Anonymous Functions                            119 (100.00%)
  Constants                                          5
    Global Constants                                 3 (60.00%)
    Class Constants                                  2 (40.00%)

```

Como você pôde observar, avalia-se muito mais do que só o que introduzimos no começo desse post, como a quantidade de:

- Linhas de código;
- Diretórios;
- Classes concretas;
- Classes abstratas;
- Interfaces;
- Traits;
- Métodos estáticos;
- Funções;
- Etc.

A ferramenta também a avalia a [complexidade ciclomática](https://pt.wikipedia.org/wiki/Complexidade_ciclom%C3%A1tica) média das classes e métodos.

Em futuros artigos veremos sobre teorias de teste de software e métricas para medição da qualidade de código.

Até a próxima!

[  ![Desenvolvedor PHP Sênior](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Formação Desenvolvedor PHP Sênior Conhecer a formação ](https://www.treinaweb.com.br/formacao/desenvolvedor-php-senior)

- [ #PHP ](https://www.treinaweb.com.br/blog/tag/php)
- [ #Linguagens de Programação ](https://www.treinaweb.com.br/blog/tag/linguagens-de-programacao)
- [ #Teste de Software ](https://www.treinaweb.com.br/blog/tag/teste-de-software)

Autor

 ![Kennedy Tedesco](//secure.gravatar.com/avatar/236c86e9469327ba7a9250ff15fef424?d=mm)

## Kennedy Tedesco

 Head de desenvolvimento. Vasta experiência em desenvolvimento Web com foco em PHP. Graduado em Sistemas de Informação. Pós-graduando em Arquitetura de Software Distribuído pela PUC Minas. Zend Certified Engineer (ZCE) e Coffee Addicted Person (CAP). [@KennedyTedesco](https://twitter.com/KennedyTedesco) 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/background-post-400x280.jpg)  [ Algoritmos ](https://www.treinaweb.com.br/blog/categoria/algoritmos) 

     10 anos atrás

    ##  [ Complexidade ciclomática, análise estática e refatoração ](https://www.treinaweb.com.br/blog/complexidade-ciclomatica-analise-estatica-e-refatoracao) 

     Veremos nesse artigo como se dá a mensuração da complexidade ciclomática; como os analisadores estáticos podem nos auxiliar e a importância da refatoração.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/10/04103322/ferramentas-php-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Ferramentas essenciais para um projeto PHP ](https://www.treinaweb.com.br/blog/ferramentas-essenciais-para-um-projeto-php) 

     Neste artigo cito as quatro principais ferramentas que considero essenciais para qualquer projeto PHP: PHPUnit, PHPStan, PHP-CS-Fixer e PHP Insights.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/03/28204913/capa-codigo-limpo-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     8 anos atrás

    ##  [ Dicas para manter seu código limpo e legível ](https://www.treinaweb.com.br/blog/dicas-para-manter-seu-codigo-limpo-e-legivel) 

     Veja neste artigo boas práticas que você deve ter com seu código.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/24120107/streams-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Streams no PHP ](https://www.treinaweb.com.br/blog/streams-no-php) 

     Você, desenvolvedor PHP, já teve a oportunidade de trabalhar mais intimamente com Streams? Se você já teve ou não, esse artigo é pra você! Uma introdução ao essencial sobre o assunto.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/10/06103451/cobertura-codigos-testes-automatizados-400x280.jpg)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     9 anos atrás

    ##  [ Analisando a cobertura de testes em aplicações .NET com o OpenCover ](https://www.treinaweb.com.br/blog/analisando-cobertura-de-testes-em-aplicacoes-net-com-o-opencover) 

     Conheça o OpenCover, ferramenta open-source para análise de cobertura de testes.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/ferramentas-servicos-1-400x280.jpg)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     10 anos atrás

    ##  [ A era das ferramentas em forma de serviço ](https://www.treinaweb.com.br/blog/a-era-das-ferramentas-em-forma-de-servico) 

     Qual o motivo por trás do surgimento de tantas ferramentas em forma de serviço? Quais as principais e mais indicadas?

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/08/COMO-SE-PREPARAR-PARA-ENTREVISTA-TECNICA-400x280.png)  [ Carreira ](https://www.treinaweb.com.br/blog/categoria/carreira) 

     4 anos atrás

    ##  [ Como se preparar para entrevistas técnicas ](https://www.treinaweb.com.br/blog/como-se-preparar-para-entrevistas-tecnicas) 

     Geralmente, quando participamos de um processo seletivo para uma vaga relacionada a desenvolvimento, há uma etapa técnica, onde os entrevistadores irão avaliar suas competências técnicas, sua linha de raciocínio lógico e a maneira como você emprega ferramentas e tecnologias para a resolução de problemas. Neste artigo, separamos algumas dicas para que você possa se sair bem nesta etapa.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/04/02014536/APACHE-JMETER-400x280.png)  [ Testes e Projetos ](https://www.treinaweb.com.br/blog/categoria/testes-e-projetos) 

     7 anos atrás

    ##  [ O que é JMeter? ](https://www.treinaweb.com.br/blog/o-que-e-jmeter) 

     Confira neste artigo a ferramenta JMeter e o que são os testes de performance.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/10/15163425/github-actions-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Integração contínua para aplicações PHP usando Github Actions ](https://www.treinaweb.com.br/blog/integracao-continua-para-aplicacoes-php-usando-github-actions) 

     Veja como usar Github Actions para criar um workflow de análise e teste do seu projeto desenvolvido em PHP

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/09/TAILWIND-CSS-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     4 anos atrás

    ##  [ O que é Tailwind CSS e como instalar via CDN? ](https://www.treinaweb.com.br/blog/o-que-e-tailwind-css-e-como-instalar-via-cdn) 

     Neste artigo aprenderemos a criar um navbar usando Tailwind CSS, e entender melhor como funciona seus componentes de estilização.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/11/02214700/capa-carreira-1-400x280.png)  [ Carreira ](https://www.treinaweb.com.br/blog/categoria/carreira) 

     7 anos atrás

    ##  [ Como turbinar sua carreira em 2020 ](https://www.treinaweb.com.br/blog/como-turbinar-sua-carreira-em-2020) 

     Veja neste artigo algumas dicas para turbinar sua carreira, visando o próximo ano.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/09/como-funciona-a-prototipacao-no-desenvolvimento-de-software-400x280.png)  [ Engenharia de Software ](https://www.treinaweb.com.br/blog/categoria/engenharia-de-software) 

     6 anos atrás

    ##  [ Como funciona a prototipação no desenvolvimento de software? ](https://www.treinaweb.com.br/blog/como-funciona-a-prototipacao-no-desenvolvimento-de-software) 

     A prototipação no desenvolvimento de software permite amadurecer ideias, identificar problemas e engajar pessoas no processo de criação de um sistema.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **22h 20min 21s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
