platinum sponsor large scale refactoring volodymyr fedak

51
Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Upload: kyleigh-casler

Post on 31-Mar-2015

234 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Platinum Sponsor

LARGE SCALE REFACTORINGVolodymyr Fedak

Page 2: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Who Am I

• Solution Architect at SoftServe with 9+ years experience in IT

• Ongoing project: Significant efforts are dedicated to the following quality attributes: testability, extensibility, maintainability

• A lot of efforts are spent on evolving legacy projects

Page 3: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Why do we change

code?

Why refactor?

Refactoring strategies

Case study

Summary

Agenda

Page 4: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Four Reasons to Change Software

Adding a feature Fixing a bug Improving

the design

Optimizing resource

usage

Page 5: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Any fool can write code that a computer can understand. Good

programmers write code that humans can understand

Page 6: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

What is not refactoring

Refactoring is not debugging

Refactoring is not performance

Refactoring is not adding a feature

Page 7: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

"Refactoring is a disciplined

technique for restructuring an

existing body of code, altering its

internal structure without changing

its external behavior."

What is refactoring?

Page 8: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Refactoring is an continuous process

Page 9: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Restructuring of existing code that has visible

influence to the overall system quality attributes.

What is large scale refactoring?

Page 10: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Why do we change

code?

Why refactor?

Refactoring strategies

Case study

Summary

Agenda

Page 11: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Success projects statistics

Page 12: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Legacy projects: technical perspective

Page 13: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Legacy projects team policies and practices

They minimize the number of changes that they make to the

code baseSometimes this is a team policy: "If it's not broken, don't fix it”Developers

What? Create another method for that? No, I'll just put the lines of code right here in the method,

where I can see them and the rest of the code. It involves less

editing, and it's safer

Page 14: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

After such policy

Page 15: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Refactoring helps

Make the code easier to understand

Make it easier to maintain codebase

Refactoring reduces your risk—can lead to lightweight pragmatic design

Improve code quality. You Can’t be Agile if your code sucks!

Page 16: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Refactoring principles

Don’t write code that’s really not needed, Code you don’t write, don’t have to be maintained!

Avoid Clever Code—Keep it Simple

Keep code DRY

Rely on automated tests

Page 17: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Refactoring principles

Checkin Frequently, take small steps

Make sense in seconds, not in minutes, hours, weeks, ...

Make code self documented

Page 18: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Why do we change

code?

Why to refactor

workable code?

Refactoring strategies

Case study

Summary

Agenda

Page 19: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Refactoring Catalog

Page 20: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Mikado method

A change

We need to change this

Page 21: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Mikado method

A change

When we changed this

Page 22: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

Mikado method

A change

So it’s time to note all prerequisites

Page 23: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

PrereqPrereq

Mikado method

A change

So it’s time to note all prerequisites

Page 24: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

PrereqPrereq

Mikado method

A change

So it’s time to note all prerequisites

Page 25: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

PrereqPrereq

Mikado method

A change

When we tried refactor this

Page 26: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

Prereq

Prereq

Mikado method

A change

We’ve got new errors

Page 27: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

Prereq

Prereq

Prereq

Prereq

Mikado method

A change

Noted new prerequisites

Page 28: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

Prereq

Prereq

Prereq

Prereq

Mikado method

A change

And reverted again

Page 29: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

Prereq

Prereq

Prereq

Prereq

Mikado method

A change

Until we could do prerequisites without errors

Page 30: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

Prereq

Prereq

Prereq

Prereq

Mikado method

A change

Page 31: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

Prereq

Prereq

Prereq

Prereq

Mikado method

A change

Working the way back to original change

Page 32: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Prereq

Prereq

Prereq

Prereq

Prereq

Mikado method

A change

Now the change is easy to implement

Page 33: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Benefits of such approach

Codebase every time is in good state

You won’t have such situation that time is go on and everything is broken

You always keep focus on target

Page 34: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Refactoring strategies

Big Bang - Define the structure for the final state and push code to its ultimate home

Divide and conquer - Try to separate the big ball of mud into two pieces. Repeat until

done...

Strangling

Page 35: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Why people like big bang?

Strangling is very expensive, It’s cute but not for us

We don’t have tight schedule for this refactoring, let’s safely make a changes in branch

We have to do a lot of changes we can’t divide problem into pieces

It’s a risky

Page 36: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Why do we need to refactor code ?

Did you face with such term as “Risky change” ?

Page 37: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

What information is hidden?

From practical standpoint big bang never happens

successfully

Page 38: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Why do we change

code?

Why to refactor

workable code?

Refactoring strategies

Case study

Summary

Agenda

Page 39: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Case study

What refactor strategy should be used ?

Big Bang - Define the structure for the final state and push code to its ultimate home

Divide and conquer - Try to separate the big ball of mud into two pieces. Repeat until

done...

Strangling

Page 40: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

We used mixed

Divide and conquer - Try to separate the big ball of mud into two pieces. Repeat until

done...

Strangling

Page 41: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Refactoring taxonomy

• Guarantee that we have reliable mechanism to check that everything works

• Create infrastructure to switch implementations

• Utilize dependency injection

• Finish refactoring (divide and conquer)

Page 42: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Guarantee that we have reliable mechanism to check that everything works

• Unit tests: create necessary coverage and verifications for authentication/authorization flows

• Initiated integration tests

• UI automation tests check that everything is verified

• Don’t forget about concurrent scenarios

Page 43: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Create infrastructure: gather old structure

Application

Security Old code structure

Session context

Page 44: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Create infrastructure: Create new structure

Application

Security Old Security New Adapter

35% of deal

Page 45: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Utilize Dependency Injection

Switch (web.xml)

Security Old (application context)

Security New (application context

Adapter APIInterfaces only

Security New classes (implemented in v2 package)

Spring managed context

Security Old classes(Current implementation)

Servlet session context

Application Code

Old Application boundaries

New application boundaries

Adapter classes

Page 46: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Finish refactoring: make new Security workable

Switch (web.xml)

Security New (application context

Adapter APIInterfaces only

Security New classes (implemented in v2 package)

Spring managed context

Application Code

New application boundaries

Page 47: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Finish refactoring drop old code

Switch (web.xml)

Security Old (application context)

Adapter APIInterfaces only

Security Old classes(Current implementation)

Servlet session context

Application Code

Old Application boundaries

Adapter classes

Page 48: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Summary

• Please don’t believe in risk• Write code that doesn’t require further

refactoring• In case you need to refactor a large project

please think 10 times before doing this.

Page 49: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Write code to have your house in good state

Page 51: Platinum Sponsor LARGE SCALE REFACTORING Volodymyr Fedak

Questions