SlideShare a Scribd company logo
application of hierarchical parameterized
templates for automated software error
correction
Применение технологии иерархических параметризируемых шаблонов
для автоматизированного исправления ошибок в программном коде
Artyom Aleksyuk, Vladimir Itsykson
Nov 12, 2015
Peter the Great St.Petersburg Polytechnic University
introduction
• Wide use of software systems
• Important areas
• Validation and verification of software
• Static analysis
• Why not try to fix found bugs?
2
existing approaches and tools
• IntelliJ IDEA - Structural Search and Replace
• Uses templates to describe replacements
• Tightly coupled with IDEA UI and code model
• AutoFix-E: Automated Debugging of Programs with Contracts
• Juzi: A Tool for Repairing Complex Data Structures
• Corrects data structures using symbolic execution
• GenProg - Genetic programming for code repair
• A very promising tool and approach
• Requires a lot of unit tests
• Grail, Axis, AFix
• Dedicated to repair multithreaded programs
3
task
The main task is to develop an automated system which fixes code
with the help of a static analyzer.
Designed system consists of:
• Static analyzer interface module
• Code modification module
• Set of corrections
4
requirements
The developed system must meet the following requirements:
• It should work with minimal users’ involvement
• Modifications should be correct, i.e. the system shouldn’t alter
code logic in any way and should do only those modifications
which are described in the template;
• It should be universal;
• Code formatting and comments should be kept
• The system should support the latest versions of programming
language
• It should be extensible
5
static analyzer
FindBugs was chosen as the static analyzer.
• Easy to interchange information about warnings
• Mostly signature-based
The system must use templates to describe code replacements.
6
code modification approaches
• Manual AST modification (for example, using a JavaParser library)
• The most universal approach
• Low extensibility - requires writing new code for each new correction
• DSL for code modification?
• Template-based code modification technology (D.A. Timofeev
master’s degree, 2010)
• Uses templates to describe code modifications
Templates are written in language based on Java
• Allows using variables (”selectors”) in templates
• Supports Java 1.5 (JRE/JDK 1.5 were introduced in 2004!)
• Doesn’t keep code formatting and comments
• Sometimes behaves incorrectly (just buggy :( )
7
difficulties
A badly behaving automatic software repair system can skip
required code region, modify inappropriate code or even make a
wrong correction.
General reasons for that:
• Static analyzer mistake
• Static analyzer interface bottleneck
• Incorrect template match
• Improper modification
Ways to overcome the last problem
• Code review
• Unit testing
• Other suitable verification and validation methods
8
architecture
FindBugs
report parsing
Warnings list
"Before" template
"After" template
Source code
"Before"
parse tree
"After"
parse tree
Source code
parse tree
Difference
"Before" template
matches in code
Changes applied
Source code
9
bugs examples
1. Absence of explicit default encoding designation when reading
text files
2. Strings comparison via == operator
3. Absence of null check in equal() method
4. Absence of argument type check in equal() method
5. Usage of constructors for wrapper classes
6. toString() method call for array
7. Usage of approximate values of mathematical constants
8. JVM termination via System.exit() call when handling errors
9. Null return in toString() method
10. Arrays comparison using equals() method
11. Comparison of compareTo() method returning value on equality
with constant
10
replacement templates
Templates language = Java + selectors.
Selectors are described using #idetifier expression.
Example: string comparison using ==. Before:
#a == #b
After:
#b.equals(#a)
Absence of a null pointer check. Before:
boolean equals(Object obj) {
#expr; }
After:
boolean equals(Object obj) {
if (obj == null) { return false; }
#expr; }
11
queries
Ability to specify requirements for selectors
1. Type of tree node
2. Range of values
3. Quantity of caught nodes
4. Complex queries via XPath
Example:
[before]
#array.toString()
[after]
Arrays.toString(#array)
[query]
array is Identifier
array quantity 1
12
development
• FindBugs report is just an XML document, read using standard
Java DOM parser
• Each template consists of three or four .INI-like sections:
[before], [after], [type] and optionally [query]. Each template can
fix multiple bug types and vice versa.
• Improved template matching code
• Selector queries
13
improved template matching code
Pattern Matching in Trees
Additional complexity because of selectors
Each selector can include any number of nodes
14
improved template matching code
1
2 3 4
5 6 7 8
1a
2a 3a 4a
7a 8a
15
development
• Ported to ANTLRv4
• Grammar written from scratch, now based on Java 7
• Selectors can be used nearly everywhere
• Transition from AST to CST (Parse tree)
• New way to transform internal representation back to the source
code (allows to transfer formatting and comments)
16
ci integration
Shell script designed to be run as a Jenkins build step
• Launch FindBugs and fetch a report from it
• Run FixMyCode
• Commit changes
A new branch is created each time. Developers should review
modifications and do a merge.
17
ci integration
18
testing
Trying to fix bugs in a popular, widely used project.
JGraphT library:
• Maintained code base
• Uses Java 7 features
• Has a plenty of unit tests (439)
• Middle-size project (27K SLOC)
Results:
• 46 bugs found
• 14 errors was fixes
• 8 errors can’t be fixed because of FindBugs error
• Other bugs need an appropriate replacement template
19
testing
Examples. Inefficient usage of wrapper classes:
buckets.get(degree[nb]).remove(new Integer(nb));
Replacement:
buckets.get(degree[nb]).remove( Integer.valueOf(nb));
20
testing
Absence of a null pointer and argument type check:
@Override public boolean
equals(Object obj)
{
LabelsEdge otherEdge = (
LabelsEdge) obj;
if ((this.source ==
otherEdge.source)
&& (this.target ==
otherEdge.
target))
{
return true;
} else {
return false;
}
}
@Override public boolean equals(Object obj)
{
if (obj == null) {
return false;
}
if (!obj.getClass().isInstance(this)) {
return false;
}
LabelsEdge otherEdge = (LabelsEdge) obj;
if ((this.source == otherEdge.source)
&& (this.target == otherEdge.target)
)
{
return true;
} else {
return false;
}
}
21
recap
• The extensible system that works nearly automatically was
developed
Source code can be fetched from
https://bitbucket.org/h31/fixmycode
• Template grammar was updated and extended
• A set of replacement templates was written
• The developed system could be used to maintain the code
quality within Continuous Integration
• Also can be used to modernize legacy code
22
future direction of development
• First of all, make it a production-grade project (documentation,
code quality, stability)
• More powerful query types
• Support for other static analyzers (Java Path Finder, etc)
• Extending tool for related tasks: performance improvement,
security enhancement
23
thank you for attention!
24

More Related Content

What's hot (19)

PPTX
PVS-Studio and static code analysis technique
Andrey Karpov
 
PPTX
How to create a high quality static code analyzer
Andrey Karpov
 
PPTX
Mixing d ps building architecture on the cross cutting example
corehard_by
 
PDF
Beyond PITS, Functional Principles for Software Architecture
Jayaram Sankaranarayanan
 
PDF
Unit Test + Functional Programming = Love
Alvaro Videla
 
PDF
Making Your Own Static Analyzer Using Freud DSL. Marat Vyshegorodtsev
Yandex
 
PPTX
Implementing TDD in for .net Core applications
Ahmad Kazemi
 
PDF
Software Engineering - RS3
AtakanAral
 
PDF
Design for Testability
Stanislav Tiurikov
 
PDF
TMPA-2017: Static Checking of Array Objects in JavaScript
Iosif Itkin
 
PPTX
Introduction to unit testing in python
Anirudh
 
PDF
Unit testing.pptx [repaired]
Mohammad Asmar
 
PDF
Unit testing on embedded target with C++Test
Engineering Software Lab
 
PDF
Java Testing With Spock - Ken Sipe (Trexin Consulting)
jaxLondonConference
 
PPTX
Dreamforce Campfire - Apex Testing Tips and Tricks
Daniel Ballinger
 
PDF
Automated Testing for Embedded Software in C or C++
Lars Thorup
 
PPTX
A Proposal to Orchestrate Test Cases
Boni García
 
PPTX
Reverse Engineering automation
Positive Hack Days
 
PPTX
Part1 my
Denis Rain
 
PVS-Studio and static code analysis technique
Andrey Karpov
 
How to create a high quality static code analyzer
Andrey Karpov
 
Mixing d ps building architecture on the cross cutting example
corehard_by
 
Beyond PITS, Functional Principles for Software Architecture
Jayaram Sankaranarayanan
 
Unit Test + Functional Programming = Love
Alvaro Videla
 
Making Your Own Static Analyzer Using Freud DSL. Marat Vyshegorodtsev
Yandex
 
Implementing TDD in for .net Core applications
Ahmad Kazemi
 
Software Engineering - RS3
AtakanAral
 
Design for Testability
Stanislav Tiurikov
 
TMPA-2017: Static Checking of Array Objects in JavaScript
Iosif Itkin
 
Introduction to unit testing in python
Anirudh
 
Unit testing.pptx [repaired]
Mohammad Asmar
 
Unit testing on embedded target with C++Test
Engineering Software Lab
 
Java Testing With Spock - Ken Sipe (Trexin Consulting)
jaxLondonConference
 
Dreamforce Campfire - Apex Testing Tips and Tricks
Daniel Ballinger
 
Automated Testing for Embedded Software in C or C++
Lars Thorup
 
A Proposal to Orchestrate Test Cases
Boni García
 
Reverse Engineering automation
Positive Hack Days
 
Part1 my
Denis Rain
 

Viewers also liked (20)

PDF
TMPA-2015: Lexical analysis of dynamically formed string expressions
Iosif Itkin
 
PPTX
TMPA-2015: Automated process of creating test scenarios for financial protoco...
Iosif Itkin
 
PDF
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
Iosif Itkin
 
PPT
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
Iosif Itkin
 
PDF
TMPA-2015: Software Engineering Education: The Messir Approach
Iosif Itkin
 
PDF
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
Iosif Itkin
 
PDF
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
Iosif Itkin
 
PDF
TMPA-2015: Formal Methods in Robotics
Iosif Itkin
 
PPT
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
Iosif Itkin
 
PDF
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
Iosif Itkin
 
PDF
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
Iosif Itkin
 
PPTX
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
Iosif Itkin
 
PDF
TMPA-2015: A Need To Specify and Verify Standard Functions
Iosif Itkin
 
PPTX
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
Iosif Itkin
 
PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
PDF
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
Iosif Itkin
 
PPTX
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
Iosif Itkin
 
PPT
TMPA-2015: FPGA-Based Low Latency Sponsored Access
Iosif Itkin
 
PDF
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
Iosif Itkin
 
PDF
TMPA-2017: Stemming Architectural Decay in Software Systems
Iosif Itkin
 
TMPA-2015: Lexical analysis of dynamically formed string expressions
Iosif Itkin
 
TMPA-2015: Automated process of creating test scenarios for financial protoco...
Iosif Itkin
 
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
Iosif Itkin
 
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
Iosif Itkin
 
TMPA-2015: Software Engineering Education: The Messir Approach
Iosif Itkin
 
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
Iosif Itkin
 
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
Iosif Itkin
 
TMPA-2015: Formal Methods in Robotics
Iosif Itkin
 
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
Iosif Itkin
 
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
Iosif Itkin
 
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
Iosif Itkin
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
Iosif Itkin
 
TMPA-2015: A Need To Specify and Verify Standard Functions
Iosif Itkin
 
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
Iosif Itkin
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
Iosif Itkin
 
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
Iosif Itkin
 
TMPA-2015: FPGA-Based Low Latency Sponsored Access
Iosif Itkin
 
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
Iosif Itkin
 
TMPA-2017: Stemming Architectural Decay in Software Systems
Iosif Itkin
 
Ad

Similar to TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated Program Code Defect-Fixing (20)

PPTX
Trusted Automatic Programming - November 2024
Abhik Roychoudhury
 
ODP
Java compilation
Mike Kucera
 
PDF
Jdj Foss Java Tools
Ganesh Samarthyam
 
PPTX
Finding bugs that matter with Findbugs
Carol McDonald
 
PPTX
Static analysis: Around Java in 60 minutes
Andrey Karpov
 
PPTX
Does static analysis need machine learning?
Andrey Karpov
 
PPTX
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
Andrey Karpov
 
PDF
Achieving quality with tools case study
EosSoftware
 
PDF
Supporting Coding and Testing
Suelen Carvalho
 
PPTX
Capability Building for Cyber Defense: Software Walk through and Screening
Maven Logix
 
PDF
Supporting program comprehension with source code summarization icse nier 2010
Sonia Haiduc
 
PPTX
verification and validation
Dinesh Pasi
 
PDF
Code Review for Teams Too Busy to Review Code - Atlassian Summit 2010
Atlassian
 
PDF
Introduzione a junit + integrazione con archibus
Davide Fella
 
PDF
Presentations Unusual Java Bugs And Detecting Them Using Foss Tools
Ganesh Samarthyam
 
PDF
End-end tests as first class citizens - SeleniumConf 2020
Abhijeet Vaikar
 
PDF
JCConf 2022 - New Features in Java 18 & 19
Joseph Kuo
 
PDF
findbugs Bernhard Merkle
bmerkle
 
PPTX
Cancer genomics big_datascience_meetup_july_14_2014
Shyam Sarkar
 
DOCX
Chapter 10 Testing and Quality Assurance1Unders.docx
keturahhazelhurst
 
Trusted Automatic Programming - November 2024
Abhik Roychoudhury
 
Java compilation
Mike Kucera
 
Jdj Foss Java Tools
Ganesh Samarthyam
 
Finding bugs that matter with Findbugs
Carol McDonald
 
Static analysis: Around Java in 60 minutes
Andrey Karpov
 
Does static analysis need machine learning?
Andrey Karpov
 
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
Andrey Karpov
 
Achieving quality with tools case study
EosSoftware
 
Supporting Coding and Testing
Suelen Carvalho
 
Capability Building for Cyber Defense: Software Walk through and Screening
Maven Logix
 
Supporting program comprehension with source code summarization icse nier 2010
Sonia Haiduc
 
verification and validation
Dinesh Pasi
 
Code Review for Teams Too Busy to Review Code - Atlassian Summit 2010
Atlassian
 
Introduzione a junit + integrazione con archibus
Davide Fella
 
Presentations Unusual Java Bugs And Detecting Them Using Foss Tools
Ganesh Samarthyam
 
End-end tests as first class citizens - SeleniumConf 2020
Abhijeet Vaikar
 
JCConf 2022 - New Features in Java 18 & 19
Joseph Kuo
 
findbugs Bernhard Merkle
bmerkle
 
Cancer genomics big_datascience_meetup_july_14_2014
Shyam Sarkar
 
Chapter 10 Testing and Quality Assurance1Unders.docx
keturahhazelhurst
 
Ad

More from Iosif Itkin (20)

PDF
Foundations of Software Testing Lecture 4
Iosif Itkin
 
PPTX
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
Iosif Itkin
 
PDF
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Iosif Itkin
 
PDF
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Iosif Itkin
 
PDF
Operational Resilience in Financial Market Infrastructures
Iosif Itkin
 
PDF
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
Iosif Itkin
 
PDF
Testing the Intelligence of your AI
Iosif Itkin
 
PDF
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
Iosif Itkin
 
PDF
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
Iosif Itkin
 
PPTX
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
Iosif Itkin
 
PDF
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
Iosif Itkin
 
PDF
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
Iosif Itkin
 
PPTX
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
Iosif Itkin
 
PDF
QA Community Saratov: Past, Present, Future (2019-02-08)
Iosif Itkin
 
PDF
Machine Learning and RoboCop Testing
Iosif Itkin
 
PDF
Behaviour Driven Development: Oltre i limiti del possibile
Iosif Itkin
 
PDF
2018 - Exactpro Year in Review
Iosif Itkin
 
PPTX
Exactpro Discussion about Joy and Strategy
Iosif Itkin
 
PPTX
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
Iosif Itkin
 
PDF
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
Iosif Itkin
 
Foundations of Software Testing Lecture 4
Iosif Itkin
 
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
Iosif Itkin
 
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Iosif Itkin
 
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Iosif Itkin
 
Operational Resilience in Financial Market Infrastructures
Iosif Itkin
 
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
Iosif Itkin
 
Testing the Intelligence of your AI
Iosif Itkin
 
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
Iosif Itkin
 
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
Iosif Itkin
 
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
Iosif Itkin
 
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
Iosif Itkin
 
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
Iosif Itkin
 
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
Iosif Itkin
 
QA Community Saratov: Past, Present, Future (2019-02-08)
Iosif Itkin
 
Machine Learning and RoboCop Testing
Iosif Itkin
 
Behaviour Driven Development: Oltre i limiti del possibile
Iosif Itkin
 
2018 - Exactpro Year in Review
Iosif Itkin
 
Exactpro Discussion about Joy and Strategy
Iosif Itkin
 
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
Iosif Itkin
 
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
Iosif Itkin
 

Recently uploaded (20)

PPSX
Overview of Stem Cells and Immune Modulation.ppsx
AhmedAtwa29
 
PDF
SCH 4103_Fibre Technology & Dyeing_07012020.pdf
samwelngigi37
 
PPTX
Liquid Biopsy Biomarkers for early Diagnosis
KanakChaudhary10
 
PDF
Relazione di laboratorio Idrolisi dell'amido (in inglese)
paolofvesco
 
PDF
POLISH JOURNAL OF SCIENCE №87 (2025)
POLISH JOURNAL OF SCIENCE
 
PPTX
Paired Sketching of Distributed User Interfaces:Workflow, Protocol, Software ...
Jean Vanderdonckt
 
PPTX
Organisms of oncogenic Potential.pptx
mrkoustavjana2003
 
PDF
Investigatory_project Topic:-effect of electrolysis in solar desalination .pdf
shubham997ku
 
PPTX
General properties of connective tissue.pptx
shrishtiv82
 
PDF
The MUSEview of the Sculptor galaxy: survey overview and the planetary nebula...
Sérgio Sacani
 
PDF
We are Living in a Dangerous Multilingual World!
Editions La Dondaine
 
PPTX
Human-AI Interaction in Space: Insights from a Mars Analog Mission with the H...
Jean Vanderdonckt
 
PDF
Impacts on Ocean Worlds Are Sufficiently Frequent and Energetic to Be of Astr...
Sérgio Sacani
 
PPTX
Instrumentation of IR and Raman Spectrophotometers.pptx
sngth2h2acc
 
PPTX
An Analysis Of The Pearl Short Story By John Steinbeck
BillyDarmawan3
 
PPTX
(Normal Mechanism)physiology of labour.pptx
DavidSalman2
 
PPTX
Indian Podophyllum [Autosaved].pptx done
TahirChowdhary1
 
PDF
Disk Evolution Study Through Imaging of Nearby Young Stars (DESTINYS): Eviden...
Sérgio Sacani
 
DOCX
Accomplishment Report on YES- O SY 2025 2026.docx
WilsonVillamater
 
PDF
EV REGENERATIVE ACCELERATION INNOVATION SUMMARY PITCH June 13, 2025.pdf
Thane Heins NOBEL PRIZE WINNING ENERGY RESEARCHER
 
Overview of Stem Cells and Immune Modulation.ppsx
AhmedAtwa29
 
SCH 4103_Fibre Technology & Dyeing_07012020.pdf
samwelngigi37
 
Liquid Biopsy Biomarkers for early Diagnosis
KanakChaudhary10
 
Relazione di laboratorio Idrolisi dell'amido (in inglese)
paolofvesco
 
POLISH JOURNAL OF SCIENCE №87 (2025)
POLISH JOURNAL OF SCIENCE
 
Paired Sketching of Distributed User Interfaces:Workflow, Protocol, Software ...
Jean Vanderdonckt
 
Organisms of oncogenic Potential.pptx
mrkoustavjana2003
 
Investigatory_project Topic:-effect of electrolysis in solar desalination .pdf
shubham997ku
 
General properties of connective tissue.pptx
shrishtiv82
 
The MUSEview of the Sculptor galaxy: survey overview and the planetary nebula...
Sérgio Sacani
 
We are Living in a Dangerous Multilingual World!
Editions La Dondaine
 
Human-AI Interaction in Space: Insights from a Mars Analog Mission with the H...
Jean Vanderdonckt
 
Impacts on Ocean Worlds Are Sufficiently Frequent and Energetic to Be of Astr...
Sérgio Sacani
 
Instrumentation of IR and Raman Spectrophotometers.pptx
sngth2h2acc
 
An Analysis Of The Pearl Short Story By John Steinbeck
BillyDarmawan3
 
(Normal Mechanism)physiology of labour.pptx
DavidSalman2
 
Indian Podophyllum [Autosaved].pptx done
TahirChowdhary1
 
Disk Evolution Study Through Imaging of Nearby Young Stars (DESTINYS): Eviden...
Sérgio Sacani
 
Accomplishment Report on YES- O SY 2025 2026.docx
WilsonVillamater
 
EV REGENERATIVE ACCELERATION INNOVATION SUMMARY PITCH June 13, 2025.pdf
Thane Heins NOBEL PRIZE WINNING ENERGY RESEARCHER
 

TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated Program Code Defect-Fixing

  • 1. application of hierarchical parameterized templates for automated software error correction Применение технологии иерархических параметризируемых шаблонов для автоматизированного исправления ошибок в программном коде Artyom Aleksyuk, Vladimir Itsykson Nov 12, 2015 Peter the Great St.Petersburg Polytechnic University
  • 2. introduction • Wide use of software systems • Important areas • Validation and verification of software • Static analysis • Why not try to fix found bugs? 2
  • 3. existing approaches and tools • IntelliJ IDEA - Structural Search and Replace • Uses templates to describe replacements • Tightly coupled with IDEA UI and code model • AutoFix-E: Automated Debugging of Programs with Contracts • Juzi: A Tool for Repairing Complex Data Structures • Corrects data structures using symbolic execution • GenProg - Genetic programming for code repair • A very promising tool and approach • Requires a lot of unit tests • Grail, Axis, AFix • Dedicated to repair multithreaded programs 3
  • 4. task The main task is to develop an automated system which fixes code with the help of a static analyzer. Designed system consists of: • Static analyzer interface module • Code modification module • Set of corrections 4
  • 5. requirements The developed system must meet the following requirements: • It should work with minimal users’ involvement • Modifications should be correct, i.e. the system shouldn’t alter code logic in any way and should do only those modifications which are described in the template; • It should be universal; • Code formatting and comments should be kept • The system should support the latest versions of programming language • It should be extensible 5
  • 6. static analyzer FindBugs was chosen as the static analyzer. • Easy to interchange information about warnings • Mostly signature-based The system must use templates to describe code replacements. 6
  • 7. code modification approaches • Manual AST modification (for example, using a JavaParser library) • The most universal approach • Low extensibility - requires writing new code for each new correction • DSL for code modification? • Template-based code modification technology (D.A. Timofeev master’s degree, 2010) • Uses templates to describe code modifications Templates are written in language based on Java • Allows using variables (”selectors”) in templates • Supports Java 1.5 (JRE/JDK 1.5 were introduced in 2004!) • Doesn’t keep code formatting and comments • Sometimes behaves incorrectly (just buggy :( ) 7
  • 8. difficulties A badly behaving automatic software repair system can skip required code region, modify inappropriate code or even make a wrong correction. General reasons for that: • Static analyzer mistake • Static analyzer interface bottleneck • Incorrect template match • Improper modification Ways to overcome the last problem • Code review • Unit testing • Other suitable verification and validation methods 8
  • 9. architecture FindBugs report parsing Warnings list "Before" template "After" template Source code "Before" parse tree "After" parse tree Source code parse tree Difference "Before" template matches in code Changes applied Source code 9
  • 10. bugs examples 1. Absence of explicit default encoding designation when reading text files 2. Strings comparison via == operator 3. Absence of null check in equal() method 4. Absence of argument type check in equal() method 5. Usage of constructors for wrapper classes 6. toString() method call for array 7. Usage of approximate values of mathematical constants 8. JVM termination via System.exit() call when handling errors 9. Null return in toString() method 10. Arrays comparison using equals() method 11. Comparison of compareTo() method returning value on equality with constant 10
  • 11. replacement templates Templates language = Java + selectors. Selectors are described using #idetifier expression. Example: string comparison using ==. Before: #a == #b After: #b.equals(#a) Absence of a null pointer check. Before: boolean equals(Object obj) { #expr; } After: boolean equals(Object obj) { if (obj == null) { return false; } #expr; } 11
  • 12. queries Ability to specify requirements for selectors 1. Type of tree node 2. Range of values 3. Quantity of caught nodes 4. Complex queries via XPath Example: [before] #array.toString() [after] Arrays.toString(#array) [query] array is Identifier array quantity 1 12
  • 13. development • FindBugs report is just an XML document, read using standard Java DOM parser • Each template consists of three or four .INI-like sections: [before], [after], [type] and optionally [query]. Each template can fix multiple bug types and vice versa. • Improved template matching code • Selector queries 13
  • 14. improved template matching code Pattern Matching in Trees Additional complexity because of selectors Each selector can include any number of nodes 14
  • 15. improved template matching code 1 2 3 4 5 6 7 8 1a 2a 3a 4a 7a 8a 15
  • 16. development • Ported to ANTLRv4 • Grammar written from scratch, now based on Java 7 • Selectors can be used nearly everywhere • Transition from AST to CST (Parse tree) • New way to transform internal representation back to the source code (allows to transfer formatting and comments) 16
  • 17. ci integration Shell script designed to be run as a Jenkins build step • Launch FindBugs and fetch a report from it • Run FixMyCode • Commit changes A new branch is created each time. Developers should review modifications and do a merge. 17
  • 19. testing Trying to fix bugs in a popular, widely used project. JGraphT library: • Maintained code base • Uses Java 7 features • Has a plenty of unit tests (439) • Middle-size project (27K SLOC) Results: • 46 bugs found • 14 errors was fixes • 8 errors can’t be fixed because of FindBugs error • Other bugs need an appropriate replacement template 19
  • 20. testing Examples. Inefficient usage of wrapper classes: buckets.get(degree[nb]).remove(new Integer(nb)); Replacement: buckets.get(degree[nb]).remove( Integer.valueOf(nb)); 20
  • 21. testing Absence of a null pointer and argument type check: @Override public boolean equals(Object obj) { LabelsEdge otherEdge = ( LabelsEdge) obj; if ((this.source == otherEdge.source) && (this.target == otherEdge. target)) { return true; } else { return false; } } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (!obj.getClass().isInstance(this)) { return false; } LabelsEdge otherEdge = (LabelsEdge) obj; if ((this.source == otherEdge.source) && (this.target == otherEdge.target) ) { return true; } else { return false; } } 21
  • 22. recap • The extensible system that works nearly automatically was developed Source code can be fetched from https://bitbucket.org/h31/fixmycode • Template grammar was updated and extended • A set of replacement templates was written • The developed system could be used to maintain the code quality within Continuous Integration • Also can be used to modernize legacy code 22
  • 23. future direction of development • First of all, make it a production-grade project (documentation, code quality, stability) • More powerful query types • Support for other static analyzers (Java Path Finder, etc) • Extending tool for related tasks: performance improvement, security enhancement 23
  • 24. thank you for attention! 24