Utrzymanie jest głównym przedmiotem profesjonalnego rozwoju oprogramowania. Rzeczywiście, konserwacja jest prawie zawsze najdłuższą częścią cyklu życia oprogramowania, ponieważ trwa od wydania projektu aż do końca czasów.
Ponadto projekty będące w konserwacji stanowią znaczną większość ogólnej liczby projektów. Według http://www.vlegaci.com/298/interesting-statistics-%E2%80%93-numbers-of-programmers-in-maintenance-vs-development/ , odsetek projektów będących w utrzymaniu wynosi około 2 / 3.
Ostatnio natknąłem się na to pytanie , gdzie facet wygląda na dość zaskoczonego, odkrywając, że jego praca polega głównie na utrzymaniu. Następnie postanowiłem otworzyć dyskusję (w języku francuskim) na głównej stronie francuskiej społeczności specjalistów od tworzenia oprogramowania ( http://www.developpez.com/ ). Dyskusja jest zatytułowana „Czy studenci są wystarczająco dobrze wyszkoleni do rzeczywistości profesjonalnego tworzenia oprogramowania?” i dotyczy głównie łatwości konserwacji . Zwrócono uwagę, że przynajmniej we Francji ludzie nie są wystarczająco przygotowani, aby stawić czoła alimentów w obu aspektach:
- zachowaj istniejący kod
- tworzyć łatwy do utrzymania kod
Moje pytanie znajduje odzwierciedlenie w tej dyskusji i ma na celu znalezienie dobrego sposobu na nauczenie obsługi.
- Jak możemy uczyć utrzymywalności?
- Jakie ćwiczenia poleciłbyś?
- Jeśli jesteś dobrze wyszkolony w zakresie konserwacji, jaki konkretny rodzaj kursów odbyłeś?
[edytuj] Po pewnym nieporozumieniu myślę, że muszę wyjaśnić moje pytanie. Jako lider projektu i programista często pracuję ze stażystami lub świeżo ukońconymi studentami. Kiedyś byłem świeżo po studiach. Chodzi o to, że uczniowie zwykle nie znają zasad takich jak SOLID, które zwiększają łatwość utrzymania projektu. Często mamy poważne trudności z ewolucją projektów (niska konserwowalność). To, czego tu szukam, to konkretny akademicki przykład udanego nauczania o znaczeniu łatwości konserwacji i o tym, jak stworzyć lepszy kod dotyczący tego konkretnego punktu; lub ewentualne sugestie dotyczące poprawy sposobu szkolenia uczniów.
źródło
Odpowiedzi:
To kwestia praktyki.
Najprostszym sposobem kontrolowania tego, jaki mogę sobie wyobrazić, jest symulacja typowego projektu konserwacji w następujący sposób.
Zdobądź dobrze wykonany projekt ( Projekt A ) i wprowadź kilka problemów: wstrzyknij kilka błędów, porządną dawkę zduplikowanego i martwego kodu, upuść niektóre funkcje, testy jednostkowe i dokumentację tu i tam itp. Możesz nawet mieć dedykowany nazwa tego, na przykład Projekt A - wersja uszkodzona .
Ustanów moduł do śledzenia problemów i wypełnij go żądaniami odpowiadającymi konkretnym wyrządzonym szkodom. Ustanów podstawowe zasady i praktyki dotyczące procesu programowania - zatwierdza VCS, przeglądy kodu, kontrolę jakości itp. - rozważ wzięcie tego, co możesz, z listy kontrolnej podanej w teście Joela .
Napraw błędy, dodaj brakujące testy jednostkowe, dokumentację i funkcje.
Refaktoryzacja.
Utrzymanie / ulepszenie oryginalnych projektów do wykorzystania przez studentów w przyszłym roku
- Projekt A wersja 2.0 i Projekt A - odpowiednio uszkodzona wersja 2.0 .
Poprawiając uszkodzoną wersję mam na myśli wyrządzanie jej większych szkód edukacyjnych. :)
Spośród wyżej wymienionych praktyk zwróć szczególną uwagę na przegląd kodu . Jest to prawdopodobnie najskuteczniejszy sposób zapewnienia łatwości utrzymania kodu, jak wskazuje np. Najwyższa odpowiedź w powiązanym pytaniu .
źródło
Oświadczenie: Właśnie dostałem dyplom CS. Nie jestem nauczycielem.
Może się to wydawać oczywiste, ale myślę, że najlepszym sposobem nauczenia obsługi kodu jest umożliwienie uczniom wykonania konserwacji kodu. Oto co bym zrobił:
Chodzi o to, aby uczniowie nie tylko pracowali z czyimś kodem, ale także aby docenili kod, który można utrzymać, i który, mam nadzieję, poprawi ich umiejętności projektowe.
źródło
Utrzymanie jest zaletą, a nie umiejętnością. Istnieje wiele ścieżek do tworzenia projektów, które można utrzymać, ale nie ma jednej formuły, która gwarantowałaby ich wykonanie.
Jeśli cenisz cnoty, takie jak życzliwość i hojność, szukasz sposobów, aby praktykować to samo w swoim codziennym życiu. Podobnie jest z konserwowalnością: jeśli Ty i Twoja organizacja cenisz łatwość konserwacji, będziesz mieć to na uwadze podczas projektowania i wdrażania projektu. Będzie to uzasadniony powód, aby poświęcić trochę więcej czasu na budowanie czegoś, ponieważ wiesz, że łatwość konserwacji jest doceniana. I odwrotnie, odradza się poświęcanie dodatkowego czasu ze względu na łatwość utrzymania w organizacji, która go nie docenia.
Jeśli chcesz nauczyć ludzi, jak sprawiać, by utrzymanie było łatwe, powinieneś zacząć od wyjaśnienia, że Twoja organizacja ceni sobie łatwość utrzymania. Określ to w wymaganiach dla swoich projektów. Ustaw to jako jedno z kryteriów pomyślnego przeglądu kodu. Krótko mówiąc, spraw , aby łatwość utrzymania była częścią twojej kultury .
Następnie bądź gotów przeznaczyć trochę zasobów na poprawę konserwacji w istniejących projektach. Zidentyfikuj te części projektu, w których błędy wciąż się pojawiają lub w których naprawianie błędów lub wprowadzanie zmian jest bardzo trudne i zajmuje dużo czasu, a także przeprojektowanie lub refaktoryzacja w celu ułatwienia konserwacji.
Na koniec, indoktrynuj nowych programistów w swoją kulturę łatwości konserwacji , przypisując ich do zespołów, które już to ćwiczą codziennie. Nie ma lepszego sposobu, aby pomóc komuś przyjąć wartość, niż dać mu mnóstwo dobrych przykładów i wskazówek.
źródło
Z jednej strony nie podoba mi się termin Konserwowalny w związku z tworzeniem oprogramowania. Rzeczywistość jest taka, że całe oprogramowanie jest możliwe do utrzymania, ponieważ może podlegać pracom konserwacyjnym, więc prawdziwym problemem jest to, czy oprogramowanie jest drogie, czy niedrogie w utrzymaniu. Wiem, że brzmi to jak pedantyczna wypowiedź na początku odpowiedzi, jednak moja uwaga stanie się bardziej przejrzysta za chwilę.
Problem ze stopniami informatyki, który jest najważniejszy w tworzeniu oprogramowania, polega na tym, że tak naprawdę uczą one studentów tylko najmniejszego minimum, jakie powinni wiedzieć o pisaniu oprogramowania. Umiejętności i wiedzę zawodową zdobywa się poprzez naukę przeprowadzaną w ciągu pierwszych kilku lat pokwalifikacja do stopnia. To wtedy absolwent zaczyna pracę nad projektami, które są tak naprawdę ważne dla klienta, w środowisku, w którym występuje duża presja na wykonanie, a oczekiwaniem jest stworzenie produktu o profesjonalnym standardzie. Niestety wiele firm nie promuje kultury, w której utrzymywane są profesjonalne standardy oprogramowania, co kończy się projektami, których opracowanie i utrzymanie są kosztowne. Na nieszczęście dla naszych absolwentów, uczą się wielu złych nawyków w takich środowiskach we wczesnych latach kariery i może minąć dużo czasu, zanim nauczą się je pokonywać ... jeśli w ogóle.
Lepiej byłoby uczyć uczniów, jak pisać czysty kod i jak identyfikować problemy w oprogramowaniu, które zwykle kończą się długiem technicznym . Zapoznaj się z książkami na temat czyszczenia kodu , refaktoryzacji i rozwoju oprogramowania Lean jako punktu wyjścia jako miejsca rozpoczęcia i naucz uczniów pisania testów jednostkowych przed kodem implementacyjnym, aby zapewnić wysoki stopień pokrycia testowego. Naucz uczniów rozpoznawania powtarzających się i powtarzających się wzorców w kodzie oraz tego, jak zmienić kod w celu usunięcia takiego powielania. Pomóż uczniom zrozumieć i stosować zasady, takie jak SOLID i DRY. Co najważniejsze, porzuć ten pomysł, że zdolność do utrzymywania kodu jest wykonywana wyłącznie w oparciu o projekt i implementację kodu, a zamiast tego zaszczepia od samego początku poczucie kunsztu i jakości w produkcji oprogramowania, starając się dopracuj kod w miarę jego wdrażania, aby zminimalizować wpływ długu technicznego, a tym samym ograniczyć koszty utrzymania oprogramowania do minimum.
źródło
Myślę, że najlepszym sposobem na nauczenie się tego rodzaju umiejętności jest przeglądanie kodu i programowanie w parach. Podczas przeglądów kodu doświadczeni pracownicy mogą wskazać, w jaki sposób uczynić kod łatwiejszym w utrzymaniu (zazwyczaj poprzez uczynienie go bardziej czytelnym) i uzasadnić, dlaczego niektóre wybory mogą stworzyć łatwiejszy do utrzymania kod.
Programowanie w parach jest jeszcze lepszym sposobem nauczenia tego rodzaju rzeczy, ponieważ daje mniej doświadczonym pracownikom bezpośrednie doświadczenie w utrzymywaniu kodu z kimś, kto już wie, jak to zrobić dobrze.
Jest też kilka świetnych książek, które możesz przeczytać o pisaniu czystego, łatwego do utrzymania kodu. Przychodzi mi na myśl Clean Code .
Trudno jest zdobyć to doświadczenie w środowisku akademickim, ponieważ studenci rzadko modyfikują duże bazy kodu. Większość tych umiejętności pochodzi z nauki w pracy, a przeglądy kodu i programowanie w parach mogą naprawdę ułatwić tę naukę.
źródło
Dobry kod = Mniej konserwacji i łatwe do ulepszenia / dodania funkcji.
Zły kod = koszmar konserwacji
Zasadniczo musimy przekazać uczniom punkty, że „za każdym razem, gdy w projekcie występuje gówniany kod, nowy programista, który dołączy do firmy, ponieważ cierpi pierwotny autor kodu i jak wpłynie na oprogramowanie . ”
Jednym z najlepszych sposobów nauczenia ucznia na temat konserwacji oprogramowania jest pokazanie przykładu zarówno dobrego, jak i złego kodu i poproszenie go o dodanie funkcji, a następnie nauczenie go, że napisanie dobrego kodu nie jest tylko dla zadowolenia z siebie, ale dla zrobienia łatwe dla ludzi, którzy będą utrzymywać kod.
Ćwiczenie:
1) Mają wcześniej napisany zły kod (np.) Duplikat, metoda mówi „obliczyć spłatę kredytu hipotecznego” jest napisana w 9 miejscach w projekcie.
Poproś ucznia o ulepszenie tej funkcji, aby „dodała 1,2% dopłaty do wszystkich płatności hipotecznych”.
Teraz uczeń zobaczy ból związany z lokalizacją i poprawieniem kodu we wszystkich 9 miejscach. Istnieje wiele szans, że nie uda mu się zlokalizować wszystkich 9 miejsc, w których obliczana jest „spłata kredytu hipotecznego”.
2) Teraz pokaż Dobry kod, który ma tę metodę, która oblicza spłatę kredytu hipotecznego w jednym i jedynym miejscu . zademonstruj uczniowi, jak łatwo ulepszyć dobrze napisany kod i wyjaśnij mu, w jaki sposób poprawia to łatwość konserwacji kodu / projektu.
BTW, podobało mi się twoje podejście do narażania studentów na łatwość konserwacji oprogramowania.
źródło
@mattmattj: Ponieważ istnieje wiele odpowiedzi, a link, który zamieściłem, ma również kilka dobrych wskazówek, dodam coś, co, mam nadzieję, nie będzie powtórzeniem już opublikowanych odpowiedzi.
Po pierwsze, MUSI zdefiniować „łatwość konserwacji” - nie ma jednej akceptowanej przez wszystkich definicji - podobnej do architektury oprogramowania. Więc wybierz ten, który Twoim zdaniem jest najważniejszy, obejmujący wszystko i podaj go w 3-4 liniach z maksymalną prędkością. Następnie możesz porozmawiać o niektórych metrykach, takich jak - czas na zapamiętanie / zrozumienie własnego kodu (lub kodu innego użytkownika), liczba WTF na minutę / godzinę itp. Zachowaj lekki (humorystyczny) - dzięki temu będą bardziej otwarci na to, co masz powiedzieć po tym.
Niektóre ćwiczenia (może to brzmieć nieco pokrywające się z niektórymi odpowiedziami, proszę wybacz)
Oto podstawa łatwości konserwacji - każda zmodyfikowana / zaktualizowana linia kodu kosztuje firmę. Im łatwiej jest odczytać i zapamiętać kod, tym lepiej / szybciej modyfikacja, która pomogłaby skrócić czas wprowadzenia produktu na rynek. Bardzo ważne w dzisiejszej szybkiej przestrzeni technologicznej. Konserwowalność jest kluczem do efektywnej ewolucji systemów.
Ważne jest, aby zrozumieć różnicę między rozwojem terenów zielonych i terenów poprzemysłowych - nie każdy projekt lub system zostałby stworzony od zera (raczej trudno jest znaleźć lub być częścią projektów „od zera”). Wyjaśniając, że pole jest „z natury” brązowe i musisz poświęcić czas na jego kształtowanie wraz z ewentualnym wycofywaniem się, gdy wyrasta „z ręki” (możliwe tylko, gdy dryf jest zbyt duży i „niemożliwy do utrzymania”). Im szybciej to zaakceptują, tym lepiej. Jest to trudne, ponieważ programowanie jest z natury kreatywne, ale poprawianie czyjś kod nie jest postrzegane jako takie - przekręć go. Kreatywność to umiejętność zrozumienia kodu, a następnie zastosowania „własnej” kreatywności, aby go ulepszyć - jeśli lepiej go utrzymasz, będziesz w stanie bardziej twórczo go ulepszyć w przyszłości.
Odwołaj się do analogii spaghetti w powyższym linku ... mam nadzieję, że pomoże to zdobyć punkty w domu. Inne odpowiedzi pomagają wypełnić luki i powinny pomóc w nauce! Powodzenia!
źródło