Coca adalah kotak alat yang dirancang untuk refactoring dan analisis sistem lama, termasuk grafik panggilan, analisis konsep, pohon API, pola desain menyarankan. Ini dapat menganalisis uji rasa buruk dalam kode, analisis modular, statistik jumlah garis, menganalisis panggilan dan dependensi, analisis GIT, dan rekonstruksi otomatis.
Alat Terkait: Coco adalah analisis DevOps yang efektif dan alat pengirim otomatis.
Versi Kotlin: Chapi
Panduan Migrasi (Versi Cina): "Panduan Refaktor dan Migrasi Sistem"
Terinspirasi oleh: Newlee & Tequila
Pemodelan refactoring:
Daftar fitur:
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
Persyaratan: GraphViz untuk File Dot ke Gambar (seperti SVG, PNG)
Cara termudah untuk mendapatkan Coca adalah dengan menggunakan salah satu binari rilis pra-dibangun yang tersedia untuk OSX, Linux, Windows di halaman rilis.
Anda juga dapat menginstal sendiri:
go install github.com/modernizing/coca@latest coca analysis
coca arch
Modul DSL Gradle Android Studio (header gabungan)
Perintah: coca arch -x "com.android.tools.idea.gradle.dsl" -H true
Android Studio Gradle DSL Modul Elements Bagian:
Perintah: coca arch -x "com.android.tools.idea.gradle.dsl.parser.elements"
coca bs -s typeContoh Hasil:
{
"dataClass" : [
{
"File" : " examples/api/BookController.java " ,
"BS" : " dataClass "
}
],
"lazyElement" : [
{
"File" : " examples/api/model/BookRepresentaion.java " ,
"BS" : " lazyElement "
}
]
} coca cloc
Hasil:
───────────────────────────────────────────────────────────────────────────────
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
───────────────────────────────────────────────────────────────────────────────
Hasil untuk JSON
coca cloc --by-file --format json
coca cloc ~ /intellij-community/android/ --by-directory --include-ext=java,kt --not-match= " .*(Test|Tests).(kt|java) "Hasil 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 output ke: coca_reporter/sort_cloc.json dan juga:
| 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.
Contoh Hasil:
coca api -f
Dengan hitungan
coca api -r com.phodal.pholedge. -c
atau multi paket:
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
Hasil:
+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+
| 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
Hasil Contoh:
+------------------+--------+
| 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
Hasil:
+------------+--------------------------------------------------------------------------+
| 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
Hasil:
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";
...
}
Mendukung:
coca refactor -R rename.coca -p src/main
coca refactor -m move.config -p .
coca evaluate
Hasil Arduino (versi lama):
+--------------------------------+-------+-----------------------+-------+-----------+
| 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 |
+--------------------------------+-------+-----------------------+-------+-----------+
Versi Baru:
| 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 |
Evaluasi.json contoh
{
"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
Hasil:
+------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+
| 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
Hasil:
+--------+------------------+--------------------------------+
| CLASS | PATTERN | REASON |
+--------+------------------+--------------------------------+
| Insect | factory | too many constructor |
| Bee | factory, builder | complex constructor, too |
| | | many constructor, too many |
| | | parameters |
+--------+------------------+--------------------------------+
coca tbs
Hasil
+---------------------+---------------------------------------------------------------+------+
| 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
Hasil:
+---------------------------+----------------------------------------+---------+
| GROUPID | ARTIFACTID | SCOPE |
+---------------------------+----------------------------------------+---------+
| org.flywaydb | flyway-core | |
| mysql | mysql-connector-java | runtime |
| org.springframework.cloud | spring-cloud-starter-contract-verifier | test |
+---------------------------+----------------------------------------+---------+
lookup Analisis Studio Android coca call -l
Dokumen Todo:
Hutang teknologi
Instal Go
brew install goEnv
export GOROOT=/usr/local/opt/go/libexec
export GOPATH= $HOME /.go
export PATH= $PATH : $GOROOT /bin: $GOPATH /binklon
git clone https://github.com/modernizing/coca
Kerangka kerja uji
go get github.com/onsi/ginkgo
go get github.com/onsi/gomega
Lengkungan berdasarkan tequila
Analisis git terinspirasi oleh kode maat
Uji bau buruk yang diilhami oleh contoh bau uji
@ 2019 Ide Phodal LICENSE .