460 likes | 565 Vues
IVCon is a graphical user interface tool designed for modularizing crosscutting concerns (CCCs) in software development. It separates functionalities that are typically scattered across code, enhancing code organization and maintainability. Users can toggle between woven and unwoven views to visualize how different segments of code implement various concerns. The tool allows for the assignment of scattered code to specific concerns and supports many-to-many relationships. By enforcing token-level granularity, IVCon ensures precise concern assignment, facilitating easier code management for developers.
E N D
IVCon: A GUI-based Tool for Visualizing and Modularizing Crosscutting Concerns NalinSaigal, Jay Ligatti
Introduction • Code modularization provides software-engineering benefits • Modularizing code helps separate different functionalities of software from one another
More Specifically… • All the code implementing one functionality, which otherwise might be scattered, gets organized into the same module, e.g., function, class, package, or aspect • The programmer can deal with all invariants of one functionality in one place • This makes code easier to write, locate, understand, and maintain GUI Modularize Security Authentication Networking
Stack Example • We can modularize the operations being performed here by defining a class called stack. int stack[MAX_SIZE]; int size = 0; ... //Pushing a onto stack stack[size] = a; size++; //Pushing b onto stack stack[size] = b; size++; //Popping b size--; int a1 = stack[size]; //Popping a size--; int a2 = stack[size]; ...
Stack Example class stack { int a[MAX_SIZE]; int size = 0; void push(int data) { stack[size] = data; size++; } int pop() { size--; return stack[size]; } }my_stack; ... my_stack.push(a); my_stack.push(b); int a1 = my_stack.pop(); int a2 = my_stack.pop(); ... Application developer’s code Modularized stack implementation • An application developer does not need to know how the stack is implemented • We can make changes to the stack implementation without even letting the application developer know
Stack Example class stack { int a[MAX_SIZE]; int size = 0; void push(int data) { if (size == MAX_SIZE–1) printErr(“Overflow”); stack[size] = data; size++; } int pop() { if (size == 0) printErr(“Underflow”); size--; return stack[size]; } }my_stack; ... my_stack.push(a); my_stack.push(b); int a1 = my_stack.pop(); int a2 = my_stack.pop(); ... Observe that code written by the application developer doesn’t change
Problem • Conventionally, software engineers try to separate code segments that are orthogonal in their functionality into distinct modules • In practice, this doesn’t happen • Example • This code implements login, security, GUI, and authentication concerns: JOptionPane.showMessageDialog(null,“Login Attempt Failed.”,“Error”,JOptionPane.ERROR_MESSAGE); • Which module out of login, security, GUI, and authentication should this code be present in? • PeriTarr et al. call this problem the “tyranny of dominant decomposition”
Converse Problem • Previous problem: one code segment may implement many concerns • Converse problem: one concern may be implemented by many code segments(i.e., the concern is scattered) • If the code implementing C is scattered throughout code implementing other concerns, we say that C crosscuts through other functional concerns
Example String passWord =(String)JOptionPane.showInputDialog(...); boolean allow = this.authenticate(passWord); File file = new File(“output.log”); if (allow) { file.write(“Access granted.”); file.close(); } else { file.write(“Access Denied”); file.close(); return; } • The security concern crosscuts the rest of the code • Therefore, the security concern is called a CrossCutting Concern (CCC).
Example • A security engineer would have to go through the whole program to locate code that implements security • However, if code is isolated, the security engineer only needs to locate the security module Security
IVCon (Inline Visualization of Concerns) • GUI-based tool to modularize CCCs. • Users can switch back and forth between two equivalent views of their code: • Woven view • Unwoven view • Users can also edit code in both these views
1. Woven view: Displays program code in colors that indicate which concerns various code segments implement
2. Unwoven view: Displays code in two panels, one showing the core of the program, and the other showing all the modularized concerns (each displayed in isolation)
IVCon Feature: Relationships between Concerns and Code • Users can assign scattered code to the same concern • The same code can be assigned to multiple concerns • IVCon allows users to define many-to-many relationships between concerns and code
Another IVCon Feature: Concern-assignment Granularity • IVCon enforces token-level granularity in concern assignments • Code assigned to a concern must begin and end at the beginning and ending of language-level tokens accessLog.append("About to read from file “ + this.toString()); accessLog.append("About to read from file “ + this.toString()); accessLog.append("About to read from file “ + this.toString()); X accessLog.append("About to read from file “ + this.toString()); X accessLog.append("About to read from file “ + this.toString());
Motivation for Token-level Granularity • Finer granularity levels are inappropriate because tokens are the core semantic units of programming languages • It won’t make sense to start concerns from the middle of a token • Coarser granularity in concern assignment would reduce precision in concern assignments
Outline • Introduction • Motivation • Related work • User Interface • Woven view • Unwoven view • Implementation • Data structures • Performance Evaluation • Conclusion and Future Work
Aspect Advice Joinpoints Related Work • IVCon relates most closely to Aspect-oriented programming (AOP) and aspect-visualization tools • AOP strives to ease the specification and manipulation of CCCs in software • AOPLs use aspects to do so Code that implements CCCs Locations in program where the advice should be executed
Related Work: AOPLs • Typical Aspect-oriented program: Aspects AOPL Compiler Core program • IVCon’s unwoven view corresponds to a programmer’s view of an aspect-oriented program • IVCon’s woven view corresponds to the runtime view of the aspect-oriented program Programmer’s view View during execution
Related Work: Aspect-visualization Tools • Unlike existing tools, IVCon does all of the following: • Provides dual views (woven and unwoven) of user code • Enforces token-level granularity in concern assignments • Isolates concerns into modules • Enables users to define many-to-many relationships between concerns and code • Provides a GUI
Outline • Introduction • Motivation • Related work • User Interface • Woven view • Unwoven view • Implementation • Data structures • Performance Evaluation • Conclusion and Future Work
Woven View Woven-body panel is where users write and view their complete code.
Woven View Concern-legend panel lists all the concerns defined by the user
Woven View Concerns-at-current-position panel displays the concerns implemented by the code at the current cursor position.
Other Operations in IVCon’s Woven View • Edit concerns (name and/or color) • De-assign concerns from code. • Remove concerns • Rename code regions • Change multi-concern background
Outline • Introduction • Motivation • Related work • User Interface • Woven view • Unwoven view • Implementation • Data structures • Performance Evaluation • Conclusion and Future Work
Unwoven View • The concern-legend panel and the concerns-at-current-position panel remain the same as in the woven view • The woven-body panel gets divides into two panels: the unwoven-body panel, and the unwoven-concerns panel
Unwoven View Unwoven-body panel displays the core of the user’s program i.e., code that has not been assigned to any concerns
Unwoven view Unwoven-concerns panel shows each concern in an isolated module
Outline • Introduction • Motivation • Related work • User Interface • Woven view • Unwoven view • Implementation • Data structures • Performance Evaluation • Conclusion and Future Work
Data Structures • IVCon stores information about concern assignments in three key data structures: • regionMap • concernMap • regionTree
regionTree (R-tree) • R-trees dynamically store data about potentially overlapping regions in space. • Upon querying about a region r, an R-tree can efficiently return the set of stored regions that overlap r. • We use R-trees to determine the regions that overlap the current cursor position. • From those regions, regionMap tells us the concerns assigned to the current cursor position.
Outline • Introduction • Motivation • Related work • User Interface • Woven view • Unwoven view • Implementation • Data structures • Performance Evaluation • Conclusion and Future Work
Performance Evaluation • Tested IVCon by assigning code to concerns in three of IVCon’s source-code files: • IVCON.java • FileUtilities.java • ConcernManipulation.java • Also, created an impractically large file (StressTest.java) of 100,000 lines, each containing 20 randomly generated single-character tokens
Test-file Characteristics • Measured time taken for the following operations: assign code to a concern, edit a concern, remove a concern, weaving, and unweaving
Performance Evaluation • IVCon performed all operations tolerably quickly on reasonably-sized files.
Outline • Introduction • Motivation • Related work • User Interface • Woven view • Unwoven view • Implementation • Data structures • Performance Evaluation • Conclusion and Future Work
Conclusion • IVCon attempts to help users conveniently create, examine, and modify code in the presence of crosscutting concerns • IVCon differs from existing aspect-visualization tools by providing a combination of: • Translations between woven and unwoven views • Token-level granularity in concern assignment • Isolation of concerns into distinct modules • Many-to-many relationships between concerns and code • GUI designed to make all of the above convenient
Future Work • Case study: Test IVCon’s usability by using IVCon to extend IVCon • New features to add in case study • Search for text in code (ctrl-f) • Handle multiple source-code files simultaneously • Display flags in the woven view • Use tooltips to display concerns implemented by the code at the current cursor position
References [1] C. Kastner. CIDE: Decomposing legacy applications into features. In Proceedings of the 11th International Software Product Line Conference (SPLC), second volume (Demonstration), pages 149–150, 2007. [2] H. Ossher and P. Tarr. Hyper/J: Multi-dimensional separation of concerns for Java. In Proceedings of the International Conference on Software Engineering, pages 734–737, 2000. [3] T. Panas, J. Karlsson, and M. Hogberg. Aspect-jEdit for inline aspect support. In Proceedings of the Third German Workshop on Aspect Oriented Software Development, 2003. [4] M. Shonle, J. Neddenriep, andW. Griswold. AspectBrowser for eclipse: A case study in plug-in retargeting. In Proceedings of the 2004 OOPSLA workshop on eclipse technology eXchange, pages 78–82, 2004. [5] The Visualiser, 2008. http://www.eclipse.org/ajdt/visualiser/. [6] M. Yuen, M. E. Fiuczynski, R. Grimm, Y. Coady, and D. Walker. Making extensibility of system software practical with the C4 toolkit. In Proceedings of the Workshop on Software Engineering Properties of Languages and Aspect Technologies, March 2006.