Skip to content

Chio (chan) exports metrics of a specific module for checking it's stability and flexibility.

License

Notifications You must be signed in to change notification settings

khanhtc1202/chio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

86 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chio

Chio (chan) exports metrics of a specific module for checking it's stability and flexibility.

What can it does

Main idea from Clean Architecture book Chapter 14.

Summarization go here.

Three metrics we care about:

  1. Abstractness (A): This metric has the range [0, 1]. A value of 0 implies that the module has no abstract classes at all. A value of 1 implies that the module contains nothing but abstract classes.
  2. Instability (I): This metric has the range [0, 1]. I = 0 indicates a maximally stable module. I = 1 indicates a maximally unstable module.
  3. Distance (D): There is a place, where A and I have a balance, it's called The Main Sequence. This metric has the range [0, 1]. D = 0 implies that the module lies in that place, and on the other side (D = 1) means far from balance line, locates in Zone of Pain or Zone of Uselessness.

Example output metrics extracted from boogeyman repo

+--------------------------+-------+----------+----------+-------+--------+--------------+-------------+----------+
|       MODULE PATH        | FILES | CONCRETE | ABSTRACT | FANIN | FANOUT | ABSTRACTNESS | INSTABILITY | DISTANCE |
+--------------------------+-------+----------+----------+-------+--------+--------------+-------------+----------+
| /domain/                 |     9 |        5 |        2 |    12 |     15 | 0.286        | 0.556       | 0.159    |
| /gateway/repository/     |     4 |        2 |        0 |     1 |      6 | 0.000        | 0.857       | 0.143    |
| /gateway/service/        |     1 |        0 |        1 |     1 |      1 | 1.000        | 0.500       | 0.500    |
| /infrastructure/service/ |     8 |        4 |        0 |     1 |     26 | 0.000        | 0.963       | 0.037    |
| /usecase/interactor/     |     1 |        1 |        0 |     1 |      4 | 0.000        | 0.800       | 0.200    |
| /usecase/presenter/      |     1 |        0 |        1 |     2 |      1 | 1.000        | 0.333       | 0.333    |
| /usecase/repository/     |     2 |        0 |        2 |     5 |      2 | 1.000        | 0.286       | 0.286    |
| /controller/             |     1 |        1 |        0 |     0 |      4 | 0.000        | 1.000       | 0.000    |
+--------------------------+-------+----------+----------+-------+--------+--------------+-------------+----------+

Usage

In case exec file you downloaded's name is chio.

Sample full params command

$ ./chio -l go -p ./ -d 1

Type -h to get help. Return value be like

Usage of ./bin/chio-darwin-64:
  -d string
        dir as module, default n-depth (n) (default "n")
  -l string
        language(s): go (default "go")
  -p string
        path to module (default ".")

TODO list

Support language(s)

  • Golang
  • Java
  • NodeJs

Load module strategies

  • n-depth Directory level (group files in same dir as a module)
  • 1-depth Directory level (WIP)

Run on local

Chio development environment requires:

  1. Golang (1.9.2 or higher). Install go here.
  2. dep (Go dependency management tool). Install go here.

Run by go

$ go run main.go

or check Makefile for building bin on your local.

Contribution

All contributions will be welcome in this project.

License

The MIT License (MIT). Please see LICENSE for more information.

About

Chio (chan) exports metrics of a specific module for checking it's stability and flexibility.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published