A theory of diagnosis from first principles
Artificial Intelligence
A logical framework for default reasoning
Artificial Intelligence
Advanced C++ programming styles and idioms
Advanced C++ programming styles and idioms
Simply logical: intelligent reasoning by example
Simply logical: intelligent reasoning by example
The role(s) of logic in artificial intelligence
Handbook of logic in artificial intelligence and logic programming (vol. 1)
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
The role of abduction in database view updating
Journal of Intelligent Information Systems
Software reflexion models: bridging the gap between source and high-level models
SIGSOFT '95 Proceedings of the 3rd ACM SIGSOFT symposium on Foundations of software engineering
Smalltalk: best practice patterns
Smalltalk: best practice patterns
Four dark corners of requirements engineering
ACM Transactions on Software Engineering and Methodology (TOSEM)
Applications of abduction: knowledge-level modelling
International Journal of Human-Computer Studies
Law-governed regularities in object systems: part I: an abstract model
Theory and Practice of Object Systems
ICSE '91 Proceedings of the 13th international conference on Software engineering
Managing inconsistent specifications: reasoning, analysis, and action
ACM Transactions on Software Engineering and Methodology (TOSEM)
Requirements engineering: a roadmap
Proceedings of the Conference on The Future of Software Engineering
Database Updates through Abduction
VLDB '90 Proceedings of the 16th International Conference on Very Large Data Bases
Quasi-classical Logic: Non-trivializable classical reasoning from incosistent information
ECSQARU '95 Proceedings of the European Conference on Symbolic and Quantitative Approaches to Reasoning and Uncertainty
Knowledge Base Approach to Consistency Management of UML Specifications
Proceedings of the 16th IEEE international conference on Automated software engineering
IntensiVE, a toolsuite for documenting and checking structural source-code regularities
CSMR '06 Proceedings of the Conference on Software Maintenance and Reengineering
An Approach to High-Level Behavioral Program Documentation Allowing Lightweight Verification
ICPC '06 Proceedings of the 14th IEEE International Conference on Program Comprehension
Improving your software using static analysis to find bugs
Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications
Java Persistence with Hibernate
Java Persistence with Hibernate
Open Unification for Program Query Languages
SCCC '07 Proceedings of the XXVI International Conference of the Chilean Society of Computer Science
Query Technologies and Applications for Program Comprehension (QTAPC 2008)
ICPC '08 Proceedings of the 2008 The 16th IEEE International Conference on Program Comprehension
Cognac: A Framework for Documenting and Verifying the Design of Cobol Systems
CSMR '09 Proceedings of the 2009 European Conference on Software Maintenance and Reengineering
Abductive framework for nonmonotonic theory change
IJCAI'95 Proceedings of the 14th international joint conference on Artificial intelligence - Volume 1
Diagnosis and semi-automatic correction of detected design inconsistencies in source code
IWST '09 Proceedings of the International Workshop on Smalltalk Technologies
Enforcing structural regularities in software using IntensiVE
Science of Computer Programming
Hi-index | 0.00 |
Correcting design decay in source code is not a trivial task. Diagnosing and subsequently correcting inconsistencies between a software system's code and its design rules (e.g., database queries are only allowed in the persistence layer) and coding conventions can be complex, time-consuming and error-prone. Providing support for this process is therefore highly desirable, but of a far greater complexity than suggesting basic corrective actions for simplistic implementation problems (like the ''declare a local variable for non-declared variable'' suggested by Eclipse). We present an abductive reasoning approach to inconsistency correction that consists of (1) a means for developers to document and verify a system's design and coding rules, (2) an abductive logic reasoner that hypothesizes possible causes of inconsistencies between the system's code and the documented rules and (3) a library of corrective actions for each hypothesized cause. This work builds on our previous work, where we expressed design rules as equality relationships between sets of source code artifacts (e.g., the set of methods in the persistence layer is the same as the set of methods that query the database). In this paper, we generalize our approach to design rules expressed as user-defined binary relationships between two sets of source code artifacts (e.g., every state changing method should invoke a persistence method). We illustrate our approach on the design of IntensiVE, a tool suite that enables defining sets of source code artifacts intensionally (by means of logic queries) and verifying relationships between such sets.