README.md 13.4 KB
Newer Older
P
Phodal Huang 已提交
1
# Coca - toolbox for system refactoring and analaysis
P
Phodal HUANG 已提交
2

P
Phodal Huang 已提交
3
[![Build Status](https://travis-ci.org/phodal/coca.svg?branch=master)](https://travis-ci.org/phodal/coca)
P
Phodal Huang 已提交
4 5
[![Maintainability](https://api.codeclimate.com/v1/badges/d5a5e060522403b1f79b/maintainability)](https://codeclimate.com/github/phodal/coca/maintainability)
[![codecov](https://codecov.io/gh/phodal/coca/branch/master/graph/badge.svg)](https://codecov.io/gh/phodal/coca)
P
Phodal Huang 已提交
6

P
Phodal Huang 已提交
7
> Coca is a toolbox which is design for legacy system refactoring. Coca 是一个用于系统重构、系统迁移和系统分析的瑞士军刀。它可以分析代码中的 badsmell,行数统计,分析调用与依赖,进行 Git 分析,以及自动化重构等。
P
Phodal Huang 已提交
8

P
Phodal Huang 已提交
9
Refactoring Modeling:
P
Phodal Huang 已提交
10

P
Phodal Huang 已提交
11
![Refactoring Modeling](docs/images/model.svg)
P
Phodal Huang 已提交
12

P
Phodal Huang 已提交
13 14 15 16
## Usage

install 

P
Phodal Huang 已提交
17
```bash
P
Phodal Huang 已提交
18
go get -u github.com/phodal/coca
P
Phodal Huang 已提交
19 20
```

P
Phodal Huang 已提交
21 22
help:

P
Phodal Huang 已提交
23
```bash
P
Phodal Huang 已提交
24 25 26
Usage:
  coca [command]

P
Phodal Huang 已提交
27

P
Phodal Huang 已提交
28 29 30
Available Commands:
  analysis    analysis package
  api         scan api
P
Phodal Huang 已提交
31
  bs          bad smell analysis
P
Phodal Huang 已提交
32
  call        call graph api
P
Phodal Huang 已提交
33
  cloc        cloc [FILE or DIRECTORY]
P
Phodal Huang 已提交
34
  concept     concept api
P
Phodal Huang 已提交
35
  count       count code
P
Phodal Huang 已提交
36
  evaluate    evaluate refactor effort
P
Phodal Huang 已提交
37
  git         git analysis
P
Phodal Huang 已提交
38
  help        Help about any command
P
Phodal Huang 已提交
39
  rcall       reverse call
P
Phodal Huang 已提交
40
  refactor    auto refactor code
P
Phodal Huang 已提交
41

P
Phodal Huang 已提交
42 43
```

P
Phodal Huang 已提交
44
### Analysis
P
Phodal Huang 已提交
45 46

```
P
Phodal Huang 已提交
47
coca analysis
P
Phodal Huang 已提交
48 49
```

P
Phodal Huang 已提交
50 51
### Find Bad Smells

P
Phodal Huang 已提交
52
```bash
P
Phodal Huang 已提交
53
coca bs -s type
P
Phodal Huang 已提交
54 55
```

P
Phodal Huang 已提交
56 57
Examples Result:

P
Phodal Huang 已提交
58
```json
P
Phodal Huang 已提交
59
{
P
Phodal Huang 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73
   "dataClass": [
      {
         "File": "examples/api/BookController.java",
         "BS": "dataClass"
      }
      ...
   ],
   "lazyElement": [
      {
         "File": "examples/api/model/BookRepresentaion.java",
         "BS": "lazyElement"
      }
      ...
   ]
P
Phodal Huang 已提交
74 75 76
}
```

P
Phodal Huang 已提交
77 78 79
### Code Line Count

```
P
Phodal Huang 已提交
80
coca cloc
P
Phodal Huang 已提交
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
```

Results:

```
───────────────────────────────────────────────────────────────────────────────
Language                 Files     Lines   Blanks  Comments     Code Complexity
───────────────────────────────────────────────────────────────────────────────
Go                          58     31763     7132       890    23741       2847
Java                        44       971      208        21      742         62
Markdown                     8       238       75         0      163          0
Gherkin Specificati…         2        32        2        16       14          0
Document Type Defin…         1       293       36         0      257          0
License                      1       201       32         0      169          0
SQL                          1         2        0         0        2          0
SVG                          1       199        0        34      165          0
Shell                        1         3        1         1        1          0
XML                          1        13        0         0       13          0
gitignore                    1        61        8         4       49          0
───────────────────────────────────────────────────────────────────────────────
Total                      119     33776     7494       966    25316       2909
───────────────────────────────────────────────────────────────────────────────
Estimated Cost to Develop $803,822
Estimated Schedule Effort 14.120551 months
Estimated People Required 6.743156
P
Phodal Huang 已提交
106
───────────────────────────────────────────────────────────────────────────────
P
Phodal Huang 已提交
107 108
```

P
Phodal Huang 已提交
109 110 111 112 113 114
Results to json

```
coca cloc --by-file --format json
```

P
Phodal Huang 已提交
115 116 117
### Build Deps Tree

```
P
Phodal Huang 已提交
118
coca call -c com.phodal.pholedge.book.BookController.createBook -r com.phodal.pholedge.
P
Phodal Huang 已提交
119 120
```

P
Phodal Huang 已提交
121 122
Examples Results:

P
Phodal Huang 已提交
123 124 125 126 127
![Call Demo](docs/sample/call_demo.svg)

### Identify Spring API

```
P
Phodal Huang 已提交
128
coca api -f
P
Phodal Huang 已提交
129 130
```

P
Phodal Huang 已提交
131 132
![API Demo](docs/sample/api.svg)

P
Phodal Huang 已提交
133 134 135
With Count

```
P
Phodal Huang 已提交
136
coca api -r com.phodal.pholedge. -c 
P
Phodal Huang 已提交
137 138
``` 

P
Phodal Huang 已提交
139 140
or multi package:

P
Phodal Huang 已提交
141
`coca api  -r com.macro.mall.demo.controller.,com.zheng.cms.admin.,com.phodal.pholedge -c` 
P
Phodal Huang 已提交
142

P
Phodal Huang 已提交
143
```bash
P
Phodal Huang 已提交
144 145 146 147 148 149 150 151 152 153 154 155 156
+------+--------+------------------------------------------------+------------------------------------------------------------------------+
| SIZE | METHOD |                      URI                       |                                 CALLER                                 |
+------+--------+------------------------------------------------+------------------------------------------------------------------------+
|   36 | GET    | /aliyun/oss/policy                             | controller.OssController.policy                                        |
|   21 | POST   | /aliyun/osscallback                            | controller.OssController.callback                                      |
|   17 | GET    | /subject/list                                  | controller.CmsSubjectController.getList                                |
|   17 | GET    | /esProduct/search                              | search.controller.EsProductController.search                           |
|   17 | GET    | /order/list                                    | controller.OmsOrderController.list                                     |
|   17 | GET    | /productAttribute/list/{cid}                   | controller.PmsProductAttributeController.getList                       |
|   17 | GET    | /productCategory/list/{parentId}               | controller.PmsProductCategoryController.getList                        |
|   17 | GET    | /brand/list                                    | controller.PmsBrandController.getList                                  |
|   17 | GET    | /esProduct/search/simple                       | search.controller.EsProductController.search                           |
+------+--------+------------------------------------------------+------------------------------------------------------------------------+
P
Phodal Huang 已提交
157 158
```

P
Phodal Huang 已提交
159 160 161
### Git Analysis

```
P
Phodal Huang 已提交
162
coca git -t
P
Phodal Huang 已提交
163 164
```

P
Phodal Huang 已提交
165 166 167
Results: 

```bash
P
Phodal Huang 已提交
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+
|                                                     ENTITYNAME                                                      | REVSCOUNT | AUTHORCOUNT |
+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+
| build.gradle                                                                                                        |      1326 |          36 |
| src/asciidoc/index.adoc                                                                                             |       239 |          20 |
| build-spring-framework/resources/changelog.txt                                                                      |       187 |          10 |
| spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java                                  |       170 |          10 |
| spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java                |       159 |          15 |
| src/docs/asciidoc/web/webmvc.adoc                                                                                   |       121 |          24 |
| spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java                   |       118 |           9 |
| src/dist/changelog.txt                                                                                              |       118 |           9 |
| spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java       |       116 |          15 |
| spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java        |       113 |          15 |
| spring-web/src/main/java/org/springframework/http/HttpHeaders.java                                                  |       111 |          18 |
| src/docs/asciidoc/web/webflux.adoc                                                                                  |       108 |          21 |
| spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java                            |       107 |           9 |
| spring-test/spring-test.gradle                                                                                      |       105 |           7 |
| spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java |       105 |          13 |
| spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java         |       101 |          12 |
| spring-web/src/main/java/org/springframework/web/client/RestTemplate.java                                           |        98 |          17 |
| spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java                |        96 |          14 |
| org.springframework.core/src/main/java/org/springframework/core/convert/TypeDescriptor.java                         |        93 |           4 |
| spring-core/src/main/java/org/springframework/core/ResolvableType.java                                              |        92 |          10 |
+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+
P
Phodal Huang 已提交
192 193
```

P
Phodal Huang 已提交
194 195 196
### Concept Analyser

```
P
Phodal Huang 已提交
197
coca concept
P
Phodal Huang 已提交
198 199 200 201 202
```

Results Examples:

```
P
Phodal Huang 已提交
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
+------------------+--------+
|      WORDS       | COUNTS |
+------------------+--------+
| context          |    590 |
| resolve          |    531 |
| path             |    501 |
| content          |    423 |
| code             |    416 |
| resource         |    373 |
| property         |    372 |
| session          |    364 |
| attribute        |    349 |
| properties       |    343 |
| headers          |    330 |
+------------------+--------+
P
Phodal Huang 已提交
218 219
```

P
Phodal Huang 已提交
220 221 222
### Count Refs

```
P
Phodal Huang 已提交
223
coca count
P
Phodal Huang 已提交
224 225 226 227 228
```

Results:

```
P
Phodal Huang 已提交
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
+------------+--------------------------------------------------------------------------+
| REFS COUNT |                                  METHOD                                  |
+------------+--------------------------------------------------------------------------+
|          2 | com.phodal.pholedge.book.BookRepository.byId                             |
|          2 | com.phodal.pholedge.book.model.Book.toRepresentation                     |
|          2 | com.phodal.pholedge.book.BookRepository.save                             |
|          2 | com.phodal.coca.analysis.JavaCallApp.parse                               |
|          2 | com.phodal.pholedge.book.BookRepository.save                             |
|          2 | com.phodal.coca.analysis.JavaCallApp.parse                               |
|          1 | com.phodal.pholedge.book.model.Book.save                                 |
|          1 | evolution.analysis.jv.calls.JavaCallVisitor.parseNewType                 |
|          1 | evolution.analysis.jv.calls.JavaCallVisitor.isNotSpecialNewWord          |
|          1 | com.phodal.pholedge.book.BookMapper.byId                                 |
|          1 | com.phodal.pholedge.book.BookService.updateBook                          |
|          1 | com.phodal.pholedge.book.BookService.getBooksLists                       |
|          1 | com.phodal.pholedge.book.BookService.getBookById                         |
|          1 | com.phodal.pholedge.book.BookMapper.doSave                               |
|          1 | com.phodal.pholedge.book.BookMapper.list                                 |
|          1 | com.phodal.pholedge.book.BookService.createBook                          |
|          1 | com.phodal.pholedge.book.BookFactory.create                              |
|          1 | com.phodal.pholedge.book.BookRepository.list                             |
|          1 | com.phodal.pholedge.book.model.Book.create                               |
+------------+--------------------------------------------------------------------------+
P
Phodal Huang 已提交
252 253
```

P
Phodal Huang 已提交
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
### Reverse Call Graph

```
coca rcall -c org.bytedeco.javacpp.tools.TokenIndexer.get
```

Results:

```
digraph G { 
edge [dir="back"];

"org.bytedeco.javacpp.tools.Parser.extern" -> "org.bytedeco.javacpp.tools.Parser.declarations";
"org.bytedeco.javacpp.tools.Parser.declarations" -> "org.bytedeco.javacpp.tools.Parser.extern";
...
}
```

![RCall Demo](docs/sample/rcall.svg)

P
Phodal Huang 已提交
274
### Auto Refactor
P
Phodal Huang 已提交
275 276 277 278 279 280 281

support: 

 - rename
 - move
 - remove unused import
 - remove unused class
P
Phodal Huang 已提交
282 283

```
P
Phodal Huang 已提交
284
coca refactor -R rename.coca -p src/main
P
Phodal Huang 已提交
285 286 287
coca refactor -m move.config -p .
```

P
Phodal HUANG 已提交
288 289
## Dev

P
Phodal Huang 已提交
290
Install Go
P
Phodal HUANG 已提交
291 292 293 294 295

```bash
brew install go
```

P
Phodal Huang 已提交
296
Env
P
Phodal HUANG 已提交
297 298 299 300 301 302 303

```bash
export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/.go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
```

P
Phodal Huang 已提交
304
clone
P
Phodal HUANG 已提交
305 306

```
P
Phodal Huang 已提交
307
go get https://github.com/phodal/coca
P
Phodal HUANG 已提交
308 309
```

P
Phodal Huang 已提交
310
Test Frameworks
P
Phodal HUANG 已提交
311 312 313 314

```
go get github.com/onsi/ginkgo
go get github.com/onsi/gomega
P
Phodal HUANG 已提交
315 316
```

P
Phodal Huang 已提交
317 318 319 320 321
License
---

[![Phodal's Idea](http://brand.phodal.com/shields/idea-small.svg)](http://ideas.phodal.com/)

P
Phodal Huang 已提交
322
@ 2019 A [Phodal Huang](https://www.phodal.com)'s [Idea](http://github.com/phodal/ideas).  This code is distributed under the MPL license. See `LICENSE` in this directory.