-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
A standard way to pass around extracted execution info #265
Comments
With this, maybe having symbolic information passing around is also possible? This would enlarge the application scope of Darjeeling a lot feels like. |
I like this idea. I suppose that learned invariants (e.g., mined by Daikon) or data traces would fall under the same umbrella. It would be great if we could extend this to symbolic information, too. It sounds like you have a rough API de# mind. Would you mind identifying some of the interfaces (e.g., Executor and Execution?) and their most important methods? |
I actually think we can just go for single class for being responsible for one type of execution info or one source. Two designs here:
The logic would be clear.
This would be efficient to execute. Also, might be more efficient to implement. One example is that one source could be something like KLEE. It would make sense if we simply group the execution info getting from one KLEE run into one instance. On the other hand, it is generally required to extract different kinds of execution info that could be generated in only one run. If we go for the 1st design, it's rather difficult to reuse the same execution to extract all possible info wanted. For the concrete interface in the package, I think having Take gcov as an example (I haven't been using for few years, I might be mistaken about some details), instrument would be Take KLEE as an example, feels like only I feel one software architecture challenge is how to make not interfering execution info generation processes able to be run concurrently, but the implementation remains elegant. e.g. while generating the coverage info, we might also generate the test case passing/failing info concurrently. @ChrisTimperley Maybe would be great if you can comment on this. For the concrete design, I haven't had a very clear view in mind yet, I can give more feedback next week if you wish. :) But, for #268 , it is required to be able to trace the value flow during test case executions, as far as I think. |
@ChrisTimperley Hey Chris, would you like to comment or agree/disagree with this? As I plan to have demo running soon, I might also need to determine whether to take this generic approach versus a hard-coded fork for resolving #268 , taking time into consideration. Thanks |
I think that this is a good idea that would extend Darjeeling's capabilities, and that the API you sketched above is a good starting point. Based on my understanding, it seems that we need at least two new interfaces:
Thoughts? |
From above, sounds like This proposed solution would be easier to do and less difficult to extend than my previous proposals. I am fine with this. |
For many repair approaches, gathering extra execution information is required. One example is to determine the test-equivalence relationships between tests. In
Darjeeling.coverage
package, it provides a class for gathering coverage info. I feel we can make a more generic packageDarjeeling.execution
, we can have acollector
-like class under it, then the coverage package can be a subpackage having its classes inherited from the classes inDarjeeling.execution
. Essentially,Darjeeling.execution
is just a generic version of the currentDarjeeling.coverage
. WithDarjeeling.execution
, it allows Darjeeling to support more repair approaches requiring extra execution info extractions. Then, we simply treat coverage as one kind of execution info that helps the repair process while there can be a few of them.@ChrisTimperley Would you like to comment on this design? If it sounds good, are you ok to do these changes? (maybe prioritize for our project)
The text was updated successfully, but these errors were encountered: