Coca는 레거시 시스템 리팩토링 및 분석을 위해 설계된 도구 상자입니다. 통화 그래프, 개념 분석, API 트리, 설계 패턴은 시스템 재구성, 시스템 마이그레이션 및 시스템 분석을위한 도구 상자입니다. 코드, 모듈 식 분석, 라인 카운트 통계, 통화 및 종속성 분석, GIT 분석 및 자동 재구성의 테스트 나쁜 맛을 분석 할 수 있습니다.
관련 도구 : Coco는 효과적인 DevOps 분석 및 자동 제공 도구입니다.
Kotlin 버전 : Chapi
마이그레이션 가이드 (중국어 버전) : "시스템 리팩토링 및 마이그레이션 가이드"
영감 : Newlee & Tequila
리팩토링 모델링 :
기능 목록 :
Available Commands:
analysis analysis code
api scan HTTP api from annotation
arch project package visualization
bs generate bad smell list and suggestions
call show call graph with specific method
cloc count lines of code with complexity estimation
concept build domain concept from source code
count count most refs function
evaluate evaluate code situation and refactor effort
git analysis git commit history for revs count, summary and suggest
help Help about any command
rcall reverse call graph visualization
refactor auto refactor code
suggest find usable Design Patterns from code
tbs generate tests bad smell
todo scan all todo, and list with time
version version
요구 사항 : DOT 파일에 대한 GraphViz (예 : SVG, PNG)
코카를 얻는 가장 쉬운 방법은 릴리스 페이지의 OSX, Linux, Windows에서 사용할 수있는 사전 구축 된 릴리스 바이너리 중 하나를 사용하는 것입니다.
직접 설치할 수도 있습니다.
go install github.com/modernizing/coca@latest coca analysis
coca arch
Android Studio Gradle DSL 모듈 (Merge 헤더)
명령 : coca arch -x "com.android.tools.idea.gradle.dsl" -H true
Android Studio Gradle DSL 모듈 요소 부분 :
명령 : coca arch -x "com.android.tools.idea.gradle.dsl.parser.elements"
coca bs -s type예 : 결과 :
{
"dataClass" : [
{
"File" : " examples/api/BookController.java " ,
"BS" : " dataClass "
}
],
"lazyElement" : [
{
"File" : " examples/api/model/BookRepresentaion.java " ,
"BS" : " lazyElement "
}
]
} coca cloc
결과:
───────────────────────────────────────────────────────────────────────────────
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
───────────────────────────────────────────────────────────────────────────────
JSON에게 결과
coca cloc --by-file --format json
coca cloc ~ /intellij-community/android/ --by-directory --include-ext=java,kt --not-match= " .*(Test|Tests).(kt|java) "결과 CSV :
module,summary
adt-branding,169
adt-testutils,257
adt-ui,21987
adt-ui-model,3450
android,361270
android-adb,497
android-common,3280
android-debuggers,3030
android-kotlin,8816
android-lang,24796
android-lang-databinding,6392
android-layout-inspector,2533
...
coca cloc ~ /intellij-community/android/designer/src/com/android/tools/idea --top-file --top-size 10 출력 : coca_reporter/sort_cloc.json 및 또한 :
| LENGTH | COMPLEXITY | LOCATION |
| -------- | ------------ | ----------------------------------- |
| 1642 | 236 | ConstraintLayoutHandler.java |
| 1492 | 375 | ConstraintComponentUtilities.java |
| 1189 | 166 | CommonActions.java |
| 1184 | 325 | ConstraintWidget.java |
| 1169 | 129 | SingleWidgetView.java |
| 1115 | 213 | ScoutArrange.java |
| 1097 | 281 | ScoutWidget.java |
| 1081 | 224 | 3d/Rasterize.java |
| 1016 | 159 | LayoutlibSceneManager.java |
| 1014 | 220 | TimeLinePanel.java | coca call -c com.phodal.pholedge.book.BookController.createBook -r com.phodal.pholedge.
예 : 결과 :
coca api -f
카운트로
coca api -r com.phodal.pholedge. -c
또는 멀티 패키지 :
coca api -r com.macro.mall.demo.controller.,com.zheng.cms.admin.,com.phodal.pholedge -c
+------+--------+------------------------------------------------+------------------------------------------------------------------------+
| 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 |
+------+--------+------------------------------------------------+------------------------------------------------------------------------+ coca git -t
결과:
+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+
| 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 |
+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+ coca concept
결과 예 :
+------------------+--------+
| WORDS | COUNTS |
+------------------+--------+
| context | 590 |
| resolve | 531 |
| path | 501 |
| content | 423 |
| code | 416 |
| resource | 373 |
| property | 372 |
| session | 364 |
| attribute | 349 |
| properties | 343 |
| headers | 330 |
+------------------+--------+
coca count
결과:
+------------+--------------------------------------------------------------------------+
| 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 |
+------------+--------------------------------------------------------------------------+
coca rcall -c org.bytedeco.javacpp.tools.TokenIndexer.get
결과:
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";
...
}
지원하다:
coca refactor -R rename.coca -p src/main
coca refactor -m move.config -p .
coca evaluate
Arduino 결과 (오래된 버전) :
+--------------------------------+-------+-----------------------+-------+-----------+
| TYPE | COUNT | LEVEL | TOTAL | RATE |
+--------------------------------+-------+-----------------------+-------+-----------+
| Nullable / Return Null | 0 | Method | 1615 | 0.00% |
| Utils | 7 | Class | 252 | 2.78% |
| Static Method | 0 | Method | 1615 | 0.43% |
| Average Method Num. | 1615 | Method/Class | 252 | 6.408730 |
| Method Num. Std Dev / 标准差 | 1615 | Class | - | 7.344917 |
| Average Method Length | 13654 | Without Getter/Setter | 1100 | 12.412727 |
| Method Length Std Dev / 标准差 | 1615 | Method | - | 20.047092 |
+--------------------------------+-------+-----------------------+-------+-----------+
새 버전 :
| TYPE | TYPE COUNT | LEVEL | LEVEL TOTAL | VALUE = COUNT / TOTAL |
|--------------------------------|------------|-----------------------|-------------|-----------------------|
| Nullable / Return Null | 0 | Method | 6 | 0.00% |
| Utils | 0 | Class | 14 | 0.00% |
| Static Method | 1 | Method | 6 | 0.00% |
| Average Method Num. | 6 | Method/Class | 14 | 0.428571 |
| Method Num. Std Dev / 标准差 | 6 | Class | - | 0.646206 |
| Average Method Length | 0 | Without Getter/Setter | 0 | NaN |
| Method Length Std Dev / 标准差 | 0 | Method | - | NaN |
valuate.json 예제
{
"Nullable" : {
"Items" : [
" nonnull.Name.testNull " ,
" nonnull.Name.orElseNull " ,
" org.ofbiz.base.util.UtilURL.fromResource " ,
" org.ofbiz.base.util.UtilURL.getOfbizHomeRelativeLocationFromFilePath " ,
" study.huhao.demo.adapters.outbound.persistence.blog.BlogPO.toDomainModel " ,
" study.huhao.demo.adapters.outbound.persistence.blog.BlogPO.toDomainModel " ,
" study.huhao.demo.adapters.outbound.persistence.blog.BlogPO.of " ,
" study.huhao.demo.infrastructure.persistence.blog.BlogPO.convertDomain "
]
},
"ServiceSummary" : {
"LifecycleMap" : null ,
"ReturnTypeMap" : {
"BookRepresentaion" : [
" com.phodal.pholedge.book.BookService.getBookById " ,
" com.phodal.pholedge.book.BookService.updateBook "
]
},
"RelatedMethod" : null
},
"UtilsSummary" : {},
"Summary" : {
"UtilsCount" : 1 ,
"ClassCount" : 64 ,
"MethodCount" : 161 ,
"StaticMethodCount" : 19
}
} coca todo
결과:
+------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+
| DATE | AUTHOR | MESSAGES | FILENAME | LINE |
+------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+
| 2019-12-09 | Cristian Maglie | happens on macosx, don't know | app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java | 118 |
| | | why | | |
| 2019-12-09 | Cristian Maglie | Make this a method of Theme | app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java | 233 |
| 2019-12-09 | Cristian Maglie | Do a better job in refreshing | app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java | 241 |
| | | only the needed element | | |
| 2019-12-09 | Cristian Maglie | Do a better job in refreshing | app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java | 273 |
| | | only the needed element | | |
| 2019-12-09 | Cristian Maglie | Make this a method of Theme | app/src/cc/arduino/contributions/libraries/ui/MultiLibraryInstallDialog.java | 149 |
| 2019-12-09 | Cristian Maglie | happens on macosx, don't know | app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCellJPanel.java | 183 |
| | | why | | |
| 2019-12-09 | Cristian Maglie | show error | app/src/processing/app/Base.java | 1440 |
| 2019-12-09 | Cristian Maglie | error when importing. ignoring | app/src/processing/app/Base.java | 2423 |
| | | :( | | |
| 2019-12-09 | Cristian Maglie | Improve / move error handling | app/src/processing/app/Editor.java | 1541 |
| 2019-12-09 | Cristian Maglie | Should be a Theme value? | app/src/processing/app/EditorHeader.java | 78 |
| 2019-12-09 | Cristian Maglie | Should be a Theme value? | app/src/processing/app/EditorStatus.java | 73 |
| 2019-12-09 | Cristian Maglie | Improve decoupling | app/src/processing/app/EditorTab.java | 465 |
+------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+```
coca suggest
결과:
+--------+------------------+--------------------------------+
| CLASS | PATTERN | REASON |
+--------+------------------+--------------------------------+
| Insect | factory | too many constructor |
| Bee | factory, builder | complex constructor, too |
| | | many constructor, too many |
| | | parameters |
+--------+------------------+--------------------------------+
coca tbs
결과
+---------------------+---------------------------------------------------------------+------+
| TYPE | FILENAME | LINE |
+---------------------+---------------------------------------------------------------+------+
| DuplicateAssertTest | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 107 |
| DuplicateAssertTest | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 41 |
| DuplicateAssertTest | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 63 |
| RedundantPrintTest | app/test/cc/arduino/i18n/I18NTest.java | 71 |
| RedundantPrintTest | app/test/cc/arduino/i18n/I18NTest.java | 72 |
| RedundantPrintTest | app/test/cc/arduino/i18n/I18NTest.java | 77 |
| DuplicateAssertTest | app/test/cc/arduino/net/PACSupportMethodsTest.java | 19 |
| DuplicateAssertTest | app/test/processing/app/macosx/SystemProfilerParserTest.java | 51 |
| DuplicateAssertTest | app/test/processing/app/syntax/PdeKeywordsTest.java | 41 |
| DuplicateAssertTest | app/test/processing/app/tools/ZipDeflaterTest.java | 57 |
| DuplicateAssertTest | app/test/processing/app/tools/ZipDeflaterTest.java | 83 |
| DuplicateAssertTest | app/test/processing/app/tools/ZipDeflaterTest.java | 109 |
+---------------------+---------------------------------------------------------------+------+ coca deps -p _fixtures/deps/maven_sample
결과:
+---------------------------+----------------------------------------+---------+
| GROUPID | ARTIFACTID | SCOPE |
+---------------------------+----------------------------------------+---------+
| org.flywaydb | flyway-core | |
| mysql | mysql-connector-java | runtime |
| org.springframework.cloud | spring-cloud-starter-contract-verifier | test |
+---------------------------+----------------------------------------+---------+
coca call -l 스튜디오 분석 lookup
Dodo : 문서 :
기술 부채
GO를 설치하십시오
brew install goenv
export GOROOT=/usr/local/opt/go/libexec
export GOPATH= $HOME /.go
export PATH= $PATH : $GOROOT /bin: $GOPATH /bin클론
git clone https://github.com/modernizing/coca
테스트 프레임 워크
go get github.com/onsi/ginkgo
go get github.com/onsi/gomega
데킬라를 기반으로 한 아치
Code Maat에서 영감을 얻은 GIT 분석
테스트 냄새 예제에서 영감을 얻은 나쁜 냄새를 테스트하십시오
@ 2019 Phodal Huang의 아이디어는 MPL 라이센스에 LICENSE 배포됩니다.