The Community for Technology Leaders
RSS Icon
Subscribe
Issue No.05 - May (2013 vol.39)
pp: 613-637
Martin P. Robillard , McGill University, Montréal
Eric Bodden , Technische Universität Darmstadt, Darmstadt
David Kawrykow , McGill University, Montréal
Mira Mezini , Technische Universität Darmstadt, Darmstadt
Tristan Ratchford , McGill University, Montréal
ABSTRACT
Frameworks and libraries offer reusable and customizable functionality through Application Programming Interfaces (APIs). Correctly using large and sophisticated APIs can represent a challenge due to hidden assumptions and requirements. Numerous approaches have been developed to infer properties of APIs, intended to guide their use by developers. With each approach come new definitions of API properties, new techniques for inferring these properties, and new ways to assess their correctness and usefulness. This paper provides a comprehensive survey of over a decade of research on automated property inference for APIs. Our survey provides a synthesis of this complex technical field along different dimensions of analysis: properties inferred, mining techniques, and empirical results. In particular, we derive a classification and organization of over 60 techniques into five different categories based on the type of API property inferred: unordered usage patterns, sequential usage patterns, behavioral specifications, migration mappings, and general information.
INDEX TERMS
Itemsets, Context, Association rules, Protocols, Programming, Software engineering, API usage pattern, API property, programming rules, specifications, protocols, interface, data mining, pattern mining, API evolution
CITATION
Martin P. Robillard, Eric Bodden, David Kawrykow, Mira Mezini, Tristan Ratchford, "Automated API Property Inference Techniques", IEEE Transactions on Software Engineering, vol.39, no. 5, pp. 613-637, May 2013, doi:10.1109/TSE.2012.63
REFERENCES
[1] M. Robillard and R. DeLine, "A Field Study of API Learning Obstacles," Empirical Software Eng., vol. 16, no. 6, pp. 703-732, 2011.
[2] D. Engler, D.Y. Chen, S. Hallem, A. Chou, and B. Chelf, "Bugs as Deviant Behavior: A General Approach to Inferring Errors in Systems Code," Proc. 18th ACM Symp. Operating Systems Principles, pp. 57-72, 2001.
[3] M.D. Ernst, J. Cockrell, W.G. Griswold, and D. Notkin, "Dynamically Discovering Likely Program Invariants to Support Program Evolution," Proc. 21st ACM/IEEE Int'l Conf. Software Eng., pp. 213-224, 1999.
[4] R. Holmes, R.J. Walker, and G.C. Murphy, "Approximate Structural Context Matching: An Approach to Recommend Relevant Examples," IEEE Trans. Software Eng., vol. 32, no. 12, pp. 952-970, Dec. 2006.
[5] H. Zhong, T. Xie, L. Zhang, J. Pei, and H. Mei, "MAPO: Mining and Recommending API Usage Patterns," Proc. 23rd European Conf. Object-Oriented Programming, pp. 318-343, 2009.
[6] N. Bjørner, A. Browne, and Z. Manna, "Automatic Generation of Invariants and Intermediate Assertions," Theoretical Computer Science, vol. 173, pp. 49-87, 1997.
[7] M.B. Dwyer, G.S. Avrunin, and J.C. Corbett, "Patterns in Property Specifications for Finite-State Verification," Proc. 21st ACM/IEEE Int'l Conf. Software Eng., pp. 411-420, 1999.
[8] A. Michail, "Data Mining Library Reuse Patterns in User-Selected Applications," Proc. 14th IEEE Int'l Conf. Automated Software Eng., pp. 24-33, 1999.
[9] A. Michail, "Data Mining Library Reuse Patterns Using Generalized Association Rules," Proc. 22nd ACM/IEEE Int'l Conf. Software Eng., pp. 167-176, 2000.
[10] Z. Li and Y. Zhou, "PR-Miner: Automatically Extracting Implicit Programming Rules and Detecting Violations in Large Software Code," Proc. Joint Meeting 10th European Software Eng. Conf. and 13th ACM SIGSOFT Int'l Symp. Foundations of Software Eng., pp. 306-315, 2005.
[11] B. Livshits and T. Zimmermann, "DynaMine: Finding Common Error Patterns by Mining Software Revision Histories," Proc. Joint Meeting 10th European Software Eng. Conf. and 13th ACM SIGSOFT Int'l Symp. Foundations of Software Eng., pp. 296-305, 2005.
[12] M. Bruch, T. Schäfer, and M. Mezini, "FrUiT: IDE Support for Framework Understanding," Proc. OOPSLA Eclipse Technology eXchange, pp. 55-59, 2006.
[13] M. Bruch, M. Monperrus, and M. Mezini, "Learning from Examples to Improve Code Completion Systems," Proc. Joint Meeting Seventh European Software Eng. Conf. and Seventh ACM SIGSOFT Symp. Foundations of Software Eng., pp. 213-222, 2009.
[14] M. Monperrus, M. Bruch, and M. Mezini, "Detecting Missing Method Calls in Object-Oriented Software," Proc. 24th European Conf. Object-Oriented Programming, pp. 2-25, 2010.
[15] M.P. Robillard, R.J. Walker, and T. Zimmermann, "Recommendation Systems for Software Engineering," IEEE Software, vol. 27, no. 4, pp. 80-86, July/Aug. 2010.
[16] R. Srikant and R. Agrawal, "Mining Generalized Association Rules," Proc. 21st Int'l Conf. Very Large Data Bases, pp. 407-419, 1995.
[17] R. Agrawal and R. Srikant, "Fast Algorithms for Mining Association Rules in Large Databases," Proc. 20th Int'l Conf. Very Large Data Bases, pp. 487-499, 1994.
[18] G.I. Webb and S. Zhang, "Beyond Association Rules: Generalized Rule Discovery," Knowledge Discovery and Data Mining, Kluwer Academic Publishers, 2003.
[19] G. Grahne and J. Zhu, "Efficiently Using Prefix-Trees in Mining Frequent Item Sets," Proc. Workshop Frequent Item Set Mining Implementations, 2003.
[20] G. Ammons, R. Bodík, and J.R. Larus, "Mining Specifications," Proc. 29th ACM SIGPLAN-SIGACT Symp. Principles of Programming Languages, pp. 4-16, 2002.
[21] J. Whaley, M.C. Martin, and M.S. Lam, "Automatic Extraction of Object-Oriented Component Interfaces," Proc. ACM Int'l Symp. Software Testing and Analysis, pp. 218-228, 2002.
[22] J. Yang and D. Evans, "Automatically Inferring Temporal Properties for Program Evolution," Proc. IEEE Int'l Symp. Software Reliability Eng., pp. 340-351, 2004.
[23] J. Yang and D. Evans, "Dynamically Inferring Temporal Properties," Proc. Fifth ACM SIGPLAN-SIGSOFT Workshop Program Analysis for Software Tools and Eng., pp. 23-28, 2004.
[24] R. Alur, P. Černý, P. Madhusudan, and W. Nam, "Synthesis of Interface Specifications for Java Classes," Proc. 32nd ACM SIGPLAN-SIGACT Symp. Principles of Programming Languages, pp. 98-109, 2005.
[25] D. Mandelin, L. Xu, R. Bodík, and D. Kimelman, "Jungloid Mining: Helping to Navigate the API Jungle," Proc. ACM SIGPLAN Conf. Programming Language Design and Implementation, pp. 48-61, 2005.
[26] M. Salah, T. Denton, S. Mancoridis, A. Shokoufandeh, and F.I. Vokolos, "Scenariographer: A Tool for Reverse Engineering Class Usage Scenarios from Method Invocation Sequences," Proc. 21st IEEE Int'l Conf. Software Maintenance, pp. 155-164, 2005.
[27] W. Weimer and G.C. Necula, "Mining Temporal Specifications for Error Detection," Proc. 11th Int'l Conf. Tools and Algorithms for the Construction and Analysis of Systems, pp. 461-476, 2005.
[28] M. Acharya and T. Xie, "Mining API Error-Handling Specifications from Source Code," Proc. 12th Int'l Conf. Fundamental Approaches to Software Eng., pp. 370-384, 2009.
[29] M. Acharya, T. Xie, and J. Xu, "Mining Interface Specifications for Generating Checkable Robustness Properties," Proc. 17th IEEE Int'l Symp. Software Reliability Eng., pp. 311-320, 2006.
[30] V. Dallmeier, C. Lindig, A. Wasylkowski, and A. Zeller, "Mining Object Behavior with ADABU," Proc. Int'l Workshop Dynamic Systems Analysis, pp. 17-24, 2006.
[31] C. Liu, E. Ye, and D.J. Richardson, "LtRules: An Automated Software Library Usage Rule Extraction Tool," Proc. 28th ACM/IEEE Int'l Conf. Software Eng., pp. 823-826, 2006.
[32] C. Liu, E. Ye, and D.J. Richardson, "Software Library Usage Pattern Extraction Using a Software Model Checker," Proc. 21st IEEE/ACM Int'l Conf. Automated Software Eng., 2006.
[33] T.A. Henzinger, R. Jhala, R. Majumdar, and G. Sutre, "Software Verification with BLAST," Proc. 10th Int'l Conf. Model Checking Software, pp. 235-239, 2003.
[34] D. Lo and S. Khoo, "SMArTIC: Towards Building an Accurate, Robust and Scalable Specification Miner," Proc. 14th ACM SIGSOFT Int'l Symp. Foundations of Software Eng., pp. 265-275, 2006.
[35] J. Yang, D. Evans, D. Bhardwaj, T. Bhat, and M. Das, "Perracotta: Mining Temporal API Rules from Imperfect Traces," Proc. 28th ACM/IEEE Int'l Conf. Software Eng., pp. 282-291, 2006.
[36] M. Acharya, T. Xie, J. Pei, and J. Xu, "Mining API Patterns as Partial Orders from Source Code: From Usage Scenarios to Specifications," Proc. Sixth Joint Meeting European Software Eng. Conf. and ACM SIGSOFT Int'l Symp. Foundations of Software Eng., pp. 25-34, 2007.
[37] H. Kagdi, M.L. Collard, and J.I. Maletic, "An Approach to Mining Call-Usage Patterns with Syntactic Context," Proc. 22nd IEEE/ACM Int'l Conf. Automated Software Eng., pp. 457-460, 2007.
[38] J. Quante and R. Koschke, "Dynamic Protocol Recovery," Proc. Working Conf. Reverse Eng., pp. 219-228, 2007.
[39] M.K. Ramanathan, A. Grama, and S. Jagannathan, "Static Specification Inference Using Predicate Mining," Proc. ACM SIGPLAN Conf. Programming Language Design and Implementation, pp. 123-134, 2007.
[40] M.K. Ramanathan, A. Grama, and S. Jagannathan, "Path-Sensitive Inference of Function Precedence Protocols," Proc. 29th ACM/IEEE Int'l Conf. Software Eng., pp. 240-250, 2007.
[41] S. Shoham, E. Yahav, S. Fink, and M. Pistoia, "Static Specification Mining Using Automata-Based Abstractions," Proc. ACM Int'l Symp. Software Testing and Analysis, pp. 174-184, 2007.
[42] S. Thummalapenta and T. Xie, "Parseweb: A Programmer Assistant for Reusing Open Source Code on the Web," Proc. 22nd IEEE/ACM Int'l Conf. Automated Software Eng., pp. 204-213, 2007.
[43] A. Wasylkowski, A. Zeller, and C. Lindig, "Detecting Object Usage Anomalies," Proc. Sixth Joint Meeting European Software Eng. Conf. and ACM SIGSOFT Int'l Symp. Foundations of Software Eng., pp. 35-44, 2007.
[44] N. Walkinshaw, K. Bogdanov, M. Holcombe, and S. Salahuddin, "Reverse Engineering State Machines by Interactive Grammar Inference," Proc. Working Conf. Reverse Eng., pp. 209-218, 2007.
[45] N. Walkinshaw and K. Bogdanov, "Inferring Finite-State Models with Temporal Constraints," Proc. 23rd IEEE/ACM Int'l Conf. Automated Software Eng., pp. 248-257, 2008.
[46] M. Gabel and Z. Su, "Javert: Fully Automatic Mining of General Temporal Properties from Dynamic Traces," Proc. 16th ACM SIGSOFT Int'l Symp. Foundations of Software Eng., pp. 339-349, 2008.
[47] D. Lorenzoli, L. Mariani, and M. Pezzè, "Automatic Generation of Software Behavioral Models," Proc. 30th ACM/IEEE Int'l Conf. Software Eng., pp. 501-510, 2008.
[48] D. Lo, S.C. Khoo, and C. Liu, "Mining Temporal Rules for Software Maintenance," J. Software Maintenance and Evolution: Research and Practice, vol. 20, no. 4, pp. 227-247, 2008.
[49] S. Sankaranarayanan, F. Ivanči, and A. Gupta, "Mining Library Specifications Using Inductive Logic Programming," Proc. 13th ACM/IEEE Int'l Conf. Software Eng., pp. 131-140, 2008.
[50] H. Zhong, L. Zhang, and H. Mei, "Inferring Specifications of Object Oriented APIs from API Source Code," Proc. 15th Asia-Pacific Software Eng. Conf., pp. 221-228, 2008.
[51] M. Gabel and Z. Su, "Symbolic Mining of Temporal Specifications," Proc. 30th ACM/IEEE Int'l Conf. Software Eng., pp. 51-60, 2008.
[52] D. Lo, G. Ramalingam, V.P. Ranganath, and K. Vaswani, "Mining Quantified Temporal Rules: Formalism, Algorithms, and Evaluation," Proc. Working Conf. Reverse Eng., pp. 62-71, 2009.
[53] T.T. Nguyen, H.A. Nguyen, N.H. Pham, J.M. Al-Kofahi, and T.N. Nguyen, "Graph-Based Mining of Multiple Object Usage Patterns," Proc. Seventh Joint Meeting European Software Eng. Conf. and ACM SIGSOFT Symp. Foundations of Software Eng., pp. 383-392, 2009.
[54] M. Pradel and T.R. Gross, "Automatic Generation of Object Usage Specifications from Large Method Traces," Proc. 24th IEEE/ACM Int'l Conf. Automated Software Eng., pp. 371-382, 2009.
[55] M. Pradel, "Dynamically Inferring, Refining, and Checking API Usage Protocols," Proc. 24th ACM SIGPLAN Conf. Object-Oriented Programming Systems, Languages and Applications—Companion, pp. 773-774, 2009.
[56] S. Thummalapenta and T. Xie, "Mining Exception-Handling Rules as Sequence Association Rules," Proc. 31st ACM/IEEE Int'l Conf. Software Eng., pp. 496-506, 2009.
[57] S. Thummalapenta and T. Xie, "Alattin: Mining Alternative Patterns for Detecting Neglected Conditions," Proc. 24th IEEE/ACM Int'l Conf. Automated Software Eng., pp. 283-294, 2009.
[58] A. Wasylkowski and A. Zeller, "Mining Temporal Specifications from Object Usage," Proc. 24th IEEE/ACM Int'l Conf. Automated Software Eng., pp. 295-306, 2009.
[59] H. Zhong, L. Zhang, T. Xie, and H. Mei, "Inferring Resource Specifications from Natural Language API Documentation," Proc. 24th IEEE/ACM Int'l Conf. Automated Software Eng., pp. 307-318, 2009.
[60] M. Gabel and Z. Su, "Online Inference and Enforcement of Temporal Properties," Proc. 32nd ACM/IEEE Int'l Conf. Software Eng., pp. 15-24, 2010.
[61] N. Gruska, A. Wasylkowski, and A. Zeller, "Learning from 6,000 Projects: Lightweight Cross-Project Anomaly Detection," Proc. 19th ACM Int'l Symp. Software Testing and Analysis, pp. 119-130, 2010.
[62] N.A. Naeem and O. Lhoták, "Typestate-Like Analysis of Multiple Interacting Objects," Proc. ACM Int'l Conf. Object-Oriented Programming Systems, Languages and Applications, pp. 347-366, 2008.
[63] E. Bodden, P. Lam, and L. Hendren, "Partially Evaluating Finite-State Runtime Monitors Ahead of Time," ACM Trans. Programming Languages and Systems, vol. 34, 2012.
[64] C. Lee, F. Chen, and G. Roşu, "Mining Parametric Specifications," Proc. 33rd ACM/IEEE Int'l Conf. Software Eng., pp. 591-600, 2011.
[65] H. Kagdi, M.L. Collard, and J.I. Maletic, "Comparing Approaches to Mining Source Code for Call-Usage Patterns," Proc. Fourth Int'l Workshop Mining Software Repositories, 2007.
[66] J. Wang and J. Han, "BIDE: Efficient Mining of Frequent Closed Sequences," Proc. 20th Int'l Conf. Data Eng., pp. 79-90, 2004.
[67] A.V. Raman and J.D. Patrick, "The sk-Strings Method for Inferring PFSA," Proc. 14th Int'l Conf. Machine Learning Workshop Automata Induction, Grammatical Inference and Language Acquisition, 1997.
[68] P. Cousot and R. Cousot, "Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints," Proc. Fourth ACM Symp. Principles of Programming Languages, pp. 238-252, 1977.
[69] J.H. Reif, "Universal Games of Incomplete Information," Proc. ACM Symp. Theory of Computing, pp. 288-308, 1979.
[70] D. Angluin, "Learning Regular Sets from Queries and Counterexamples," Information and Computation/Information and Control, vol. 75, pp. 87-106, 1987.
[71] R. Vallée-Rai, P. Co, E. Gagnon, L.J. Hendren, P. Lam, and V. Sundaresan, "Soot—A Java Bytecode Optimization Framework," Proc. Conf. Centre for Advanced Studies on Collaborative Research, p. 13, 1999.
[72] A. Cimatti, E.M. Clarke, E. Giunchiglia, F. Giunchiglia, M. Pistore, M. Roveri, R. Sebastiani, and A. Tacchella, NuSMV 2: An OpenSource Tool for Symbolic Model Checking, 2002.
[73] P. Dupont, B. Lambeau, C. Damas, and A. van Lamsweerde, "The QSM Algorithm and Its Application to Software Behavior Model Induction," Applied Artificial Intelligence, vol. 22, no. 1/2, pp. 77-115, 2008.
[74] V. Dallmeier, N. Knopp, C. Mallon, S. Hack, and A. Zeller, "Generating Test Cases for Specification Mining," Proc. ACM Int'l Symp. Software Testing and Analysis, pp. 85-96, 2010.
[75] D. Lo and S.-C. Khoo, "QUARK: Empirical Assessment of Automaton-Based Specification Miners," Proc. 13th Working Conf. Reverse Eng., pp. 51-60, 2006.
[76] M. Pradel, P. Bichsel, and T.R. Gross, "A Framework for the Evaluation of Specification Miners Based on Finite State Machines," Proc. 26th IEEE Int'l Conf. Software Maintenance, pp. 1-10, 2010.
[77] A.W. Biermann and J.A. Feldman, "On the Synthesis of Finite-State Machines from Samples of Their Behavior," IEEE Trans. Computers, vol. 21, no. 6, pp. 592-597, June 1972.
[78] B. Meyer, "Applying 'Design by Contract'," Computer, vol. 25, no. 10, pp. 40-51, Oct. 1992.
[79] C. Flanagan and K.R.M. Leino, "Houdini, an Annotation Assistant for ESC/Java," Proc. Int'l Symp. Formal Methods Europe, pp. 500-517, 2001.
[80] N. Tillmann, F. Chen, and W. Schulte, "Discovering Likely Method Specifications," Proc. Eighth Int'l Conf. Formal Eng., pp. 717-736, 2006.
[81] R.P.L. Buse and W.R. Weimer, "Automatic Documentation Inference for Exceptions," Proc. ACM Int'l Symp. Software Testing and Analysis, pp. 273-282, 2008.
[82] J. Henkel and A. Diwan, "Discovering Algebraic Specifications from Java Classes," Proc. 17th European Conf. Object-Oriented Programming, 2003.
[83] J. Henkel, C. Reichenbach, and A. Diwan, "Discovering Documentation for Java Container Classes," IEEE Trans. Software Eng., vol. 33, no. 8, pp. 526-543, Aug. 2007.
[84] J. Guttag and J. Horning, "The Algebraic Specification of Abstract Data Types," Acta Informatica, vol. 10, no. 1, pp. 27-52, 1978.
[85] C. Ghezzi, A. Mocci, and M. Monga, "Synthesizing Intensional Behavior Models by Graph Transformation," Proc. 31st ACM/IEEE Int'l Conf. Software Eng., pp. 430-440, 2009.
[86] K.R.M. Leino, J.B. Saxe, and R. Stata, "Checking Java Programs via Guarded Commands," Proc. 13th European Conf. Object-Oriented Programming, pp. 110-111, 1999.
[87] J.C. King, "Symbolic Execution and Program Testing," Comm. ACM, vol. 19, pp. 385-394, July 1976.
[88] M.W. Godfrey and L. Zou, "Using Origin Analysis to Detect Merging and Splitting of Source Code Entities," IEEE Trans. Software Eng., vol. 31, no. 2, pp. 166-181, Feb. 2005.
[89] M. Kim, D. Notkin, and D. Grossman, "Automatic Inference of Structural Changes for Matching across Program Versions," Proc. 29th ACM/IEEE Int'l Conf. Software Eng., pp. 333-343, 2007.
[90] B. Dagenais and M.P. Robillard, "Recommending Adaptive Changes for Framework Evolution," ACM Trans. Software Eng. and Methodology, vol. 20, no. 4, 2011.
[91] D. Dig, C. Comertoglu, D. Marinov, R. Johnson, and D. Thomas, "Automated Detection of Refactorings in Evolving Components," Proc. 20th European Conf. Object-Oriented Programming, pp. 404-428, 2006.
[92] Z. Xing and E. Stroulia, "API-Evolution Support with Diff-CatchUp," IEEE Trans. Software Eng., vol. 33, no. 12 pp. 818-836, Dec. 2007.
[93] Z. Xing and E. Stroulia, "Differencing Logical UML Models," Automated Software Eng., vol. 14, no. 2, pp. 215-259, 2007.
[94] T. Schäfer, J. Jonas, and M. Mezini, "Mining Framework Usage Changes from Instantiation Code," Proc. 30th ACM/IEEE Int'l Conf. Software Eng., pp. 471-480, 2008.
[95] B. Dagenais and M.P. Robillard, "Recommending Adaptive Changes for Framework Evolution," Proc. 30th ACM/IEEE Int'l Conf. Software Eng., pp. 481-490, 2008.
[96] W. Wu, Y.G. Guéhéneuc, G. Antoniol, and M. Kim, "AURA: A Hybrid Approach to Identify Framework Evolution," Proc. 32nd ACM/IEEE Int'l Conf. Software Eng., pp. 325-334, 2010.
[97] H. Zhong, S. Thummalapenta, T. Xie, L. Zhang, and Q. Wang, "Mining API Mapping for Language Migration," Proc. 32nd ACM/IEEE Int'l Conf. Software Eng., pp. 195-204, 2010.
[98] H. Nguyen, T. Nguyen, G. Wilson Jr, A. Nguyen, M. Kim, and T. Nguyen, "A Graph-Based Approach to API Usage Adaptation," Proc. 25th ACM Int'l Conf. Object-Oriented Programming Systems, Languages and Applications, pp. 302-321, 2010.
[99] D. Dig and R. Johnson, "How Do APIs Evolve? A Story of Refactoring," J. Software Maintenance and Evolution: Research and Practice, vol. 18, no. 2, pp. 83-107, 2006.
[100] S. Thummalapenta and T. Xie, "SpotWeb: Detecting Framework Hotspots and Coldspots via Mining Open Source Code on the Web," Proc. 23rd IEEE/ACM Int'l Conf. Automated Software Eng., pp. 327-336, 2008.
[101] J. Stylos, A. Faulring, Z. Yang, and B.A. Myers, "Improving API Documentation Using API Usage Information," Proc. IEEE Symp. Visual Languages and Human-Centric Computing, pp. 119-126, 2009.
[102] R. Holmes and R.J. Walker, "Informing Eclipse API Production and Consumption," Proc. OOPSLA Workshop: Eclipse Technology eXchange, pp. 70-74, 2007.
[103] Y.M. Mileva, V. Dallmeier, M. Burger, and A. Zeller, "Mining Trends of Library Usage," Proc. Joint ERCIM Workshop Software Evolution and Int'l Workshop Principles of Software Evolution, pp. 57-62, 2009.
[104] F. Long, X. Wang, and Y. Cai, "API Hyperlinking via Structural Overlap," Proc. Seventh Joint Meeting European Software Eng. Conf. and ACM SIGSOFT Symp. Foundations of Software Eng., pp. 203-212, 2009.
[105] Z.M. Saul, V. Filkov, P. Devanbu, and C. Bird, "Recommending Random Walks," Proc. Sixth Joint Meeting European Software Eng. Conf. and ACM SIGSOFT Int'l Symp. Foundations of Software Eng., pp. 15-24, 2007.
[106] J.M. Kleinberg, "Authoritative Sources in a Hyperlinked Environment," J. ACM, vol. 46, pp. 604-632, 1999.
[107] J. Viljamaa, "Reverse Engineering Framework Reuse Interfaces," Proc. Joint Meeting Ninth European Software Eng. Conf. and 11th ACM SIGSOFT Int'l Symp. Foundations of Software Eng., pp. 217-226, 2003.
[108] M.P. Robillard, "Automatic Generation of Suggestions for Program Investigation," Proc. Joint Meeting 10th European Software Eng. Conf. and 13th ACM SIGSOFT Int'l Symp. Foundations of Software Eng., pp. 11-20, 2005.
[109] M.P. Robillard, "Topology Analysis of Software Dependencies," ACM Trans. Software Eng. and Methodology, vol. 17, no. 4, 2008.
5 ms
(Ver 2.0)

Marketing Automation Platform Marketing Automation Tool