SlideShare uma empresa Scribd logo
1 de 52
How to fix a code
to not corrupt an app
Michał Łukaszewski
Software Engineer, Intel
/m_lukaszewski
豊田 佐吉
1867- 1930
豊田 喜一郎
1894-1952
大野 耐
1912-1990
• Refactoring is (continuous) process, not an action.
When you look into an abyss, the abyss also looks into you.
Friedrich Nietzsche
worthiness &
principles
Technical
• Refactoring is (continuous) process, not an action.
• Refactoring is not
• Bugfix,
• Security fix,
• Optimization.
Martin Fowler
• Refactoring is (continuous) process, not an action.
• Refactoring is not
• Bugfix,
• Security fix,
• Optimization.
• Refactoring should provide (a lot of small) improvements.
Is it mess?
Or complex?
Or too
complex for
human
being?
Team
changed?
To measure
this,
you have.
Michael
Feathers
Christophe
Philemotte
• Refactoring is (continuous) process not an action.
• Refactoring is not
• Bugfix,
• Security fix,
• Optimization.
• Refactoring should provide (a lot of small) improvements.
• Refactoring should be founded on knowledge (measures).
https://twitter.com/ziobrando/status/741186560373186560
https://martinfowler.com/bliki/Yagni.html
• Refactoring is (continuous) process, not an action.
• Refactoring is not
• Bugfix,
• Security fix,
• Optimization.
• Refactoring should provide (a lot of small) improvements.
• Refactoring should be founded on knowledge (measures).
• Refactoring should improve only what needs improvement.
改善
改善
Kai Zen

Mais conteúdo relacionado

Semelhante a How to fix a code to not corrupt an application

Continuous Deployment
Continuous DeploymentContinuous Deployment
Continuous DeploymentBrian Henerey
 
2011 06 15 velocity conf from visible ops to dev ops final
2011 06 15 velocity conf   from visible ops to dev ops final2011 06 15 velocity conf   from visible ops to dev ops final
2011 06 15 velocity conf from visible ops to dev ops finalGene Kim
 
Rational User Group - May 2014 Stockholm - DevOps from an EA perspective
Rational User Group - May 2014 Stockholm - DevOps from an EA perspectiveRational User Group - May 2014 Stockholm - DevOps from an EA perspective
Rational User Group - May 2014 Stockholm - DevOps from an EA perspectiveJoakim Lindbom
 
2011 09 19 LSPE Dev Ops Cookbook 1a
2011 09 19 LSPE Dev Ops Cookbook 1a2011 09 19 LSPE Dev Ops Cookbook 1a
2011 09 19 LSPE Dev Ops Cookbook 1aGene Kim
 
Winnipeg ISACA Security is Dead, Rugged DevOps
Winnipeg ISACA Security is Dead, Rugged DevOpsWinnipeg ISACA Security is Dead, Rugged DevOps
Winnipeg ISACA Security is Dead, Rugged DevOpsGene Kim
 
Manufacturing simulation
Manufacturing simulationManufacturing simulation
Manufacturing simulationsameer agrawal
 
Best Practices - Software Engineering
Best Practices - Software EngineeringBest Practices - Software Engineering
Best Practices - Software Engineering3Quill Softwares
 
DevOps - Applying Lean & Agile Principles to Operations & More
DevOps - Applying Lean & Agile Principles to Operations & MoreDevOps - Applying Lean & Agile Principles to Operations & More
DevOps - Applying Lean & Agile Principles to Operations & MoreChris Edwards
 
Normal accidents and outpatient surgeries
Normal accidents and outpatient surgeriesNormal accidents and outpatient surgeries
Normal accidents and outpatient surgeriesJonathan Creasy
 
Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...Wojciech Seliga
 
sitHH16 - The Implications of Becoming Agile
sitHH16 - The Implications of Becoming AgilesitHH16 - The Implications of Becoming Agile
sitHH16 - The Implications of Becoming AgileMarkus Theilen
 
DevOps Theory vs. Practice: A Song of Ice and Tire Fire
DevOps Theory vs. Practice: A Song of Ice and Tire FireDevOps Theory vs. Practice: A Song of Ice and Tire Fire
DevOps Theory vs. Practice: A Song of Ice and Tire FireLeon Stigter
 
DevOps and the Future of Information Security
DevOps and the Future of Information SecurityDevOps and the Future of Information Security
DevOps and the Future of Information SecurityDarin Morris
 
Infrastructure as code chez Scaleway
 Infrastructure as code chez Scaleway Infrastructure as code chez Scaleway
Infrastructure as code chez ScalewayScaleway
 
Purple Teaming - The Collaborative Future of Penetration Testing
Purple Teaming - The Collaborative Future of Penetration TestingPurple Teaming - The Collaborative Future of Penetration Testing
Purple Teaming - The Collaborative Future of Penetration TestingFRSecure
 
EVAIN Artificial intelligence and semantic annotation: are you serious about it?
EVAIN Artificial intelligence and semantic annotation: are you serious about it?EVAIN Artificial intelligence and semantic annotation: are you serious about it?
EVAIN Artificial intelligence and semantic annotation: are you serious about it?FIAT/IFTA
 
stackconf 2023 | Continuous Deployment Workflows by Marco Otto-Witte.pdf
stackconf 2023 | Continuous Deployment Workflows by Marco Otto-Witte.pdfstackconf 2023 | Continuous Deployment Workflows by Marco Otto-Witte.pdf
stackconf 2023 | Continuous Deployment Workflows by Marco Otto-Witte.pdfNETWAYS
 
2015 10 dev ops n-fi - why it's a good idea to deploy 10 times per day v1.0 -...
2015 10 dev ops n-fi - why it's a good idea to deploy 10 times per day v1.0 -...2015 10 dev ops n-fi - why it's a good idea to deploy 10 times per day v1.0 -...
2015 10 dev ops n-fi - why it's a good idea to deploy 10 times per day v1.0 -...Joakim Lindbom
 

Semelhante a How to fix a code to not corrupt an application (20)

Continuous Deployment
Continuous DeploymentContinuous Deployment
Continuous Deployment
 
2011 06 15 velocity conf from visible ops to dev ops final
2011 06 15 velocity conf   from visible ops to dev ops final2011 06 15 velocity conf   from visible ops to dev ops final
2011 06 15 velocity conf from visible ops to dev ops final
 
Rational User Group - May 2014 Stockholm - DevOps from an EA perspective
Rational User Group - May 2014 Stockholm - DevOps from an EA perspectiveRational User Group - May 2014 Stockholm - DevOps from an EA perspective
Rational User Group - May 2014 Stockholm - DevOps from an EA perspective
 
2011 09 19 LSPE Dev Ops Cookbook 1a
2011 09 19 LSPE Dev Ops Cookbook 1a2011 09 19 LSPE Dev Ops Cookbook 1a
2011 09 19 LSPE Dev Ops Cookbook 1a
 
Winnipeg ISACA Security is Dead, Rugged DevOps
Winnipeg ISACA Security is Dead, Rugged DevOpsWinnipeg ISACA Security is Dead, Rugged DevOps
Winnipeg ISACA Security is Dead, Rugged DevOps
 
Manufacturing simulation
Manufacturing simulationManufacturing simulation
Manufacturing simulation
 
Best Practices - Software Engineering
Best Practices - Software EngineeringBest Practices - Software Engineering
Best Practices - Software Engineering
 
DevOps - Applying Lean & Agile Principles to Operations & More
DevOps - Applying Lean & Agile Principles to Operations & MoreDevOps - Applying Lean & Agile Principles to Operations & More
DevOps - Applying Lean & Agile Principles to Operations & More
 
Normal accidents and outpatient surgeries
Normal accidents and outpatient surgeriesNormal accidents and outpatient surgeries
Normal accidents and outpatient surgeries
 
Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...
 
sitHH16 - The Implications of Becoming Agile
sitHH16 - The Implications of Becoming AgilesitHH16 - The Implications of Becoming Agile
sitHH16 - The Implications of Becoming Agile
 
DevOps Theory vs. Practice: A Song of Ice and Tire Fire
DevOps Theory vs. Practice: A Song of Ice and Tire FireDevOps Theory vs. Practice: A Song of Ice and Tire Fire
DevOps Theory vs. Practice: A Song of Ice and Tire Fire
 
DevOps and the Future of Information Security
DevOps and the Future of Information SecurityDevOps and the Future of Information Security
DevOps and the Future of Information Security
 
Infrastructure as code chez Scaleway
 Infrastructure as code chez Scaleway Infrastructure as code chez Scaleway
Infrastructure as code chez Scaleway
 
Purple Teaming - The Collaborative Future of Penetration Testing
Purple Teaming - The Collaborative Future of Penetration TestingPurple Teaming - The Collaborative Future of Penetration Testing
Purple Teaming - The Collaborative Future of Penetration Testing
 
EVAIN Artificial intelligence and semantic annotation: are you serious about it?
EVAIN Artificial intelligence and semantic annotation: are you serious about it?EVAIN Artificial intelligence and semantic annotation: are you serious about it?
EVAIN Artificial intelligence and semantic annotation: are you serious about it?
 
stackconf 2023 | Continuous Deployment Workflows by Marco Otto-Witte.pdf
stackconf 2023 | Continuous Deployment Workflows by Marco Otto-Witte.pdfstackconf 2023 | Continuous Deployment Workflows by Marco Otto-Witte.pdf
stackconf 2023 | Continuous Deployment Workflows by Marco Otto-Witte.pdf
 
2015 10 dev ops n-fi - why it's a good idea to deploy 10 times per day v1.0 -...
2015 10 dev ops n-fi - why it's a good idea to deploy 10 times per day v1.0 -...2015 10 dev ops n-fi - why it's a good idea to deploy 10 times per day v1.0 -...
2015 10 dev ops n-fi - why it's a good idea to deploy 10 times per day v1.0 -...
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
ROOTS2011 Continuous Delivery
ROOTS2011 Continuous DeliveryROOTS2011 Continuous Delivery
ROOTS2011 Continuous Delivery
 

Mais de Michal Lukaszewski

How we built a tools stack for the benchmarking AI and what happened next
How we built a tools stack for the benchmarking AI and what happened nextHow we built a tools stack for the benchmarking AI and what happened next
How we built a tools stack for the benchmarking AI and what happened nextMichal Lukaszewski
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówMichal Lukaszewski
 
Distributed Systems @ Code Europe
Distributed Systems @ Code EuropeDistributed Systems @ Code Europe
Distributed Systems @ Code EuropeMichal Lukaszewski
 
Budowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworkówBudowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworkówMichal Lukaszewski
 
Domain Events in Distributed Architecture
Domain Events in Distributed ArchitectureDomain Events in Distributed Architecture
Domain Events in Distributed ArchitectureMichal Lukaszewski
 
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadkuTechnologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadkuMichal Lukaszewski
 

Mais de Michal Lukaszewski (9)

How we built a tools stack for the benchmarking AI and what happened next
How we built a tools stack for the benchmarking AI and what happened nextHow we built a tools stack for the benchmarking AI and what happened next
How we built a tools stack for the benchmarking AI and what happened next
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędów
 
Distributed Systems @ Code Europe
Distributed Systems @ Code EuropeDistributed Systems @ Code Europe
Distributed Systems @ Code Europe
 
Budowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworkówBudowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworków
 
Domain Events in Distributed Architecture
Domain Events in Distributed ArchitectureDomain Events in Distributed Architecture
Domain Events in Distributed Architecture
 
Action Domain Response
Action Domain ResponseAction Domain Response
Action Domain Response
 
Wydajność i optymalizacja
Wydajność i optymalizacjaWydajność i optymalizacja
Wydajność i optymalizacja
 
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadkuTechnologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
 
Solid vs php
Solid vs phpSolid vs php
Solid vs php
 

Último

Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineeringssuserb3a23b
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
cpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptcpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptrcbcrtm
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 

Último (20)

Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineering
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
cpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.pptcpct NetworkING BASICS AND NETWORK TOOL.ppt
cpct NetworkING BASICS AND NETWORK TOOL.ppt
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Odoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting ServiceOdoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting Service
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 

How to fix a code to not corrupt an application

Notas do Editor

  1. Sakichi Toyoda Przemysł włókienniczy Wynalazca krosna zatrzymującego się przy zerwanej nici Automatyzował swoją fabrykę
  2. Kiichirō Toyoda Syn Sakichi W 1930 wyjechał do USA „z misją handlową” Podlądał Forda Wprowadził Toyotę na rynek samochodowy Just-in-Time – niskie koszty, jakość, eliminacja marnotrastwa na etapie procesu
  3. Taiichi Ōno Inżynier Toyoty Od połowy lat 40 zaczął wprowadzać narzędzia i zasady organizujące pracę w Toyota Production System Ojciec Lean Manufacturing z którego wywodzi się Lean Management.
  4. Jedna z najefektywniejszych metodyk zwinnych. I najtrudniejszych. Z niej wywodzi się kanban, skrzynki z sugestiami pracowników i wiele innych drobiazgów, które pomagają firmie usprawniać oraz kontrolować procesy tak by unikać marnotrastwa. Do realizacji Lean stosowanych jest wiele narzędzi i metodyk – najlepiej gdy dobrane są optymalnie dla typu organizacji, kultury kraju, dojrzałości zespołu.
  5. Jej celem jest ograniczenie kosztów przy zachowaniu sprawnego (just in time) dostarczania coaz wyższej jakości produktu – efektywność!
  6. Cykl Deminga  cykl PDCA z ang. Plan-Do-Check-Act lub cykl P-D-S-A z ang. Plan-Do-Study-Act P-D-C-A ZAPLANUJ (ang. Plan): Zaplanuj lepszy sposób działania, lepszą metodę. WYKONAJ, ZRÓB (ang. Do): Zrealizuj plan na próbę. SPRAWDŹ (ang. Check): Zbadaj, czy rzeczywiście nowy sposób działania przynosi lepsze rezultaty. POPRAW (ang. Act): Jeśli nowy sposób działania przynosi lepsze rezultaty, uznaj go za normę (obowiązującą procedurę), zestandaryzuj i monitoruj jego stosowanie.
  7. Edwards Deming w ostatnich latach życia zgłaszał zastrzeżenia do interpretacji trzeciego kroku cyklu, która jest zbyt uproszczona i nie ujmuje sensu metodyki tzw. projektowania eksperymentalnego (Design of Experiments, w skrócie DOE). Przywrócono P-D-S-A ZAPLANUJ (ang. Plan): Planuj każdą zmianę z wyprzedzeniem. Przeanalizuj obecną sytuację oraz potencjalne skutki zmian zanim jakiekolwiek podejmiesz. Z góry przemyśl, co powinieneś zmierzyć, aby przekonać się, czy zrealizowałeś swój zamiar. Zaplanuj pomiar, jako jeden z elementów realizacji zmiany. Myśl o pomiarze aż do następnego kroku (przez cały okres planowania). Opracuj plan wdrożenia zmiany, zadbaj przy tym o pełną obsadę tego przedsięwzięcia właściwym personelem oraz zaangażuj właścicieli procesów. WYKONAJ, ZRÓB (ang. Do): Przeprowadź pilotażowe wdrożenie zmiany w małej skali, w kontrolowanych warunkach (tzn. najpierw przeprowadź eksperyment, bądź zbuduj prototyp). ZBADAJ (ang. Study): Gruntownie przeanalizuj rezultaty eksperymentu. Wyprowadź wnioski – co zebrane dane mówią na temat skuteczności próbnego wdrożenia? ZASTOSUJ, DZIAŁAJ (ang. Act): Podejmij właściwe działania, aby wdrożyć standard takiego procesu, który wytworzył rezultaty najbardziej pożądane.
  8. Co powinno nam z łatwością skojarzyć się z TDD i jego słynnym Red-Green-Refactor Łeee, będzie o testach. Nie. Nie będzie o tym jak naprawiać kod. Zadamy sobie o wiele ważniejsze pytanie – dlaczego go naprawiać.
  9. Praca z przestarzałym kodem jest naturalna dla kazdego programisty. Niektórzy nawet czynią z tego pasję i specjalizację.  To super, tak długo jeśli ich pasja polega na wycianiu tego kodu do nowocześniejszej lub bardziej optymalnej formy.
  10. Rany boskie, ten znowu o kasie. To nie do końca mój pomysł :P
  11. główny naukowiec w Obtivia, specjalista od refaktoringu
  12. 6 lat temu napisał ciekawy artykuł o praktycznym podejściu do refaktoringyu  Zauważył, że pliki czy obszary aplikacji możemy podzielić na szybko zmienne i wolnozmienne
  13. A ponieważ każdy kawałek kodu w nich zawarty możemy podzielić wg jakości kodu, mierzonej na przykład złożonością cyklomatyczną powstaje ciekawy rozkład
  14. Nazywany dzisiaj potocznie kwadratem Featersa  Wprowadza on bardzo ciekawy podział aplikacji ułatwiając podejmowanie decyzji o miejscu, w którym należy rozpocząć poprawianie aplikacji.  Narzędzia, brzydkie-stabilne, małe, szybko zmienne ale stabilne i miejsca gdzie my, jako zespół, popłynęliśmy w nawarstwiające się pokłady... błedów projektowych.
  15. Oczywiście analiza statyczna daje nam więcej informoacji niźli tylko o złożoności.  Mamy do dyspozycji np mess detector czy copy-paste detector i ten ostatni dostarcza informacji o błędach projektowych naruszających zasadę DYI.
  16. O dry...
  17. Ok, ale analiza statyczna to nie wszystko na co nas stać.  Jednym z najczęściej pomijanych metod, która potrafi dostarcza niezwykle ważnych informacji z czysto biznesowego punktu widzenia jest profilowanie.  PRofilowanie pokazuje jak płyną dane w aplikacji, które jej części są najbardziej obciążane obsługą danej komendy i gdzie _sumarycznie_ idzie najwięcej zasobów.  Jest to metoda trudna i wymagająca wiedzy, ale przede wszystkim uczciwości w przygotowaniu i przeprowadzaniu pomiarów. Oraz interpretacji wyników.  Dlaczego to ważna biznesowo informacje? Bo uczciwie przeprowadzone daje informacje nt czasów reakcji aplikacji, zasobów koniecznych potrzebnych do zachowania budżetu wydajnościowego oraz pozwala prognozować dalsze inwestycje w sprzęt i optymalizacje kodu
  18. Te wszystkie pomiary są nam potrzebne, aby nie rozpoczynać zmian na podstawie przeczuć, poprawiając kod tam, gdzie kompletnie nie musi być poprawiany.
  19. Dzięki temu wiemy dokładnie co I DLACZEGO zmieniamy, a to (plus testy!) ma zabezpieczyć nas przed wprowadzeniem regresji, ale także...
  20. Przed przeginaniem pałki i marnowaniem czasu na coś, czego użytkownik po prostu nie potrzebuje.
  21. Naszym zadaniem jako inżynierów jest prostować zagmatwane wymagania, porządkować je i nadawać im sens. Naszym! Idealnie jest oczekiwać wspaniałej dokumentacji, ale jeśli jej nie otrzymamy to naszym obowiązkiem jest dopytać zamawiającego (mniej lub bardziej bezpośrednio), aby zrobić tylko to czego naprawdę chce.
  22. Refactoring to nieustający proces poprawy kodu aplikacji. I jako proces podlega dokładnie tym samym regułom co pisanie nowego kodu – bo w gruncie rzeczy i tak najczęściej piszemy kod, który ma zastąpić stary. Wykorzystaj regułę 8 godzin aby nie popłynąć z „usprawnieniami” w tygodnie. Poświęć na to jeden dzień i wróć do „zamówionych” zadań.
  23. Eksperymentuj z rozwiązaniami! Jeśli wprowadzasz relatywnie często małe usprawnienia to nawet jeśli któreś „nie pójdzie” – możesz je szybko zmienić na ulepszone, albo wycofać się ze zmiany!
  24. Tak więc zachowaj spokój i naprawiaj kod 