How We Refactor, and How We Know It

Size: px
Start display at page:

Download "How We Refactor, and How We Know It"

Transcription

1 Emerson Murphy-Hill, Chris Parnin, Andrew P. Black How We Refactor, and How We Know It Urs Fässler Urs Fässler () How We Refactor, and How We Know It / 14

2 Refactoring Definition Refactoring is the process of changing the structure of a program without changing the way that it behaves. Benefit understand software improve code metrics readability complexity maintainability Urs Fässler () How We Refactor, and How We Know It / 14

3 About the study Motivation replicate old studies with bigger data sets confirm other refactoring studies contribute new refactoring detecting strategies Urs Fässler () How We Refactor, and How We Know It / 14

4 Data Source 4 data sets mainly Java developers Data set People Source Toolsmiths 4 Eclipse refactoring tool developers detailed refactoring histories Eclipse CVS Eclipse and JUnit developers extracted from Eclipse CVS Users 41 programmers in the wild captured with Mylin (Eclipse plugin) Everyone over developers Eclipse usage collector Urs Fässler () How We Refactor, and How We Know It / 14

5 Usage Data Collector - Commands yearmonth command bundleid bundleversion executecount usercount org.eclipse.ui.file.save org.eclipse.ui I org.eclipse.ui.file.save org.eclipse.ui M org.eclipse.ui.file.save org.eclipse.ui M org.eclipse.ui.file.save org.eclipse.ui I org.eclipse.ui.file.save org.eclipse.ui M org.eclipse.ui.edit.delete org.eclipse.ui I org.eclipse.ui.edit.delete org.eclipse.ui M org.eclipse.ui.edit.delete org.eclipse.ui M org.eclipse.ui.edit.delete org.eclipse.ui I org.eclipse.ui.edit.delete org.eclipse.ui M org.eclipse.ui.edit.copy org.eclipse.ui I org.eclipse.ui.edit.copy org.eclipse.ui I org.eclipse.ui.edit.copy org.eclipse.ui M org.eclipse.ui.edit.copy org.eclipse.ui M org.eclipse.ui.edit.copy org.eclipse.ui I org.eclipse.ui.edit.copy org.eclipse.ui I org.eclipse.ui.edit.copy org.eclipse.ui M org.eclipse.ui.file.revert org.eclipse.ui I org.eclipse.ui.edit.paste org.eclipse.ui I org.eclipse.ui.edit.paste org.eclipse.ui M org.eclipse.ui.edit.paste org.eclipse.ui M org.eclipse.ui.edit.paste org.eclipse.ui I org.eclipse.ui.edit.paste org.eclipse.ui M Urs Fässler () How We Refactor, and How We Know It / 14

6 Investigated aspects of refactorings and results Tool-Usage behavior differences of Toolsmiths and Users they differ kind of usage 40% in batch mode configuration 90% use default configuration Detecting refactoring commit messages don t predict refactorings changes on signatures often the signature isn t changed Refactoring practice frequency of refactorings they are frequent way of refactoring mostly mixed with other work on the code frequency of tool usage they are underused differences of tool usage wide variety Urs Fässler () How We Refactor, and How We Know It / 14

7 Hypothesis #3 Hypothesis Programmers often don t configure refactoring tools Urs Fässler () How We Refactor, and How We Know It / 14

8 Hypothesis #3 - Programmers don t configure refactoring tools analyzed top 5 refactoring tools Toolsmiths data set overall change frequency < 10% programmers don t use configurations limitations just Toolsmiths data set only 5 most-common tools Urs Fässler () How We Refactor, and How We Know It / 14

9 Hypothesis #1 Hypothesis Toolsmiths and Users differ Refactoring tool usage by groups Toolsmiths Users Everyone Rename Extract Local Variable Move Extract Method Change Method Signature Inline rest Urs Fässler () How We Refactor, and How We Know It / 14

10 Hypothesis #1 - Toolsmiths and Users differ they differ designer of software can t be used as reference limitations gathered data over different periods of time Users included non-java refactorings other aspect of study shows that refactoring tools are underused why is the rename tool so popular? Urs Fässler () How We Refactor, and How We Know It / 14

11 Discussion Tool-Usage Behavior Users underuse refactoring tools improve tools improve documentation refactoring tools are used repeatedly and with default configuration omit configuration implement batch mode Detecting Refactoring commit messages don t contain information about refactoring needs further replication many refactorings are low-level rethink refactoring detecting strategies Urs Fässler () How We Refactor, and How We Know It / 14

12 Discussion Refactoring Practice results support evidence of earlier studies refactoring tools need improvements programmers refactor frequently increase tool support refactoring is mixed with coding allow quick switches between tasks teach refactoring during courses refactoring tools are underused explore alternative interfaces identify common work-flows why are they underused? Urs Fässler () How We Refactor, and How We Know It / 14

13 Conclusions new insights how programmers refactor how refactoring tools are used how refactoring tools can be improved challenge certain assumptions about refactoring Urs Fässler () How We Refactor, and How We Know It / 14

14 Threads to validate Limitations of the Study mainly Java developers with Eclipse Users and Toolsmiths may not represent programmers in general Users and Everyone may overlap with Toolsmiths small data sets Owen thoughts to many hypotheses finding of hypothesis 1 contradicts conclusion of hypothesis 3 reflects agile software development behavior user-story driven development Urs Fässler () How We Refactor, and How We Know It / 14

15 Appendix Urs Fässler () How We Refactor, and How We Know It / 15

16 Data Source 1/2 Toolsmiths from 4 developers who maintain Eclipse s refactoring tools include detailed histories about refactoring tools which tools, when used, what configuration between December 2005 and August 2007 Eclipse CVS developer of the Eclipse and JUnit code extracted from their Concurrent Versioning System (CVS) randomly sampled from 3400 commits and search manually for refactorings many used automatic detection strategies first who compared tool logs with code histories same time period, same projects, same developers as represented in Toolsmiths Urs Fässler () How We Refactor, and How We Know It / 15

17 Data Source 2/2 Users from 41 volunteer programmers in the wild Everyone captured with Mylyn, a Plugin for Eclipse used the data already for other study latter half of % Java on average 66 development hours per programmer captured with the Eclipse Usage Collector from over developers first use of these data in research Java and others between April 2008 and January 2009 Urs Fässler () How We Refactor, and How We Know It / 15

18 Investigated Aspects 1/4 investigated 9 aspects in 3 categories Refactoring-Tool-Usage behavior differences of Toolsmiths and Users compared refactoring tool usage in Toolsmiths against Users and Everyone they differ H Toolsmiths and Users differ kind of usage Toolsmiths and Users same tool used within 1 minute (batch mode) 40% in batch mode H Programmers repeat refactorings configuration analyzed 5 most popular tools from Toolsmiths 90% use default configuration H Programmers often don t configure refactoring tools Urs Fässler () How We Refactor, and How We Know It / 15

19 Investigated Aspects 2/4 Refactoring detection commit messages searched manually in 40 commits for refactorings compared these results with the commit messages don t predict refactorings a H Commit messages don t predict refactoring changes on class and method signatures looked which refactorings don t change signature the signature often isn t changed b H Many refactorings are medium and low-level a Pure refactorings were all labeled, Some refactorings were sometimes labeled, No refactorings were often labeled as refactorings Eclipse CVS Toolsmiths b Low 18% 33% Medium 22% 27% High 60% 40% Urs Fässler () How We Refactor, and How We Know It / 15

20 Investigated Aspects 3/4 Refactoring practice 1/2 frequency of refactorings analyzed data to see how often refactorings occur Users: 41% of programming sessions contained refactoring activity Toolsmith: on average 30 refactorings each week refactorings are frequent H Refactorings are frequent way of refactoring looked for semantic changes when refactorings occurred 30% of commits contains refactorings and other work on code 3% of commits are pure refactorings most time refactoring is mixed with other work on the code H Floss refactoring is common Urs Fässler () How We Refactor, and How We Know It / 15

21 Investigated Aspects 4/4 Refactoring practice 2/2 frequency of tool usage compared manually found refactorings with tool usage data 89% were performed by hand refactoring tools are underused H Refactoring tools are underused differences of tool usage same method as before some tools are used often, some rarely H Different refactorings are performed with and without tools Urs Fässler () How We Refactor, and How We Know It / 15

22 Level of refactoring High Change the signature of classes, methods and fields Examples: rename class, move static field, add parameter Medium Change signature and significantly change blocks of code Examples: extract method, inline constant, convert anonymous type to nested type Low Changes only on blocks of code Examples: extract local variable, rename local variable, add assertion Urs Fässler () How We Refactor, and How We Know It / 15

23 CVS Commit Messages Revision Author Comment 1.83 johna Updated copyrights btripkovic clean up 1.77 btripkovic digest and pack200 tool 1.76 btripkovic icu reverse and import clean-up 1.71 btripkovic digest fix 1.68 btripkovic digest stuff 1.64 kkolosow unnecessary non nls tags 1.55 dbirsan fix support for mirrors 1.53 dbirsan Update copyright using releng tool 1.50 dbirsan Add API disclaimer 1.49 dbirsan cleanup 1.48 dbirsan remove dependency on compatibility layer dbirsan partial refactoring 1.46 dbirsan fix test failures 1.45 dbirsan backup previous change 1.42 wmelhem organized imports 1.41 droberts Copyright fix - automated changes 1.32 celek merged into celek merge core 1.30 celek Improve Search 1.29 celek Improve Search 1.28 celek multistatus.iserror + CPP 1.27 celek Refactoring logging and debugging 1.23 vlad javadoc pass 1.21 celek NL and reconciliation revised 1.2 vlad merge 2.0 changes 1.18 celek new spec (2.0.4) 1.16 celek End API review g 1.14 celek retry site and parsing defensive coding Partial history of org.eclipse.update.core.model.defaultsiteparser.java Urs Fässler () How We Refactor, and How We Know It / 15

24 Refactoring tool usage in Eclipse Name Toolsmiths Users Everyone Rename Extract Local Variable Inline Extract Method Move Change Method Signature Convert Local To Field Introduce Parameter Extract Constant Convert Anonymous To nested Move Member Type to New File Pull Up Encapsulate Field Extract Interface Generalize Declared Type Push Down Infer Generic Type Arguments Use Supertype Where Possible Introduce Factory Extract Superclass Extract Class Introduce Parameter Object Introduce Indirection Urs Fässler () How We Refactor, and How We Know It / 15

25 Refactoring tool configuration in Eclipse from Toolsmiths Refactoring Tool Configuration Option Default Value Change Frequency Extract Local Variable Declare the local variable as final false 0.05 Extract Method New method visibility private 0.06 Declare thrown runtime exceptions false 0.24 Generate method comment false 0.09 Rename Type Update references true 0.03 Update similarly named variables and methods false 0.24 Update textual occurrences in comments and strings false 0.15 Update fully qualified names in non-java text files true 0.07 Rename Method Update references true 0 Keep original method as delegate to renamed method false 0.01 Inline Method Delete method declaration true 0.09 Urs Fässler () How We Refactor, and How We Know It / 15

26 Refactorings over 40 sessions Rename Constant (H) Push Down (H) Generalize Declared Type (H) Extract Method (M) Move Member (H) Remove Parameter (H) Inline Local (L) Extract Local (L) Inline Method (M) Rename Local (L) Rename Field (H) Rename Method (H) Rename Type (H) Add Parameter (H) Decrease Method Visibility (H) Increase Method Visibility (H) Introduce Parameter (M) Reorder Parameter (H) Extract Class (H) Extract Constant (M) Inline Constant (M) Introduce Factory (H) Rename Resource (H) Manual (Labeled) Manual (Unlabeled) Tool (Labeled) Tool (Unlabeled) Urs Fässler () How We Refactor, and How We Know It / 15

27 Normalization Procedure In the paper, we discussed a normalization procedure for some reported data. To explain the procedure we used for calculating, we ll give the intuitive explanation and an example calculation below: In section 3.5, we wish to estimate how many pure-refactoring commits were made to CVS. Recall that previously, we sampled 20 Labeled projects and 20 Unlabeled projects, and we know that 6 Labeled commits were pure-refactoring and 0 Unlabeled commits were pure-refactoring. Naively, might simply do the addition (6+0) and divide over the total commits to get the estimate: 6/40 = 15%. However, this is a good estimate for our sample, but a bad estimate for the population as a whole, because our sample was drawn from two unequal strata. Specifically, in this naive estimate, we are giving too much weight to the 6 pure-refactoring commits, because Labeled commits only account for about 10% of total commits. So what do we do? Instead of the naive approach, we normalize our estimate for the relative proportions of Labeled ( 10%) to Unlabeled commits ( 90%). The following calculation gives the normalized result: ( 1 ) 290 = is the number of Labeled pure-refactoring commits. 0 is the number of Unlabeled pure-refactoring commits. 290 is the number of Labeled commits is the number of Unlabeled commits. Urs Fässler () How We Refactor, and How We Know It / 15

28 The (now more than) 72 different refactorings 1/2 From Add Parameter Change Bidirectional Association to Unidirectional Change Reference to Value Change Unidirectional Association to Bidirectional Change Value to Reference Collapse Hierarchy Consolidate Conditional Expression Consolidate Duplicate Conditional Fragments Convert Dynamic to Static Construction Convert Static to Dynamic Construction Decompose Conditional Duplicate Observed Data Eliminate Inter-Entity Bean Communication Encapsulate Collection Encapsulate Downcast Encapsulate Field Extract Class Extract Interface Extract Method Extract Package Extract Subclass Extract Superclass Form Template Method Hide Delegate Hide Method Hide presentation tier-specific details from the business tier Inline Class Inline Method Inline Temp Introduce A Controller Introduce Assertion Introduce Business Delegate Introduce Explaining Variable Introduce Foreign Method Introduce Local Extension Introduce Null Object Introduce Parameter Object Introduce Synchronizer Token Localize Disparate Logic Merge Session Beans Move Business Logic to Session Move Class Move Field Urs Fässler () How We Refactor, and How We Know It / 15

29 The (now more than) 72 different refactorings 2/2 Move Method Parameterize Method Preserve Whole Object Pull Up Constructor Body Pull Up Field Pull Up Method Push Down Field Push Down Method Reduce Scope of Variable Refactor Architecture by Tiers Remove Assignments to Parameters Remove Control Flag Remove Double Negative Remove Middle Man Remove Parameter Remove Setting Method Rename Method Replace Array with Object Replace Assignment with Initialization Replace Conditional with Polymorphism Replace Conditional with Visitor Replace Constructor with Factory Method Replace Data Value with Object Replace Delegation with Inheritance Replace Error Code with Exception Replace Exception with Test Replace Inheritance with Delegation Replace Iteration with Recursion Replace Magic Number with Symbolic Constant Replace Method with Method Object Replace Nested Conditional with Guard Clauses Replace Parameter with Explicit Methods Replace Parameter with Method Replace Record with Data Class Replace Recursion with Iteration Replace Static Variable with Parameter Replace Subclass with Fields Replace Temp with Query Replace Type Code with Class Replace Type Code with State/Strategy Replace Type Code with Subclasses Reverse Conditional Self Encapsulate Field Separate Data Access Code Separate Query from Modifier Split Loop Split Temporary Variable Substitute Algorithm Use a Connection Pool Wrap entities with session Urs Fässler () How We Refactor, and How We Know It / 15

How We Refactor, and How We Know it. Emerson Murphy-Hill, Chris Parnin, Andrew P. Black ICSE 2009

How We Refactor, and How We Know it. Emerson Murphy-Hill, Chris Parnin, Andrew P. Black ICSE 2009 How We Refactor, and How We Know it Emerson Murphy-Hill, Chris Parnin, Andrew P. Black ICSE 2009 Introduction Refactoring is the process of changing the structure of a program without changing the way

More information

SOFTWARE ENGINEERING SOFTWARE EVOLUTION. Saulius Ragaišis.

SOFTWARE ENGINEERING SOFTWARE EVOLUTION. Saulius Ragaišis. SOFTWARE ENGINEERING SOFTWARE EVOLUTION Saulius Ragaišis saulius.ragaisis@mif.vu.lt CSC2008 SE Software Evolution Learning Objectives: Identify the principal issues associated with software evolution and

More information

JUnit 3.8.1, 64. keep it simple stupid (KISS), 48

JUnit 3.8.1, 64. keep it simple stupid (KISS), 48 Index A accessor methods, 11, 152 add parameter technique, 189 190 add() method, 286 287, 291 algorithm, substituting, 104 105 AND logical operator, 172 architectural design patterns, 277 278 architecture,

More information

How We Refactor, and How We Know It

How We Refactor, and How We Know It IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. X, NO. T, MONTH YEAR 1 How We Refactor, and How We Know It Emerson Murphy-Hill, Chris Parnin, and Andrew P. Black Abstract Refactoring is widely practiced

More information

CSE 403 Lecture 21. Refactoring and Code Maintenance. Reading: Code Complete, Ch. 24, by S. McConnell Refactoring, by Fowler/Beck/Brant/Opdyke

CSE 403 Lecture 21. Refactoring and Code Maintenance. Reading: Code Complete, Ch. 24, by S. McConnell Refactoring, by Fowler/Beck/Brant/Opdyke CSE 403 Lecture 21 Refactoring and Code Maintenance Reading: Code Complete, Ch. 24, by S. McConnell Refactoring, by Fowler/Beck/Brant/Opdyke slides created by Marty Stepp http://www.cs.washington.edu/403/

More information

Small changes to code to improve it

Small changes to code to improve it Small changes to code to improve it 1 Refactoring Defined A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior

More information

Overview of Eclipse Lectures. Module Road Map

Overview of Eclipse Lectures. Module Road Map Overview of Eclipse Lectures 1. Overview 2. Installing and Running 3. Building and Running Java Classes 4. Refactoring Lecture 2 5. Debugging 6. Testing with JUnit 7. Version Control with CVS 1 Module

More information

Tutorial 02: Writing Source Code

Tutorial 02: Writing Source Code Tutorial 02: Writing Source Code Contents: 1. Generating a constructor. 2. Generating getters and setters. 3. Renaming a method. 4. Extracting a superclass. 5. Using other refactor menu items. 6. Using

More information

Index. Index. More information. block statements 66 y 107 Boolean 107 break 55, 68 built-in types 107

Index. Index. More information. block statements 66 y 107 Boolean 107 break 55, 68 built-in types 107 A abbreviations 17 abstract class 105 abstract data types 105 abstract method 105 abstract types 105 abstraction 92, 105 access level 37 package 114 private 115 protected 115 public 115 accessors 24, 105

More information

Composing Methods. Extract Method - Code that can be grouped - Meaningful name for method

Composing Methods. Extract Method - Code that can be grouped - Meaningful name for method Composing Methods Extract Method - Code that can be grouped - Meaningful name for method Inline Method - inverse of Extract Method - Method body is more obvious Extract Variable - Expression: hard to understand

More information

Implementing evolution: Refactoring

Implementing evolution: Refactoring 2IS55 Software Evolution Sources Implementing evolution: Refactoring Alexander Serebrenik / SET / W&I 17-5-2010 PAGE 1 Last week Problem: changing code is difficult Assignment 6 Deadline: Today Assignment

More information

AntiPatterns. EEC 421/521: Software Engineering. AntiPatterns: Structure. AntiPatterns: Motivation

AntiPatterns. EEC 421/521: Software Engineering. AntiPatterns: Structure. AntiPatterns: Motivation AntiPatterns EEC 421/521: Software Engineering Definition: An AntiPattern describes a commonly occurring solution to a problem that generates decidedly negative consequences Refactoring Reference: Refactoring

More information

Template-based Reconstruction of Complex Refactorings

Template-based Reconstruction of Complex Refactorings Template-based Reconstruction of Complex Refactorings Kyle Prete, Napol Rachatasumrit, Nikita Sudan, Miryung Kim Electrical and Computer Engineering The University of Texas at Austin Problem: Refactoring

More information

Refactoring with Eclipse

Refactoring with Eclipse Refactoring with Eclipse Seng 371 Lab 8 By Bassam Sayed Based on IBM article Explore refactoring functions in Eclipse JDT by Prashant Deva Code Refactoring Code refactoring is a disciplined way to restructure

More information

Evolving Software. CMSC 433 Programming Language Technologies and Paradigms Spring Example. Some Motivations for This Refactoring

Evolving Software. CMSC 433 Programming Language Technologies and Paradigms Spring Example. Some Motivations for This Refactoring CMSC 433 Programming Language Technologies and Paradigms Spring 2007 Refactoring April 24, 2007 Lots of material taken from Fowler, Refactoring: Improving the Design of Existing Code 1 Evolving Software

More information

Foundations of object orientation

Foundations of object orientation Foreword Preface List of projects discussed in detail in this book Acknowledgments Part 1 Chapter 1 Chapter 2 Foundations of object orientation Objects and classes 1.1 Objects and classes 1.2 Creating

More information

Administrivia. Programming Language Fall Example. Evolving Software. Project 3 coming out Midterm October 28. Refactoring October 14, 2004

Administrivia. Programming Language Fall Example. Evolving Software. Project 3 coming out Midterm October 28. Refactoring October 14, 2004 CMSC 433 Programming Language Fall 2004 Project 3 coming out Midterm October 28 Administrivia Refactoring October 14, 2004 Lots of material taken from Fowler, Refactoring: Improving the Design of Existing

More information

Compaq Interview Questions And Answers

Compaq Interview Questions And Answers Part A: Q1. What are the difference between java and C++? Java adopts byte code whereas C++ does not C++ supports destructor whereas java does not support. Multiple inheritance possible in C++ but not

More information

Course Description. Learn To: : Intro to JAVA SE7 and Programming using JAVA SE7. Course Outline ::

Course Description. Learn To: : Intro to JAVA SE7 and Programming using JAVA SE7. Course Outline :: Module Title Duration : Intro to JAVA SE7 and Programming using JAVA SE7 : 9 days Course Description The Java SE 7 Fundamentals course was designed to enable students with little or no programming experience

More information

104. Intermediate Java Programming

104. Intermediate Java Programming 104. Intermediate Java Programming Version 6.0 This course teaches programming in the Java language -- i.e. the Java Standard Edition platform. It is intended for students with previous Java experience

More information

Lab Exercise Refactoring using Eclipse

Lab Exercise Refactoring using Eclipse Lunds tekniska högskola Datavetenskap, Nov, 2017 Torbjörn Ekman and Görel Hedin (Modified from cvs to git by Ulf Asklund) EDAF45 Programvaruutveckling i grupp projekt Lab Exercise Refactoring using Eclipse

More information

Java SE7 Fundamentals

Java SE7 Fundamentals Java SE7 Fundamentals Introducing the Java Technology Relating Java with other languages Showing how to download, install, and configure the Java environment on a Windows system. Describing the various

More information

EINDHOVEN UNIVERSITY OF TECHNOLOGY

EINDHOVEN UNIVERSITY OF TECHNOLOGY EINDHOVEN UNIVERSITY OF TECHNOLOGY Department of Mathematics & Computer Science Exam Programming Methods, 2IP15, Wednesday 17 April 2013, 09:00 12:00 TU/e THIS IS THE EXAMINER S COPY WITH (POSSIBLY INCOMPLETE)

More information

Implementing evolution: Refactoring

Implementing evolution: Refactoring 2IS55 Software Evolution Implementing evolution: Refactoring Alexander Serebrenik Sources / SET / W&I 5-6-2012 PAGE 1 Last week How to implement evolution Last week: evolution strategies and decision making

More information

Refactoring Practice: How it is and How it Should be Supported An Eclipse Case Study Abstract Introduction

Refactoring Practice: How it is and How it Should be Supported An Eclipse Case Study Abstract Introduction Refactoring Practice: How it is and How it Should be Supported An Eclipse Case Study Zhenchang Xing and Eleni Stroulia Computing Science Department University of Alberta Edmonton AB, T6G 2H1, Canada {xing,stroulia}@cs.ualberta.ca

More information

Chapter 5 Object-Oriented Programming

Chapter 5 Object-Oriented Programming Chapter 5 Object-Oriented Programming Develop code that implements tight encapsulation, loose coupling, and high cohesion Develop code that demonstrates the use of polymorphism Develop code that declares

More information

Absolute C++ Walter Savitch

Absolute C++ Walter Savitch Absolute C++ sixth edition Walter Savitch Global edition This page intentionally left blank Absolute C++, Global Edition Cover Title Page Copyright Page Preface Acknowledgments Brief Contents Contents

More information

Refactoring. Section (JIA s) OTHER SOURCES

Refactoring. Section (JIA s) OTHER SOURCES Refactoring Section 7.2.1 (JIA s) OTHER SOURCES Code Evolution Programs evolve and code is NOT STATIC Code duplication Outdated knowledge (now you know more) Rethink earlier decisions and rework portions

More information

Index. Bitwise operations, 131. Cloud, 88, 101

Index. Bitwise operations, 131. Cloud, 88, 101 Index A Analysis, NetBeans batch analyzers, 127 dynamic code analysis, 128 Java 8 lambda expressions, 127 static code analysis definition, 128 FindBugs categories, 144 Inspect & Transform tool, 129 inspections,

More information

Patterns in Software Engineering

Patterns in Software Engineering Patterns in Software Engineering Lecturer: Raman Ramsin Lecture 10 Refactoring Patterns Part 1 1 Refactoring: Definition Refactoring: A change made to the internal structure of software to make it easier

More information

Programming Kotlin. Familiarize yourself with all of Kotlin s features with this in-depth guide. Stephen Samuel Stefan Bocutiu BIRMINGHAM - MUMBAI

Programming Kotlin. Familiarize yourself with all of Kotlin s features with this in-depth guide. Stephen Samuel Stefan Bocutiu BIRMINGHAM - MUMBAI Programming Kotlin Familiarize yourself with all of Kotlin s features with this in-depth guide Stephen Samuel Stefan Bocutiu BIRMINGHAM - MUMBAI Programming Kotlin Copyright 2017 Packt Publishing First

More information

Objects First with Java

Objects First with Java ^ Objects First with Java A Practical Introduction using BlueJ David J. Barnes and Michael Kolling Second edition PEARSON Prentice Hall Harlow, England London New York Boston San Francisco Toronto Sydney

More information

Review sheet for Final Exam (List of objectives for this course)

Review sheet for Final Exam (List of objectives for this course) Review sheet for Final Exam (List of objectives for this course) Please be sure to see other review sheets for this semester Please be sure to review tests from this semester Week 1 Introduction Chapter

More information

Whidbey Enhancements to C# Jeff Vaughan MSBuild Team July 21, 2004

Whidbey Enhancements to C# Jeff Vaughan MSBuild Team July 21, 2004 Whidbey Enhancements to C# Jeff Vaughan MSBuild Team July 21, 2004 Outline Practical Partial types Static classes Extern and the namespace alias qualifier Cool (and practical too) Generics Nullable Types

More information

Enterprise Architect Training Courses

Enterprise Architect Training Courses On-site training from as little as 135 per delegate per day! Enterprise Architect Training Courses Tassc trainers are expert practitioners in Enterprise Architect with over 10 years experience in object

More information

DOWNLOAD PDF CORE JAVA APTITUDE QUESTIONS AND ANSWERS

DOWNLOAD PDF CORE JAVA APTITUDE QUESTIONS AND ANSWERS Chapter 1 : Chapter-wise Java Multiple Choice Questions and Answers Interview MCQs Java Programming questions and answers with explanation for interview, competitive examination and entrance test. Fully

More information

Construction: High quality code for programming in the large

Construction: High quality code for programming in the large Construction: High quality code for programming in the large Paul Jackson School of Informatics University of Edinburgh What is high quality code? High quality code does what it is supposed to do......

More information

Programming in Scala Second Edition

Programming in Scala Second Edition Programming in Scala Second Edition Martin Odersky, Lex Spoon, Bill Venners artima ARTIMA PRESS WALNUT CREEK, CALIFORNIA Contents Contents List of Figures List of Tables List of Listings Foreword Foreword

More information

Object-Oriented Design

Object-Oriented Design Object-Oriented Design Lecture 14: Design Workflow Department of Computer Engineering Sharif University of Technology 1 UP iterations and workflow Workflows Requirements Analysis Phases Inception Elaboration

More information

Recap: Class Diagrams

Recap: Class Diagrams Com S 362: Object-Oriented Analysis and Design Recap: Class Diagrams Class diagrams represent design structure Three parts: name, attribute, operations Visibility, attribute type, multiplicity Association,

More information

Get Unique study materials from

Get Unique study materials from Downloaded from www.rejinpaul.com VALLIAMMAI ENGNIEERING COLLEGE SRM Nagar, Kattankulathur 603203. DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING Year & Semester : IV Section : EEE - 1 & 2 Subject Code

More information

CONTENTS. PART 1 Structured Programming 1. 1 Getting started 3. 2 Basic programming elements 17

CONTENTS. PART 1 Structured Programming 1. 1 Getting started 3. 2 Basic programming elements 17 List of Programs xxv List of Figures xxix List of Tables xxxiii Preface to second version xxxv PART 1 Structured Programming 1 1 Getting started 3 1.1 Programming 3 1.2 Editing source code 5 Source code

More information

Magento Technical Guidelines

Magento Technical Guidelines Magento Technical Guidelines Eugene Shakhsuvarov, Software Engineer @ Magento 2018 Magento, Inc. Page 1 Magento 2 Technical Guidelines Document which describes the desired technical state of Magento 2

More information

PROCESS DEVELOPMENT METHODOLOGY The development process of an API fits the most fundamental iterative code development

PROCESS DEVELOPMENT METHODOLOGY The development process of an API fits the most fundamental iterative code development INTRODUCING API DESIGN PRINCIPLES IN CS2 Jaime Niño Computer Science, University of New Orleans New Orleans, LA 70148 504-280-7362 jaime@cs.uno.edu ABSTRACT CS2 provides a great opportunity to teach an

More information

C++ (Non for C Programmer) (BT307) 40 Hours

C++ (Non for C Programmer) (BT307) 40 Hours C++ (Non for C Programmer) (BT307) 40 Hours Overview C++ is undoubtedly one of the most widely used programming language for implementing object-oriented systems. The C++ language is based on the popular

More information

Selenium Testing Course Content

Selenium Testing Course Content Selenium Testing Course Content Introduction What is automation testing? What is the use of automation testing? What we need to Automate? What is Selenium? Advantages of Selenium What is the difference

More information

CORE JAVA TRAINING COURSE CONTENT

CORE JAVA TRAINING COURSE CONTENT CORE JAVA TRAINING COURSE CONTENT SECTION 1 : INTRODUCTION Introduction about Programming Language Paradigms Why Java? Flavors of Java. Java Designing Goal. Role of Java Programmer in Industry Features

More information

be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate

be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate UNIT 4 GRASP GRASP: Designing objects with responsibilities Creator Information expert Low Coupling Controller High Cohesion Designing for visibility - Applying GoF design patterns adapter, singleton,

More information

CSE 70 Final Exam Fall 2009

CSE 70 Final Exam Fall 2009 Signature cs70f Name Student ID CSE 70 Final Exam Fall 2009 Page 1 (10 points) Page 2 (16 points) Page 3 (22 points) Page 4 (13 points) Page 5 (15 points) Page 6 (20 points) Page 7 (9 points) Page 8 (15

More information

EECS 4314 Advanced Software Engineering. Topic 10: Software Refactoring Zhen Ming (Jack) Jiang

EECS 4314 Advanced Software Engineering. Topic 10: Software Refactoring Zhen Ming (Jack) Jiang EECS 4314 Advanced Software Engineering Topic 10: Software Refactoring Zhen Ming (Jack) Jiang Acknowledgement Some slides are adapted from Professor Marty Stepp, Professor Oscar Nierstrasz Relevant Readings

More information

Kerievsky_book.fm Page 355 Thursday, July 8, :12 PM. Index

Kerievsky_book.fm Page 355 Thursday, July 8, :12 PM. Index Kerievsky_book.fm Page 355 Thursday, July 8, 2004 12:12 PM Index A Absorbing class, 117 Abstract Factory, 70 71 Accept methods, 327 Accumulation methods, 315, 325 330 Accumulation refactorings Collecting

More information

News in RSA-RTE 10.0 updated for sprint Mattias Mohlin/Anders Ek, June 2016

News in RSA-RTE 10.0 updated for sprint Mattias Mohlin/Anders Ek, June 2016 News in RSA-RTE 10.0 updated for sprint 2016.29 Mattias Mohlin/Anders Ek, June 2016 Overview of Improvements (1/3) Now based on Eclipse Mars (4.5.2) New installation scheme RSARTE is now installed as a

More information

Refactoring. Refactoring Techniques

Refactoring. Refactoring Techniques Refactoring Refactoring Techniques Code Quality is Important! Refactoring is... A disciplined technique for restructuring an existing body of code, altering its internal structure without changing its

More information

Refactoring. Chen Tang March 3, 2004

Refactoring. Chen Tang March 3, 2004 Refactoring Chen Tang March 3, 2004 What Is Refactoring (Definition) Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet

More information

Think of drawing/diagramming editors. ECE450 Software Engineering II. The problem. The Composite pattern

Think of drawing/diagramming editors. ECE450 Software Engineering II. The problem. The Composite pattern Think of drawing/diagramming editors ECE450 Software Engineering II Drawing/diagramming editors let users build complex diagrams out of simple components The user can group components to form larger components......which

More information

Java: introduction to object-oriented features

Java: introduction to object-oriented features Chair of Software Engineering Carlo A. Furia, Marco Piccioni, Bertrand Meyer Java: introduction to object-oriented features Chair of Software Engineering Carlo A. Furia, Marco Piccioni, Bertrand Meyer

More information

Web Application Design. Husni Husni.trunojoyo.ac.id

Web Application Design. Husni Husni.trunojoyo.ac.id Web Application Design Husni Husni.trunojoyo.ac.id Based on Randy Connolly and Ricardo Hoar Fundamentals of Web Development, Pearson Education, 2015 Objectives 1 Real World Web 2 Software Design Principle

More information

Refactoring. George Dinwiddie idia Computing, LLC

Refactoring. George Dinwiddie idia Computing, LLC Refactoring George Dinwiddie idia Computing, LLC http://idiacomputing.com http://blog.gdinwiddie.com What is Refactoring? Refactoring is a disciplined technique for restructuring an existing body of code,

More information

Imagine you ve written a piece of code but then accidentally deleted and lost it.

Imagine you ve written a piece of code but then accidentally deleted and lost it. Why Refactor? Imagine you ve written a piece of code but then accidentally deleted and lost it. Questions: How much time would it take you to reconstruct from scratch what you had the same amount, or more,

More information

News in RSA-RTE 10.2 updated for sprint Mattias Mohlin, May 2018

News in RSA-RTE 10.2 updated for sprint Mattias Mohlin, May 2018 News in RSA-RTE 10.2 updated for sprint 2018.18 Mattias Mohlin, May 2018 Overview Now based on Eclipse Oxygen.3 (4.7.3) Contains everything from RSARTE 10.1 and also additional features and bug fixes See

More information

CS Internet programming Unit- I Part - A 1 Define Java. 2. What is a Class? 3. What is an Object? 4. What is an Instance?

CS Internet programming Unit- I Part - A 1 Define Java. 2. What is a Class? 3. What is an Object? 4. What is an Instance? CS6501 - Internet programming Unit- I Part - A 1 Define Java. Java is a programming language expressly designed for use in the distributed environment of the Internet. It was designed to have the "look

More information

Synchronization SPL/2010 SPL/20 1

Synchronization SPL/2010 SPL/20 1 Synchronization 1 Overview synchronization mechanisms in modern RTEs concurrency issues places where synchronization is needed structural ways (design patterns) for exclusive access 2 Overview synchronization

More information

Big Java Late Objects

Big Java Late Objects Big Java Late Objects Horstmann, Cay S. ISBN-13: 9781118087886 Table of Contents 1. Introduction 1.1 Computer Programs 1.2 The Anatomy of a Computer 1.3 The Java Programming Language 1.4 Becoming Familiar

More information

The Design Process. General Development Issues. C/C++ and OO Rules of Thumb. Home

The Design Process. General Development Issues. C/C++ and OO Rules of Thumb. Home A l l e n I. H o l u b & A s s o c i a t e s Home C/C++ and OO Rules of Thumb The following list is essentially the table of contents for my book Enough Rope to Shoot Yourself in the Foot (McGraw-Hill,

More information

Java SE 8 Programming

Java SE 8 Programming Oracle University Contact Us: +52 1 55 8525 3225 Java SE 8 Programming Duration: 5 Days What you will learn This Java SE 8 Programming training covers the core language features and Application Programming

More information

Short Notes of CS201

Short Notes of CS201 #includes: Short Notes of CS201 The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with < and > if the file is a system

More information

Chapter 12. OOP: Creating Object-Oriented Programs The McGraw-Hill Companies, Inc. All rights reserved. McGraw-Hill

Chapter 12. OOP: Creating Object-Oriented Programs The McGraw-Hill Companies, Inc. All rights reserved. McGraw-Hill Chapter 12 OOP: Creating Object-Oriented Programs McGraw-Hill 2010 The McGraw-Hill Companies, Inc. All rights reserved. Chapter Objectives - 1 Use object-oriented terminology correctly Create a two-tier

More information

Chapter 3. Interactive Software Development Assistants Logic-based Software Representation. Logic-based Software Analysis

Chapter 3. Interactive Software Development Assistants Logic-based Software Representation. Logic-based Software Analysis Advanced Logic Programming Summer semester 2012 R O O T S Chapter 3. Logic-based Analysis Interactive Development Assistants Logic-based Representation Logic-based Analysis Logic-based Transformation Motivation

More information

Software Design COSC 4353/6353 D R. R A J S I N G H

Software Design COSC 4353/6353 D R. R A J S I N G H Software Design COSC 4353/6353 D R. R A J S I N G H Week 5 Refactoring What is Refactoring? Code Smells Why Refactoring? Techniques IDEs What is Refactoring? Art of improving the design of existing code

More information

Badge#8: Geek Refactoring

Badge#8: Geek Refactoring Badge#8: Geek Refactoring Nuno Pombo, Qualidade de Software, 2018/19 1 When To Refactor? Rule of Three When adding a feature When fixing a bug During a code review 2 How To Refactor? The code should become

More information

Chapter 11 Object and Object- Relational Databases

Chapter 11 Object and Object- Relational Databases Chapter 11 Object and Object- Relational Databases Copyright 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 11 Outline Overview of Object Database Concepts Object-Relational

More information

What Kinds of Refactorings are Co-occurred? An Analysis of Eclipse Usage Datasets

What Kinds of Refactorings are Co-occurred? An Analysis of Eclipse Usage Datasets 2014 6th International Workshop on Empirical Software Engineering in Practice What Kinds of Refactorings are Co-occurred? An Analysis of Eclipse Usage Datasets Tsubasa Saika 1, Eunjong Choi 1, Norihiro

More information

Intro to Haskell Notes: Part 5

Intro to Haskell Notes: Part 5 Intro to Haskell Notes: Part 5 Adrian Brasoveanu October 5, 2013 Contents 1 Curried functions and related issues 1 1.1 Curried functions......................................... 1 1.2 Partially applied

More information

Software Engineering /48

Software Engineering /48 Software Engineering 1 /48 Topics 1. The Compilation Process and You 2. Polymorphism and Composition 3. Small Functions 4. Comments 2 /48 The Compilation Process and You 3 / 48 1. Intro - How do you turn

More information

CS201 - Introduction to Programming Glossary By

CS201 - Introduction to Programming Glossary By CS201 - Introduction to Programming Glossary By #include : The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with

More information

Architectural Styles. Reid Holmes

Architectural Styles. Reid Holmes Material and some slide content from: - Emerson Murphy-Hill - Software Architecture: Foundations, Theory, and Practice - Essential Software Architecture Architectural Styles Reid Holmes Lecture 5 - Tuesday,

More information

AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS

AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS PAUL L. BAILEY Abstract. This documents amalgamates various descriptions found on the internet, mostly from Oracle or Wikipedia. Very little of this

More information

Type Hierarchy. Comp-303 : Programming Techniques Lecture 9. Alexandre Denault Computer Science McGill University Winter 2004

Type Hierarchy. Comp-303 : Programming Techniques Lecture 9. Alexandre Denault Computer Science McGill University Winter 2004 Type Hierarchy Comp-303 : Programming Techniques Lecture 9 Alexandre Denault Computer Science McGill University Winter 2004 February 16, 2004 Lecture 9 Comp 303 : Programming Techniques Page 1 Last lecture...

More information

Week. Lecture Topic day (including assignment/test) 1 st 1 st Introduction to Module 1 st. Practical

Week. Lecture Topic day (including assignment/test) 1 st 1 st Introduction to Module 1 st. Practical Name of faculty: Gaurav Gambhir Discipline: Computer Science Semester: 6 th Subject: CSE 304 N - Essentials of Information Technology Lesson Plan Duration: 15 Weeks (from January, 2018 to April, 2018)

More information

Understading Refactorings

Understading Refactorings Understading Refactorings Ricardo Terra terra@dcc.ufmg.br Marco Túlio Valente mtov@dcc.ufmg.br UFMG, 2010 UFMG, 2010 Understanding Refactorings 1 / 36 Agenda 1 Overview 2 Refactoring 3 Final Considerations

More information

Weiss Chapter 1 terminology (parenthesized numbers are page numbers)

Weiss Chapter 1 terminology (parenthesized numbers are page numbers) Weiss Chapter 1 terminology (parenthesized numbers are page numbers) assignment operators In Java, used to alter the value of a variable. These operators include =, +=, -=, *=, and /=. (9) autoincrement

More information

Hugbúnaðarverkefni 2 - Static Analysis

Hugbúnaðarverkefni 2 - Static Analysis Time to do some refactoring of my Java. Hugbúnaðarverkefni 2 - Static Analysis Fyrirlestrar 7 & 8 A Refactoring Micro-Example 15/01/2006 Dr Andy Brooks 1 Case Study Dæmisaga Reference A Refactoring Micro-Example,

More information

The pre-processor (cpp for C-Pre-Processor). Treats all # s. 2 The compiler itself (cc1) this one reads text without any #include s

The pre-processor (cpp for C-Pre-Processor). Treats all # s. 2 The compiler itself (cc1) this one reads text without any #include s Session 2 - Classes in C++ Dr Christos Kloukinas City, UoL http://staff.city.ac.uk/c.kloukinas/cpp (slides originally produced by Dr Ross Paterson) A C++ source file may contain: include directives #include

More information

Reengineering II. Transforming the System

Reengineering II. Transforming the System Reengineering II Transforming the System Recap: Reverse Engineering We have a detailed impression of the current state We identified the important parts We identified reengineering opportunities We have

More information

The following topics will be covered in this course (not necessarily in this order).

The following topics will be covered in this course (not necessarily in this order). The following topics will be covered in this course (not necessarily in this order). Introduction The course focuses on systematic design of larger object-oriented programs. We will introduce the appropriate

More information

Java SE 8 Programming

Java SE 8 Programming Java SE 8 Programming Training Calendar Date Training Time Location 16 September 2019 5 Days Bilginç IT Academy 28 October 2019 5 Days Bilginç IT Academy Training Details Training Time : 5 Days Capacity

More information

DOT NET Syllabus (6 Months)

DOT NET Syllabus (6 Months) DOT NET Syllabus (6 Months) THE COMMON LANGUAGE RUNTIME (C.L.R.) CLR Architecture and Services The.Net Intermediate Language (IL) Just- In- Time Compilation and CLS Disassembling.Net Application to IL

More information

The New Java Technology Memory Model

The New Java Technology Memory Model The New Java Technology Memory Model java.sun.com/javaone/sf Jeremy Manson and William Pugh http://www.cs.umd.edu/~pugh 1 Audience Assume you are familiar with basics of Java technology-based threads (

More information

COPYRIGHTED MATERIAL. Table of Contents. Foreword... xv. About This Book... xvii. About The Authors... xxiii. Guide To The Reader...

COPYRIGHTED MATERIAL. Table of Contents. Foreword... xv. About This Book... xvii. About The Authors... xxiii. Guide To The Reader... Table of Contents Foreword..................... xv About This Book... xvii About The Authors............... xxiii Guide To The Reader.............. xxvii Part I Some Concepts.................. 1 1 On Patterns

More information

Chapter 6 Introduction to Defining Classes

Chapter 6 Introduction to Defining Classes Introduction to Defining Classes Fundamentals of Java: AP Computer Science Essentials, 4th Edition 1 Objectives Design and implement a simple class from user requirements. Organize a program in terms of

More information

Concepts of Programming Languages

Concepts of Programming Languages Concepts of Programming Languages Lecture 10 - Object-Oriented Programming Patrick Donnelly Montana State University Spring 2014 Patrick Donnelly (Montana State University) Concepts of Programming Languages

More information

Software Development & Education Center. Java Platform, Standard Edition 7 (JSE 7)

Software Development & Education Center. Java Platform, Standard Edition 7 (JSE 7) Software Development & Education Center Java Platform, Standard Edition 7 (JSE 7) Detailed Curriculum Getting Started What Is the Java Technology? Primary Goals of the Java Technology The Java Virtual

More information

Comparing Approaches to Analyze Refactoring Activity on Software Repositories

Comparing Approaches to Analyze Refactoring Activity on Software Repositories Comparing Approaches to Analyze Refactoring Activity on Software Repositories Gustavo Soares a,, Rohit Gheyi a, Emerson Murphy-Hill b, Brittany Johnson b a Department of Computing and Systems, Federal

More information

CS 6456 OBJCET ORIENTED PROGRAMMING IV SEMESTER/EEE

CS 6456 OBJCET ORIENTED PROGRAMMING IV SEMESTER/EEE CS 6456 OBJCET ORIENTED PROGRAMMING IV SEMESTER/EEE PART A UNIT I 1. Differentiate object oriented programming from procedure oriented programming. 2. Define abstraction and encapsulation. 3. Differentiate

More information

Object Oriented Programming in Java. Jaanus Pöial, PhD Tallinn, Estonia

Object Oriented Programming in Java. Jaanus Pöial, PhD Tallinn, Estonia Object Oriented Programming in Java Jaanus Pöial, PhD Tallinn, Estonia Motivation for Object Oriented Programming Decrease complexity (use layers of abstraction, interfaces, modularity,...) Reuse existing

More information

International Journal for Management Science And Technology (IJMST)

International Journal for Management Science And Technology (IJMST) Volume 4; Issue 03 Manuscript- 1 ISSN: 2320-8848 (Online) ISSN: 2321-0362 (Print) International Journal for Management Science And Technology (IJMST) GENERATION OF SOURCE CODE SUMMARY BY AUTOMATIC IDENTIFICATION

More information

INTRODUCTION TO.NET. Domain of.net D.N.A. Architecture One Tier Two Tier Three Tier N-Tier THE COMMON LANGUAGE RUNTIME (C.L.R.)

INTRODUCTION TO.NET. Domain of.net D.N.A. Architecture One Tier Two Tier Three Tier N-Tier THE COMMON LANGUAGE RUNTIME (C.L.R.) INTRODUCTION TO.NET Domain of.net D.N.A. Architecture One Tier Two Tier Three Tier N-Tier THE COMMON LANGUAGE RUNTIME (C.L.R.) CLR Architecture and Services The.Net Intermediate Language (IL) Just- In-

More information

Java SE 8 Programming

Java SE 8 Programming Oracle University Contact Us: Local: 1800 103 4775 Intl: +91 80 67863102 Java SE 8 Programming Duration: 5 Days What you will learn This Java SE 8 Programming training covers the core language features

More information

Training topic: OCPJP (Oracle certified professional Java programmer) or SCJP (Sun certified Java programmer) Content and Objectives

Training topic: OCPJP (Oracle certified professional Java programmer) or SCJP (Sun certified Java programmer) Content and Objectives Training topic: OCPJP (Oracle certified professional Java programmer) or SCJP (Sun certified Java programmer) Content and Objectives 1 Table of content TABLE OF CONTENT... 2 1. ABOUT OCPJP SCJP... 4 2.

More information

Refactorings. Refactoring. Refactoring Strategy. Demonstration: Refactoring and Reverse Engineering. Conclusion

Refactorings. Refactoring. Refactoring Strategy. Demonstration: Refactoring and Reverse Engineering. Conclusion Refactorings Refactoring What is it? Why is it necessary? Examples Tool support Refactoring Strategy Code Smells Examples of Cure Demonstration: Refactoring and Reverse Engineering Refactor to Understand

More information