"Christo" is an open-source tool to dynamically and safely retrieve code-coverage in Squeak. It provides a simple user interface, hiding the complexity of dynamic analysis and offers many powerful extensions compared to ’standard’ code coverage tools.
Download / How to get Christo
- Install by yourself:
- Load the package "PackageLoader" from SqueakSource (http://www.squeaksource.com/PackageLoader)
- Run "CoverageLoader new loadAll" in a workspace ... This will interactively install Christo and all its dependencies into your image.
- Download an all-inclusive image (running version, but likely not up-to-date)
- Public sources on SqueakSource:
- "http://www.squeaksource.com/Coverage"
Demo Stuff
Features of Version 0.1
- Code Coverage
- Flexible kernel
- Exchanging analysis technology, default: ByteSurgeon
- Collecting any kind of runtime data, for example senders, receivers, contex, arguments, ... default: senders/calls
- Technology independence. Currently supported: ByteSurgeon, JMethods/Ast-Interpretation, MethodWrappers, ObjectsAsMethods
- Method and sub-method coverage
- Dynamic links between tests and sources
- System coverage notification events
- Persistent live-cache of dynamic data
- Image-Safety, unsafe nodes don’t get method-wrapped
- User Interface
- Simple and intuitive browsers completely hiding the complexity of dynamic analysis
- Coverage-Configurations to quickly change the scopes of coverage
- Coloring of nodes, for example classes, methods, sub-method-nodes, ...
- 1-click coverage
- Tightly integrating unit testing, debugging, profiling and coverage
- Additional actions to support testing, coverage, ...
- Partial Ordering of Tests
- Browser and Visualization using GraphViz and Mondrian
- Graph/Image-Export for GraphViz
- Complexity View for debugging purposes
- Identification of the least/most abstract test
- (beta) (Delta) Debugger
- Kind of (delta) Debugger to more effectively and efficiently debug tests/sources
- Multiple different strategies exists
- (beta) Code Generation
- Test-code generation based on coverage-analysis (templates only)
- Visualization
- Coverage and Partial Ordering of Tests
- Various Visualizations to more effectively search for badly covered sources or complex/ abstract tests, ...
- Seaside
- Generation on Seaside-Server pages
- Dynamically updating
Known Bugs of Version 0.1
- Visualization-Scripts don’t work on all nodes -> Dictionary/Graph-Bug
- AST/JMethods
- Coloring of sub-method doesn’t work properly
- block variables are not annotated
- Changing Technology
- producing empty/nil results
- failing tests
- MethodWrappers are broken in 3.9
- Install/Uninstall instrumentation bug
- optimization had some very nasty side effects -> wrappers don’t work correctly, produce garbage in systemn dictionaries
Plans for future versions:
- Complete refactoring of the coverage-kernel
- Sub-method coverage as standard + coloring + dyn type information (args, ...)
- Smaller, lightweight, get rid of some high level code/abstractions making the analysis slow
- Full-tracing techs
- Unification of nodes (clean-up)
- Un-installation routines (fix and accelerate)
- Improve safety, but base don technology, not global
- Scoped Coverage
- Gepetto 2 and Object Flow !!!
- User Interface
- Adapt to the latest OBs
- Better, faster browsers (old OBs are slow!)
- Better actions and visualizations (focus)
- Even tighter integation into the coding/testing process
- More interactivity/agility (browsers, visualizations, debugging, ...)
- Enhance the cache with the graph-based dictionary
- More transparency
- Server-Processes
- Seaside components, visualizaions
- Ansync-Coverage / "Multithreaded" anaylsis (?)
- Debugging
- Enhancing the Delta Debugger, maybe implementing a real Delta Debugger
- Partial-Ordering
- Better graphs, Layouts, ...
- Code Generation
- Real code/test analysis and real code generation
- Installation
References
Related Tools