README.md 14.2 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
Todo:

 - [ ] Show all todos and history

P
Phodal Huang 已提交
17 18 19 20
## Usage

install 

P
Phodal Huang 已提交
21
```bash
P
Phodal Huang 已提交
22
go get -u github.com/phodal/coca
P
Phodal Huang 已提交
23 24
```

P
Phodal Huang 已提交
25 26
help:

P
Phodal Huang 已提交
27
```bash
P
Phodal Huang 已提交
28 29 30
Usage:
  coca [command]

P
Phodal Huang 已提交
31

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

P
Phodal Huang 已提交
46 47
```

P
Phodal Huang 已提交
48
### Analysis
P
Phodal Huang 已提交
49 50

```
P
Phodal Huang 已提交
51
coca analysis
P
Phodal Huang 已提交
52 53
```

P
Phodal Huang 已提交
54 55
### Find Bad Smells

P
Phodal Huang 已提交
56
```bash
P
Phodal Huang 已提交
57
coca bs -s type
P
Phodal Huang 已提交
58 59
```

P
Phodal Huang 已提交
60 61
Examples Result:

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

P
Phodal Huang 已提交
81 82 83
### Code Line Count

```
P
Phodal Huang 已提交
84
coca cloc
P
Phodal Huang 已提交
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
```

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 已提交
110
───────────────────────────────────────────────────────────────────────────────
P
Phodal Huang 已提交
111 112
```

P
Phodal Huang 已提交
113 114 115 116 117 118
Results to json

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

P
Phodal Huang 已提交
119 120 121
### Build Deps Tree

```
P
Phodal Huang 已提交
122
coca call -c com.phodal.pholedge.book.BookController.createBook -r com.phodal.pholedge.
P
Phodal Huang 已提交
123 124
```

P
Phodal Huang 已提交
125 126
Examples Results:

P
Phodal Huang 已提交
127 128 129 130 131
![Call Demo](docs/sample/call_demo.svg)

### Identify Spring API

```
P
Phodal Huang 已提交
132
coca api -f
P
Phodal Huang 已提交
133 134
```

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

P
Phodal Huang 已提交
137 138 139
With Count

```
P
Phodal Huang 已提交
140
coca api -r com.phodal.pholedge. -c 
P
Phodal Huang 已提交
141 142
``` 

P
Phodal Huang 已提交
143 144
or multi package:

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

P
Phodal Huang 已提交
147
```bash
P
Phodal Huang 已提交
148 149 150 151 152 153 154 155 156 157 158 159 160
+------+--------+------------------------------------------------+------------------------------------------------------------------------+
| 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 已提交
161 162
```

P
Phodal Huang 已提交
163 164 165
### Git Analysis

```
P
Phodal Huang 已提交
166
coca git -t
P
Phodal Huang 已提交
167 168
```

P
Phodal Huang 已提交
169 170 171
Results: 

```bash
P
Phodal Huang 已提交
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+
|                                                     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 已提交
196 197
```

P
Phodal Huang 已提交
198 199 200
### Concept Analyser

```
P
Phodal Huang 已提交
201
coca concept
P
Phodal Huang 已提交
202 203 204 205 206
```

Results Examples:

```
P
Phodal Huang 已提交
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
+------------------+--------+
|      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 已提交
222 223
```

P
Phodal Huang 已提交
224 225 226
### Count Refs

```
P
Phodal Huang 已提交
227
coca count
P
Phodal Huang 已提交
228 229 230 231 232
```

Results:

```
P
Phodal Huang 已提交
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
+------------+--------------------------------------------------------------------------+
| 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 已提交
256 257
```

P
Phodal Huang 已提交
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
### 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 已提交
278
### Auto Refactor
P
Phodal Huang 已提交
279 280 281 282 283 284 285

support: 

 - rename
 - move
 - remove unused import
 - remove unused class
P
Phodal Huang 已提交
286 287

```
P
Phodal Huang 已提交
288
coca refactor -R rename.coca -p src/main
P
Phodal Huang 已提交
289 290 291
coca refactor -m move.config -p .
```

P
Phodal Huang 已提交
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
### Evaluate

```
coca evaluate
```

```
custom [customKeyGenerator customCacheManager]
throw [throwUnchecked throwCheckedSync throwUncheckedSync throwChecked]
evict [evictWithException evictAllEarly evictAll evict evictEarly]
multi [multiCacheAndEvict multiCache multiUpdate multiEvict multiConditionalCacheAndEvict]
conditional [conditional conditionalUpdate conditionalSync]
unknown [unknownCustomCacheManager unknownCustomKeyGenerator]
throw [throwException throwCheckedException]
put [putWithException put]
early [earlyRemoveWithException earlyRemoveAllWithException earlyRemoveAll earlyPut earlyPutWithException earlyRemove]
evict [evictAll evictWithException evict evictEarly evictAllEarly]
```

P
Phodal HUANG 已提交
311 312
## Dev

P
Phodal Huang 已提交
313
Install Go
P
Phodal HUANG 已提交
314 315 316 317 318

```bash
brew install go
```

P
Phodal Huang 已提交
319
Env
P
Phodal HUANG 已提交
320 321 322 323 324 325 326

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

P
Phodal Huang 已提交
327
clone
P
Phodal HUANG 已提交
328 329

```
P
Phodal Huang 已提交
330
go get https://github.com/phodal/coca
P
Phodal HUANG 已提交
331 332
```

P
Phodal Huang 已提交
333
Test Frameworks
P
Phodal HUANG 已提交
334 335 336 337

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

P
Phodal Huang 已提交
340 341 342 343 344
License
---

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

P
Phodal Huang 已提交
345
@ 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.