Top pięć błędów programowania w Java
Top pięć błędów programowania w Java
Wszyscy popełniają błędy. Nawet bardzo doświadczeni programiści popełniają błędy. Czasami to się zdaża z powodu nieuwagi czy niejasnego interfejsu API. Jednakże te błędy występują rzadko. Najbardziej powszechne błędy w programowaniu świadczą o niedostatecznej więdzy czy umiejętności.
28 kwi 2017
3509
Other articles
Testowanie aplikacji za pomocą JUnit5 i JMock. Część 2
Jak przygotować się do certyfikacji IIBA. Wyzwania i hacki
Testowanie aplikacji za pomocą JUnit5 i Mockito. Część 2
Testowanie aplikacji za pomocą JUnit5 i Mockito. Część 1
Testowanie aplikacji za pomocą JUnit5 i EasyMock. Część 2
Testowanie aplikacji za pomocą JUnit5 i EasyMock. Część 1
Test Driven Development z użyciem JUnit 5. Część 6
Test Driven Development z użyciem JUnit 5. Część 5
Test Driven Development z użyciem JUnit 5. Część 4
Test Driven Development z uzyciem JUnit 5. Czesc 3
Wszyscy popełniają błędy. Nawet bardzo doświadczeni programiści popełniają błędy. Czasami to się zdaża z powodu nieuwagi czy niejasnego interfejsu API. Jednakże te błędy występują rzadko. Najbardziej powszechne błędy w programowaniu świadczą o niedostatecznej więdzy czy umiejętności.
W tym artykule chciałbym wspomnieć o najczęstszych błędach, które napotkałem podczas swojej profesjonalnej kariery programisty. Mam nadzieję, że moje doświadczenie pomoże innym zmniejszyć ilość bugów we współczesnych projektach.
Pierwszy błąd, o którym chciałbym wspomnieć to złe nazewnictwo elementów kodu. Każda zmienna, metoda, klasa czy pakiet powinien mieć dokładne precyzyjne znaczenie. Jak można to sprawdzić? Można zwrócić się do kodu, który napisałeś rok temu i po tym nie widziałeś. Czy pamiętasz znaczenia wszystkich elementów kodu?
Dobre nazwy czy identyfikatory kodu są łatwe do zrobienia. Używaj tych samych słów, których użyłbyś do opisu elementu kodu. Na przykład, spójrzmy na tę metodę:

Co oznacza według Ciebie? Czy możesz jej użyć? Jak masz ją zaimplementować? Kwestie pozostaną bez odpowiedzi, chyba że znasz autora tego kodu. Wszystkie te kwestie znikną, jeżeli przepisać kod:

Drugi błąd to naruszenie jednej z zasad programowania obiektowego - hermetyzacji. Nigdy nie uzyskuj dostępu do atrybutów innych obiektów w sposób bezpośredni lub pośredni. Jedyny wyjątek z tej reguły to przedstawienie danych dla warstwy interfejsu użytkownika czy wysyłanie do warstwy DAO. Na przykład:

Mimo że wywołujemy metody pobierające i nie uzyskujemy dostępu do pól klasy User, naruszamy hermetyzację. Nigdy nie powinieneś być świadomy wewnętrznej prezentacji danych w innych klasach. Powinieneś natomiast wiedzieć, jakie operacje są opatrzone w tej klasie i jak jej używać.
Trzeci błąd to brak bezpieczeństwa w Twoim kodzie. Podam taki przykład:

Napisaliśmy bardzo prostą procedurę formatowania procentowego. Czy jest bezpieczna? Tak, nigdy nie rzuca wyjątku. Jednak co się stanie, jeżeli ktoś poda wielkość ujemną, na przykład, -1. Ta metoda generuje błędny wynik. Czy możemy modyfikować ten kod w sposób następujący?

Nigdy nie zgeneruje błędnego wyniku. Jednakże tylko ukrywamy błąd. Ten fakt, że ktoś podaje błędny parametr, świadczy o innym błędzie programistycznym poza naszą klasą. Jeżeli mamy ten drugi błąd, nigdy się o nim nie dowiemy.
Czwarty błąd to brak automatyzacji testów. Zawsze pisząc kod powinniśmy napisać test, który ten kod weryfikuje. Jeżeli ma się projekty, zawierające miliony wierszy kodu lub przestarzały system w ogóle bez testów, należy pisać testy przynajmniej dla najważniejszych czy często używanych części systemu.
Piąty błąd to powielanie kodu czyli naruszenie zasady DRY (Don't Repeat Yourself). Zawsze podczas kopiowania części kodu do nowej lokacji należy pamiętać, że trzeba będzie modyfikować obydwa bloki jednocześnie. Co jeśli masz 10 czy 100 takich bloków kodu? Jak można szybko znaleźć wszystkie bloki tego kodu? Jak je znaleźć, jeżeli trochę zmienisz niektóre z nich?

Co tu oznacza 1? Czy oznacza, że gdyby delta była 2, index też miałby być 2? Wartości wpisane bezośrednio w kod (hard-coded) są czasem nazywane liczbami magicznymi i tak samo są przejawem ukrytego powielania.
To było, moim zdaniem, top pięć błędów programistycznych, które napotkałem w Java. Mam nadzieję, że moje doświadczenie może Ci pomóc udoskonalić swoją pracę.
Sergey Morenets
Software Development and Java Specialist
W tym artykule chciałbym wspomnieć o najczęstszych błędach, które napotkałem podczas swojej profesjonalnej kariery programisty. Mam nadzieję, że moje doświadczenie pomoże innym zmniejszyć ilość bugów we współczesnych projektach.
Pierwszy błąd, o którym chciałbym wspomnieć to złe nazewnictwo elementów kodu. Każda zmienna, metoda, klasa czy pakiet powinien mieć dokładne precyzyjne znaczenie. Jak można to sprawdzić? Można zwrócić się do kodu, który napisałeś rok temu i po tym nie widziałeś. Czy pamiętasz znaczenia wszystkich elementów kodu?
Dobre nazwy czy identyfikatory kodu są łatwe do zrobienia. Używaj tych samych słów, których użyłbyś do opisu elementu kodu. Na przykład, spójrzmy na tę metodę:

Co oznacza według Ciebie? Czy możesz jej użyć? Jak masz ją zaimplementować? Kwestie pozostaną bez odpowiedzi, chyba że znasz autora tego kodu. Wszystkie te kwestie znikną, jeżeli przepisać kod:

Drugi błąd to naruszenie jednej z zasad programowania obiektowego - hermetyzacji. Nigdy nie uzyskuj dostępu do atrybutów innych obiektów w sposób bezpośredni lub pośredni. Jedyny wyjątek z tej reguły to przedstawienie danych dla warstwy interfejsu użytkownika czy wysyłanie do warstwy DAO. Na przykład:

Mimo że wywołujemy metody pobierające i nie uzyskujemy dostępu do pól klasy User, naruszamy hermetyzację. Nigdy nie powinieneś być świadomy wewnętrznej prezentacji danych w innych klasach. Powinieneś natomiast wiedzieć, jakie operacje są opatrzone w tej klasie i jak jej używać.
Trzeci błąd to brak bezpieczeństwa w Twoim kodzie. Podam taki przykład:

Napisaliśmy bardzo prostą procedurę formatowania procentowego. Czy jest bezpieczna? Tak, nigdy nie rzuca wyjątku. Jednak co się stanie, jeżeli ktoś poda wielkość ujemną, na przykład, -1. Ta metoda generuje błędny wynik. Czy możemy modyfikować ten kod w sposób następujący?

Nigdy nie zgeneruje błędnego wyniku. Jednakże tylko ukrywamy błąd. Ten fakt, że ktoś podaje błędny parametr, świadczy o innym błędzie programistycznym poza naszą klasą. Jeżeli mamy ten drugi błąd, nigdy się o nim nie dowiemy.
Czwarty błąd to brak automatyzacji testów. Zawsze pisząc kod powinniśmy napisać test, który ten kod weryfikuje. Jeżeli ma się projekty, zawierające miliony wierszy kodu lub przestarzały system w ogóle bez testów, należy pisać testy przynajmniej dla najważniejszych czy często używanych części systemu.
Piąty błąd to powielanie kodu czyli naruszenie zasady DRY (Don't Repeat Yourself). Zawsze podczas kopiowania części kodu do nowej lokacji należy pamiętać, że trzeba będzie modyfikować obydwa bloki jednocześnie. Co jeśli masz 10 czy 100 takich bloków kodu? Jak można szybko znaleźć wszystkie bloki tego kodu? Jak je znaleźć, jeżeli trochę zmienisz niektóre z nich?

Co tu oznacza 1? Czy oznacza, że gdyby delta była 2, index też miałby być 2? Wartości wpisane bezośrednio w kod (hard-coded) są czasem nazywane liczbami magicznymi i tak samo są przejawem ukrytego powielania.
To było, moim zdaniem, top pięć błędów programistycznych, które napotkałem w Java. Mam nadzieję, że moje doświadczenie może Ci pomóc udoskonalić swoją pracę.
Sergey Morenets
Software Development and Java Specialist