Upload
michal-bartyzel
View
1.590
Download
0
Embed Size (px)
Citation preview
Jak zniszczyć swój kod? Podstawy lingwistyki dla programistów
Zwiększamy efektywność zespołów
projektowych
1
www.bnsit.pl
Michał Bartyzel mbartyzel.blogspot.com @MichalBartyzel Zwiększamy efektywność zespołów projektowych 2
www.bnsit.pl
Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem
Moja kinoteka
Dodaj serial
Dodaj odcinek
Opłacony/nieopłacony
Etykiety
Czas trwania: h 35 min.
Dr Home. Sezon 1 odcinek 29
Nonszalancja nazewnicza
Zwiększamy efektywność zespołów projektowych 3
www.bnsit.pl
Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem
Moja kinoteka Lista filmów
Dodaj serial
Dodaj odcinek
Opłacony/nieopłacony
Etykiety
Czas trwania: h 35 min.
Dr Home. Sezon 1 odcinek 29
Nonszalancja nazewnicza
Zwiększamy efektywność zespołów projektowych 4
www.bnsit.pl
Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem
Moja kinoteka Lista filmów
Dodaj serial Dodaj kategorię
Dodaj odcinek
Opłacony/nieopłacony
Etykiety
Czas trwania: h 35 min.
Dr Home. Sezon 1 odcinek 29
Nonszalancja nazewnicza
Zwiększamy efektywność zespołów projektowych 5
www.bnsit.pl
Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem
Moja kinoteka Lista filmów
Dodaj serial Dodaj kategorię
Dodaj odcinek Dodaj plik flv
Opłacony/nieopłacony
Etykiety
Czas trwania: h 35 min.
Dr Home. Sezon 1 odcinek 29
Nonszalancja nazewnicza
Zwiększamy efektywność zespołów projektowych 6
www.bnsit.pl
Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem
Moja kinoteka Lista filmów
Dodaj serial Dodaj kategorię
Dodaj odcinek Dodaj plik flv
Opłacony/nieopłacony Status [checkbox]
Etykiety
Czas trwania: h 35 min.
Dr Home. Sezon 1 odcinek 29
Nonszalancja nazewnicza
Zwiększamy efektywność zespołów projektowych 7
www.bnsit.pl
Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem
Moja kinoteka Lista filmów
Dodaj serial Dodaj kategorię
Dodaj odcinek Dodaj plik flv
Opłacony/nieopłacony Status [checkbox]
Etykiety Chmura tagów
Czas trwania: h 35 min.
Dr Home. Sezon 1 odcinek 29
Nonszalancja nazewnicza
Zwiększamy efektywność zespołów projektowych 8
www.bnsit.pl
Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem
Moja kinoteka Lista filmów
Dodaj serial Dodaj kategorię
Dodaj odcinek Dodaj plik flv
Opłacony/nieopłacony Status [checkbox]
Etykiety Chmura tagów
Czas trwania: h 35 min. Długość: 2 100 000 ms
Dr Home. Sezon 1 odcinek 29
Nonszalancja nazewnicza
Zwiększamy efektywność zespołów projektowych 9
www.bnsit.pl
Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem
Moja kinoteka Lista filmów
Dodaj serial Dodaj kategorię
Dodaj odcinek Dodaj plik flv
Opłacony/nieopłacony Status [checkbox]
Etykiety Chmura tagów
Czas trwania: h 35 min. Długość: 2 100 000 ms
Dr Home. Sezon 1 odcinek 29 87a1b230ff910912.flv
Nonszalancja nazewnicza
Zwiększamy efektywność zespołów projektowych 10
www.bnsit.pl
Rzeczywistość, słowa, znaczenia, reguły
Zwiększamy efektywność zespołów projektowych 11
www.bnsit.pl
Rzeczywistość, słowa, znaczenia, reguły
Zwiększamy efektywność zespołów projektowych 12
www.bnsit.pl
Co można zrobić z…
Zwiększamy efektywność zespołów projektowych 13
Listą pracowników Ewidencją pracowników
• Dodać pracownika
• Usunąć pracownika
• Usunąć wszystkich
pracowników
• Wciągnąć pracownika do
ewidencji
• Wyciągnąć kartotekę pracownika
• Oznaczyć urlop
• Oznaczyć zwolnienie chorobowe
• Wyciągnąć świadectwo pracy
www.bnsit.pl
Programujesz to, co nazywasz
Zwiększamy efektywność zespołów projektowych 14
List<Employee> employees...
//...
EmployeeFile employeeFile = findEmployeeFile( personalID );
employeeFile.getEmergencyContactInformation();
www.bnsit.pl
A potem powstaje architektura
Zwiększamy efektywność zespołów projektowych 15
List<Employee> employees...
//...
EmployeeFile employeeFile = findEmployeeFile( personalID );
employeeFile.getEmergencyContactInformation();
www.bnsit.pl
I dzieją się z nią dziwne rzeczy
Zwiększamy efektywność zespołów projektowych 16
www.bnsit.pl
Ile %% wymagań naprawdę się zmienia?
Zwiększamy efektywność zespołów projektowych 17
www.bnsit.pl
Jakie znaczenie może mieć słowo?
Zwiększamy efektywność zespołów projektowych 18
www.bnsit.pl
S.O.L.I.D
Podstawowe zasady
Zwiększamy efektywność zespołów projektowych 19
www.bnsit.pl
Przykład: Geometria euklidesowa ;)
Zwiększamy efektywność zespołów projektowych 20
www.bnsit.pl
Przykład: Geometria euklidesowa ;)
Zwiększamy efektywność zespołów projektowych 21
www.bnsit.pl
... ale jeśli nie znasz podstawowych zasad
Zwiększamy efektywność zespołów projektowych 22
www.bnsit.pl
S.O.L.I.D
Podstawowe zasady
Zwiększamy efektywność zespołów projektowych 23
www.bnsit.pl
# To jest proste?
• Koncepcyjnie proste, logicznie proste, eleganckie
• Lecz wcale nie tak łatwe do zastosowania
# To jest dla początkujących?
• Podstawy nie oznaczają rzeczy najłatwiejszych lecz p o d s t a w ę
• Trzeba sporo doświadczenia, aby zajmować się sprawami oczywistymi
To zbyt banalne?
Zwiększamy efektywność zespołów projektowych 24
www.bnsit.pl
Co chcemy zacząć zauważać?
Zwiększamy efektywność zespołów projektowych 25
www.bnsit.pl
Nazwa klasy cLOC
LocationManager 26 752
NetworkItem 10 955
TransferOperations 6 871
CalculatorsManager 4 325
MonitorManager 1 514
VTViewInvoker 48
ContactService 47
Address 34
DataRange 21
LoggedUserDetailsModel 13
Jeśli chodzi o klasy…
Zwiększamy efektywność zespołów projektowych 26
www.bnsit.pl
Hipoteza #1
Zwiększamy efektywność zespołów projektowych 27
www.bnsit.pl
Hipoteza #2
Zwiększamy efektywność zespołów projektowych 28
www.bnsit.pl
Hipoteza #3
Zwiększamy efektywność zespołów projektowych 29
www.bnsit.pl
Nazwa metody mLOC Nazwa klasy mLOC/ cLOC
checkDataProtectionStatus 956 PersonalDataProtectionCommon 79,47%
createWord 470 WordCreator 69,32%
process 95 SearchInText 60,51%
performOperation 1 187 TransferOperations 17,28%
closeTask 12 TaskEditAction 1,73%
updateCustomerSheet 56 TransferOperations 0,82%
onResponse 222 DeviceImpl_T41 0,50%
scanRoutingTable 26 DeviceImpl_T41 0,06%
countControlSum 10 AuthenticationLibrary 0,40%
checkTransactionStatus 10 AuthenticationLibrary 0,40%
Jeśli chodzi o metody…
Zwiększamy efektywność zespołów projektowych 30
www.bnsit.pl
Hipoteza #4
Zwiększamy efektywność zespołów projektowych 31
www.bnsit.pl
Hipoteza #5
Zwiększamy efektywność zespołów projektowych 32
www.bnsit.pl
Hipoteza #6
Zwiększamy efektywność zespołów projektowych 33
www.bnsit.pl
Extract Method?
Jeśli chodzi o zmienne…
Zwiększamy efektywność zespołów projektowych 34
www.bnsit.pl
Jeśli chodzi o pakiety…
Zwiększamy efektywność zespołów projektowych 35
Axel Fontaine, Architecting for Continuous Delivery
http://2013.33degree.org/talk/show/51
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell
Przykład
Refaktoring
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 36
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Zmienna quasi-globalna
Przykład
Refaktoring
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 37
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Zmienna quasi-globalna
Przykład tmp1, tmp2, tmp3
Refaktoring
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 38
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Zmienna quasi-globalna
Przykład tmp1, tmp2, tmp3
Refaktoring
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 39
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Long Method Zmienna quasi-globalna
Przykład tmp1, tmp2, tmp3
Refaktoring
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 40
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Long Method Zmienna quasi-globalna
Przykład process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 41
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Long Method Zmienna quasi-globalna
Przykład process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 42
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell God Class Long Method Zmienna quasi-globalna
Przykład process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 43
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell God Class Long Method Zmienna quasi-globalna
Przykład Location Manager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 44
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell God Class Long Method Zmienna quasi-globalna
Przykład Location Manager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Extract Class http://refactoring.com
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 45
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Big Ball of Mud http://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład Location Manager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Extract Class http://refactoring.com
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 46
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Big Ball of Mud http://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład Genreic Plugin Framework, Multi-Device Platform
Location Manager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Extract Class http://refactoring.com
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 47
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Big Ball of Mud http://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład Genreic Plugin Framework, Multi-Device Platform
Location Manager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Wprowadź wzorzec architektoniczny
Extract Class http://refactoring.com
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 48
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Sexy Vision Big Ball of Mud http://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład Genreic Plugin Framework, Multi-Device Platform
Location Manager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Wprowadź wzorzec architektoniczny
Extract Class http://refactoring.com
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 49
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Sexy Vision Big Ball of Mud http://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład ZSI, BI, DW Genreic Plugin Framework, Multi-Device Platform
Location Manager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Wprowadź wzorzec architektoniczny
Extract Class http://refactoring.com
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 50
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Sexy Vision Big Ball of Mud http://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład ZSI, BI, DW Genreic Plugin Framework, Multi-Device Platform
Location Manager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Zdefiniuj, podziel, zmień proces
Wprowadź wzorzec architektoniczny
Extract Class http://refactoring.com
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Co sprawia brak umiejętności n a z y w a n i a?
Zwiększamy efektywność zespołów projektowych 51
www.bnsit.pl
Biznes ARCH Klasy Metody Zmienne
Smell Sexy Vision Big Ball of Mud http://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład ZSI, BI, DW Genreic Plugin Framework, Multi-Device Platform
Location Manager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktoring
Zdefiniuj, podziel, zmień proces
Wprowadź wzorzec architektoniczny
Extract Class http://refactoring.com
Extract Method http://refactoring.com
Split Temporary Variable http://refactoring.com
Skąd wieje wiatr?
Zwiększamy efektywność zespołów projektowych 52
www.bnsit.pl
process( name, surname,
age, street, city,
postalCode, area);
//...
Biznes ARCH Klasy Metody Zmienne
Skąd wieje wiatr?
Zwiększamy efektywność zespołów projektowych 53
www.bnsit.pl
Diagnoza i leczenie
Zwiększamy efektywność zespołów projektowych 54
www.bnsit.pl
Abstrakcja, implementacja
Zwiększamy efektywność zespołów projektowych 55
www.bnsit.pl
Abstrakcja, implementacja
Zwiększamy efektywność zespołów projektowych 56
www.bnsit.pl
Abstrakcja, implementacja: Kiedy? co?
Zwiększamy efektywność zespołów projektowych 57
www.bnsit.pl
Abstrakcja, implementacja: Kiedy? co?
Zwiększamy efektywność zespołów projektowych 58
www.bnsit.pl
Abstrakcja, implementacja: Kiedy? co?
Zwiększamy efektywność zespołów projektowych 59
www.bnsit.pl
Abstrakcja, implementacja w procesie – NOR
Zwiększamy efektywność zespołów projektowych 60
www.bnsit.pl
Skąd się biorą dobre nazwy
Zwiększamy efektywność zespołów projektowych 61
Biznes ARCH Klasy Metody Zmienne
List<Employee> employees...
//...
EmployeeFile employeeFile = findEmployeeFile( personalID );
employeeFile.getEmergencyContactInformation();
www.bnsit.pl Zwiększamy efektywność zespołów projektowych 62
Kadry
# Kartoteka pracowników
# Akta osobowe pracownika
# Umowa o pracę
# Kwestionariusz osobowy
# Świadectwo pracy
# …
Human Resources
# Employee Personell File
# Medical File
# Payroll File
# I-9 Forms File
# …
Brakło pojęć w domenie!
www.bnsit.pl
Pomieszanie z poplątaniem
Zwiększamy efektywność zespołów projektowych 63
http://pl.wikipedia.org/wiki/Flagi_państw_świata
Pracownik employee =
findPracownik( employeeId );
int wiek = employee.getAge();
//Vafanapoli! Non capisco!
Lavoratore lavoratore =
trovareLavoratore( id );
int età = lavoratore.età();
//Bravo! Bravissimo!
www.bnsit.pl
# Tylko język, w którym myśli klient, pozwala swobodne eksplorować domenę klienta i nadawać nazwy pojęciom
# Java pozwala, ale co z get* set*
# Język programowania nie powinien narzucać konwencji kodowania bazującej na jakimkolwiek języku naturalnym
Programowanie w języku klienta?
Zwiększamy efektywność zespołów projektowych 64
www.bnsit.pl
Podsumowując
Zwiększamy efektywność zespołów projektowych 65
www.bnsit.pl
S.O.L.I.D
Podstawowe zasady
Zwiększamy efektywność zespołów projektowych 66
Dziękuję za Twój czas!
Zwiększamy efektywność zespołów
projektowych
67