- Notifications
You must be signed in to change notification settings - Fork115
Coca is a toolbox which is design for legacy system refactoring and analysis, includes call graph, concept analysis, api tree, design patterns suggest. Coca 是一个用于系统重构、系统迁移和系统分析的工具箱。它可以分析代码中的测试坏味道、模块化分析、行数统计、分析调用与依赖、Git 分析以及自动化重构等。
License
phodal/coca
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Coca is a toolbox which is design for legacy system refactoring and analysis, includes call graph, concept analysis, api tree, design patterns suggest.Coca 是一个用于系统重构、系统迁移和系统分析的工具箱。它可以分析代码中的测试坏味道、模块化分析、行数统计、分析调用与依赖、Git 分析以及自动化重构等。
Related Tools:Coco is an effective DevOps analysis and auto-suggest tool.
Kotlin version:Chapi
Migration Guide (Chinese Version): 《系统重构与迁移指南》
Refactoring Modeling:
- Languages Support: Java (full features)
Features List:
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 versionRequirements:graphviz for dot file to image (such as svg, png)
The easiest way to get coca is to use one of the pre-built release binaries which are available for OSX, Linux, Windows on therelease page.
You can also install yourself :
go install github.com/modernizing/coca@latest
coca analysiscoca archAndroid Studio Gradle DSL Module (merge header)
command:coca arch -x "com.android.tools.idea.gradle.dsl" -H true
Android Studio Gradle DSL Module Elements Part:
command:coca arch -x "com.android.tools.idea.gradle.dsl.parser.elements"
coca bs -stypeExamples Result:
{"dataClass": [ {"File":"examples/api/BookController.java","BS":"dataClass" } ],"lazyElement": [ {"File":"examples/api/model/BookRepresentaion.java","BS":"lazyElement" } ]}coca clocResults:
───────────────────────────────────────────────────────────────────────────────Language Files Lines Blanks Comments Code Complexity───────────────────────────────────────────────────────────────────────────────Go 58 31763 7132 890 23741 2847Java 44 971 208 21 742 62Markdown 8 238 75 0 163 0Gherkin Specificati… 2 32 2 16 14 0Document Type Defin… 1 293 36 0 257 0License 1 201 32 0 169 0SQL 1 2 0 0 2 0SVG 1 199 0 34 165 0Shell 1 3 1 1 1 0XML 1 13 0 0 13 0gitignore 1 61 8 4 49 0───────────────────────────────────────────────────────────────────────────────Total 119 33776 7494 966 25316 2909───────────────────────────────────────────────────────────────────────────────Estimated Cost to Develop $803,822Estimated Schedule Effort 14.120551 monthsEstimated People Required 6.743156───────────────────────────────────────────────────────────────────────────────Results to json
coca cloc --by-file --format jsoncoca cloc~/intellij-community/android/ --by-directory --include-ext=java,kt --not-match=".*(Test|Tests)\.(kt|java)"
results csv:
module,summaryadt-branding,169adt-testutils,257adt-ui,21987adt-ui-model,3450android,361270android-adb,497android-common,3280android-debuggers,3030android-kotlin,8816android-lang,24796android-lang-databinding,6392android-layout-inspector,2533...coca cloc~/intellij-community/android/designer/src/com/android/tools/idea --top-file --top-size 10output to:coca_reporter/sort_cloc.json and also:
| 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.Examples Results:
coca api -fWith Count
coca api -r com.phodal.pholedge. -cor multi package:
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 -tResults:
+---------------------------------------------------------------------------------------------------------------------+-----------+-------------+| 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 conceptResults Examples:
+------------------+--------+| 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 countResults:
+------------+--------------------------------------------------------------------------+| 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.getResults:
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";...}support:
- rename
- move
- remove unused import
- remove unused class
coca refactor -R rename.coca -p src/maincoca refactor -m move.config -p .coca evaluateArduino Results(Old Version):
+--------------------------------+-------+-----------------------+-------+-----------+| 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 |+--------------------------------+-------+-----------------------+-------+-----------+New Version:
| 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 |Evaluate.json examples
{"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 todoresults:
+------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+| 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 suggestresults:
+--------+------------------+--------------------------------+| CLASS | PATTERN | REASON |+--------+------------------+--------------------------------+| Insect | factory | too many constructor || Bee | factory, builder | complex constructor, too || | | many constructor, too many || | | parameters |+--------+------------------+--------------------------------+coca tbsresults
+---------------------+---------------------------------------------------------------+------+| 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_sampleresults:
+---------------------------+----------------------------------------+---------+| GROUPID | ARTIFACTID | SCOPE |+---------------------------+----------------------------------------+---------+| org.flywaydb | flyway-core | || mysql | mysql-connector-java | runtime || org.springframework.cloud | spring-cloud-starter-contract-verifier | test |+---------------------------+----------------------------------------+---------+Android Studio Analysis Examples. Call withlookup:coca call -l
- bad smell support
- sort method size
- type
- longParameterList
- longMethod
- repeatedSwitches
- complexIf
- largeClass
- refusedBequest
- dataClass
- CLOC
- HTTP API Visualization
- Spring Support
- @Service Support
- API Call Size
- Git
- Revs Counts
- Summary
- git-quick-stats
- Concept
- words NLP
- to domain
- Call & rcall graph
- Count Refs
- AutoRefactor
- remove unused
- move files
- Evaluate
- nullable count
- static count
- method num /length count
- Todo Summary
- Todo with History & Author
- Suggest API for Design Patterns
- factory pattern
- strategy
- builder
- cycle-deps -> adapter / agency
- bad patterns
- singleton
- Evaluate API
- Average Method Length
- Average Class Method Count
- Tests
- Testable?
- Test badsmell -> list [https://testsmells.github.io/pages/testsmells.html]
- IgnoreTest: @Ingore
- EmptyTest: not call in test
- RedundantPrintTest: system.out.println
- SleepyTest: Time.sleep
- RedundantAssertionTest: assertTrue(True)
- UnknownTest: not assert
- DuplicateAssertTest: assert > 5
- TestersOnly: method only call by test
- CrossBorderTest: test method which not in system
- General Fixture: JUnit classes having at least one method not using the entire test fixture defined in the setUp() method
- Arch
- Architecture Visualization
- Architecture Guard
- DSL Design
- Tech Debt from Source Code
- auto create story
- TBD
- Comment Analysis
- incorrect comment ?http://das.encs.concordia.ca/uploads/2018/02/Maldonado_thesis.pdf
- Comment Analysis
Online Code AnalysisWASM supportexpose WASM APIGitHub search code
Pluggableplugin support (Windows Issues)
- Dependence Analysis
- Deps Related Counts
- 3rd-party analysis XML or Groovy Scripts
- Groovy Support
- migrate to Golang Styles
- Story Cmd
- Auto create refactor story
- Clean Code Suggest
- JavaScript Versionclean-code-javascript
- More CodeSmells
- SourceDesigniteJava
Documents Todo:
- Docs
- Lifecycle for new projects: evaluate (cloc, bad smell, api, git, todo) -> design -> patterns (suggest) -> refactoring ()
- Date Collections
- monolithic
- microservice
- big data
Tech Debt
- Test for Windows
- Duplicate Code
- cmd/ -> user builder to refactoring
Install Go
brew install go
Env
export GOROOT=/usr/local/opt/go/libexecexport GOPATH=$HOME/.goexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin
clone
git clone https://github.com/modernizing/cocaTest Frameworks
go get github.com/onsi/ginkgogo get github.com/onsi/gomegaArch based onTequila
Git Analysis inspired byCode Maat
Test bad smells inspired byTest Smell Examples
@ 2019 APhodal Huang'sIdea. This code is distributed under the MPL license. SeeLICENSE in this directory.
About
Coca is a toolbox which is design for legacy system refactoring and analysis, includes call graph, concept analysis, api tree, design patterns suggest. Coca 是一个用于系统重构、系统迁移和系统分析的工具箱。它可以分析代码中的测试坏味道、模块化分析、行数统计、分析调用与依赖、Git 分析以及自动化重构等。
Topics
Resources
License
Code of conduct
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.