Tysiące błędów!


30

Niedawno zostałem przydzielony do nowego projektu. Właściwie stary projekt napisany w klasycznej ASP. Teraz nowa wersja aplikacji jest pisana w najnowszej wersji ASP.NET, ale nie należy się spodziewać, że będzie to RTM za jakiś czas (przewidywana data premiery to styczeń 2017 r.), Więc muszę przeprowadzić konserwację starej aplikacji, dopóki nie będzie można odrzucone.
Mam też wrażenie, że nie wszyscy klienci natychmiast przestawią się na nowy program, więc ta wersja prawdopodobnie będzie dostępna przez jakiś czas.

Problem polega na tym, że jest pełen błędów. Niektóre z nich pochodzą z ubiegłego wieku, kiedy nie było żadnych standardów sieciowych, a tak naprawdę nie mam nic przeciwko trybowi dziwactwa widthi heightatrybutom zamiast CSS, tabel używanych do układu, zestawów ramek itp., Ale och, wszystkie te błędy! width="20px"wszędzie onchange="javascript:..."i wszędzie tam, gdzie używają css style="width:20"i style="width=20px"są powszechne. Nie wspominając o wielu liniach, w których istnieją sprzeczności widthi styleatrybuty. Itd itp.
W rezultacie aplikacja internetowa działa tylko w IE i tylko w trybie zgodności. Oczywiste jest, że programiści nigdy nie patrzyli na poprawność kodu, tylko jeśli to, co wyszło, wyglądało tak, jak mieli na myśli, powinno to wyglądać.

I nie wiem jak sobie z tym poradzić. Nie mogę zamknąć oczu na te błędy podczas wyszukiwania w kodzie innych błędów.
Mogę oczywiście dokonać globalnego wyszukiwania i zamiany, aby usunąć większość problemów, ale to oznaczałoby, że moje pierwsze zatwierdzenie składałoby się z tysięcy zmienionych plików .asp. Czy mogę to zrobić?


21
przez „błędy” masz na myśli styl kodowania, którego nie lubisz?
Ewan

9
Wskazówka, którą usłyszałem: Idź do miejsca, gdzie ćwiczą studenci muzyki. Postaraj się dostać piętnaście minut w dźwiękoszczelnym pokoju. Krzycz przez piętnaście minut. Teraz czujesz się lepiej, idź i napraw błędy! Poważnie, sprawdź z zarządem, jaki jest cel. Jeśli to oprogramowanie jest potrzebne, może wkrótce uniemożliwić im aktualizację komputerów i spowodować problemy z wymianą starszych, uszkodzonych komputerów.
gnasher729

24
To pytanie brzmi bardziej jak rant. Dlaczego narzekasz na oprogramowanie, które zostanie sprzedane za kilka miesięcy?
Doc Brown

5
Nie jest „błędem”, że kod napisany w „klasycznej ASP” jest zgodny ze standardami (takimi jakie były) klasycznej ASP, która różni się od najnowszej mody w kodowaniu internetowym - a najnowsza moda prawdopodobnie zostanie „wydana” daty ”w każdym razie w przyszłym roku. „Oczywiste jest, że programiści nigdy nie patrzyli na poprawność kodu” - jeśli OP uważa, że ​​może napisać kod, który nadal będzie „wyglądał na prawidłowy” 15 lub więcej lat w przyszłości, czas pokaże, czy to przekonanie jest tylko naturalnym optymizmem ( lub ignorancja) młodzieży.
alephzero,

19
„Muszę przeprowadzić konserwację starej aplikacji, dopóki nie będzie można jej usunąć”. Jakie utrzymanie? Proszę, bądź konkretny. Jeśli masz za zadanie utrzymanie tej bazy kodu i nic więcej nie zostało powiedziane, nie zmieniaj ani jednej rzeczy. Utrzymanie go oznacza, że ​​nadal go uruchamiasz, a nie poprawiasz rzeczy, które nie są uważane za zepsute.
Stephan Branczyk,

Odpowiedzi:


99

Brzmi, jakbyś mylił kilka rzeczy z terminem „błędy”

  • starsze atrybuty HTML
  • styl kodowania
  • błędy w kodzie, które nie powodują błędów
  • niezgłoszone błędy
  • błędy, które są teraz funkcjami
  • zgłoszone błędy
  • zgłoś błędy, które zostały Ci przydzielone do naprawy

W starszej aplikacji, która zostanie zastąpiona, tylko jeden z tych rodzajów błędów powinien Cię dotyczyć. Ostatni.

Chciałbym powiedzieć, że nie powinieneś nawet refaktoryzować innych rzeczy w funkcji, którą naprawiasz, głównie z powodu:

  • błędy, które są teraz funkcjami

Możesz zobaczyć z kodu, jak to mogło działać, ale nigdy tak nie było, ale wszyscy użytkownicy dogadywali się z nieokreślonym rozszerzeniem elementu przez ostatnie 10 lat i nie będą ci wdzięczni za naprawę.

Na plus, jeśli włożysz cyniczny interfejs JFDI, będziesz w stanie nagrać błędy bardzo szybko, a zespół nowej wersji nie będzie w stanie nadążyć za funkcjami starych wersji.

To da ci krzykliwy uśmiech ironicznej radości, gdy polecasz klientom chromowaną wtyczkę, tj. Emulator 6, aby mogli nadal korzystać z „funkcji” markizy, którą kochają


28
błędy, które są teraz dostępne ” - och, radość ...
FP

36
Rzeczywiście bądź bardzo ostrożny w tym, czego dotykasz. To natychmiast przyszło mi do głowy: xkcd.com/1172
Dennis Jaheruddin,

3
Wyjaśnij... JFDI ...
GER,

5
@GER „Just [expletive] Do It”, co oznacza unikanie normalnych standardów i testowania oraz innych rzeczy i po prostu załatwienie sprawy bez dbania o to, czy jest to możliwe do utrzymania i czytelne.
Nzall,

3
jak aglie, ale bardziej
Ewan

40

To, co zadajesz, nie jest pytaniem technicznym i nikt tutaj nie może na nie odpowiedzieć.

Pracujesz nad oprogramowaniem w trybie konserwacji i obserwujesz przestarzałą technologię oraz dużą liczbę niedoskonałości i niespójności. Pytasz co robić. Czy należy na przykład zwiększyć wysiłki, aby uczynić go kompatybilnym z różnymi przeglądarkami? Czy powinieneś dostosować go do nowoczesnych standardów? Czy należy naprawić niespójności składniowe w aplikacji? Chodzi o to, że są to decyzje biznesowe . Powinieneś zapytać swojego menedżera lub właściciela produktu, jakie problemy chcesz rozwiązać i jakie są ich priorytety. Ponieważ już trwa projekt przepisywania aplikacji, kierownictwo najprawdopodobniej już zdaje sobie sprawę z problemów, które zaobserwujesz.

Jeśli aplikacja zostanie w pełni zastąpiona w ciągu kilku miesięcy, prawdopodobnie chcą tylko, abyś naprawił określone problemy krytyczne i zostawił resztę bałaganu w spokoju. Ale nie wiemy.

Pytasz, czy możesz wykonać obszerną operację wyszukiwania i zamiany w bazie danych, zmieniając tysiące plików. Oczywiście, że możesz. Pytanie brzmi, czy powinieneś . Takie zamiany prawdopodobnie będą wymagały obszernych testów, aby upewnić się, że nic się nie zepsuło. Ponownie decyzja biznesowa jest ważniejsza, jeśli korzyści przewyższają koszty w czasie i ryzyko.


1
To decyzja biznesowa, ale odpowiedź jest tak oczywista, że ​​nie musi pytać kierownika. Nie powinien sprzątać bałaganu, jeśli nie jest to wymagane. (+1)
usr

14

Gdy wniosek zostanie zastąpiony w ciągu 18 do 24 tygodni (dodając spodziewane opóźnienia do przedstawionego powyżej szacowanego okresu od 6 do 8 tygodni), naprawdę musisz zadać sobie pytanie, jaką wartość dodasz do firmy, wciąż inwestując znaczną ilość pracy w stara wersja.

Pewnie, jeśli utkniesz ze wsparciem aplikacji przez kilka lat, to pozbycie się długu technicznego może być tego warte na dłuższą metę. Ale skoro i tak wszystko zostanie zrzucone, to po co zawracać sobie głowę? Wystarczy dodać kolejną poprawkę hackish na wierzchu wszystkich innych hackish poprawek, aby naprawić każdy problem, po prostu nie mogę się doczekać wydania nowej wersji i nazwać to dzień.

Można również zadać sobie pytanie, co można zrobić dla aplikacji w małym życiu jeszcze opuścił. Kiedy jesteś naprawdę nudzi już teraz i po prostu nie mają nic lepszego do roboty ze swoim czasie mogła dać mu wielki remont i usunąć wszystkie problemy styl pan wspomniał, ale jest bardzo prawdopodobne, że będzie to na pierwszej przerwie więcej rzeczy niż to naprawić . Być może będziesz w stanie pozbyć się tych nowych problemów, mając w końcu wystarczająco dużo czasu, ale nie masz tego czasu.


11
s/weeks/years/
CodesInChaos

9
W zeszłym roku naprawiałem błąd wydajności, który w istocie stanowił tabelę, która powinna buforować niektóre ostatnie wartości, faktycznie zachowując całą historię i rozwijając się bezgranicznie. W odpowiednim miejscu w kodzie pojawił się komentarz zasadniczo „powinno to być okresowo usuwane, ale nie ma to znaczenia, ponieważ planujemy złomować system do końca 2007 roku”. Nic nie żyje dłużej niż tymczasowe rozwiązania.
Peteris,

@Peteris Cóż, podatki tymczasowe. Ale tak.
Jay

Ostatnim razem, gdy pracowałem nad taką aplikacją, miała ona również być tymczasowa. Sprzęt, który miał kontrolować, został złomowany i zbudowano zamiennik, a nowe oprogramowanie miało zostać opracowane w celu sterowania zamiennikiem. Będzie ono dostępne za 6 miesięcy. Niestety, wymieniony sprzęt był wadliwy, a cały budżet został wydany na naprawę usterek, więc nie było już nic dla zamiennego systemu kontroli. Po kilku latach cały projekt został złomowany. AFAIK, cały system nadal działa zarówno na starym sprzęcie, jak i oprogramowaniu, 5 lat później.
Jules

Na szczęście dostałem zgodę na naprawienie najgorszych problemów (ataki wstrzykiwania SQL, tabele SQL z milionami wierszy, ale bez indeksów , strony, na których pierwotny programista zapomniał sprawdzić autoryzację ...).
Jules

3

Powody, dla których NIE należy wprowadzać dużych zmian:

Po pierwsze: kod zniknie za kilka miesięcy. Czy naprawdę warto poświęcić firmie 5 miesięcy na naprawę systemu, który zostanie wyrzucony 1 miesiąc później? Zastrzeżenie: systemy rzadko znikają, gdy są zaplanowane na odejście. System wymiany prawie zawsze się spóźnia, są użytkownicy, którzy nie mogą dokonać aktualizacji z jakiegokolwiek powodu itp. Ale to złożony problem.

Po drugie: jeśli wprowadzisz wiele zmian, zwłaszcza masowe wyszukiwanie i zamiany, wprowadzisz błędy. Nie możesz wprowadzać błędów: będziesz. Załóżmy, że zrobiłeś S&R i zmieniłeś „width = 200” na „width: 200px”. Czy na stronach ASP jest kod C # lub VB? Ponieważ jeśli miałeś zmienną o nazwie „szerokość”, którą ustawiłeś na 200, po prostu ją złamałeś. (A jeśli chodzi o to, czy pomyślałeś o ograniczeniu S&R do stron ASP?) Lub jeśli zmieniłeś „width: 200” na „width: 200px”, co się stanie, jeśli w kodzie będzie jedno miejsce z napisem „szerokość: 200 mm „? Teraz mówi „szerokość: 200pxmm”. Okej, załóżmy, że o tym pomyślałeś. Co jeśli jest miejsce, które ma niepoprawną specyfikację szerokości, co oczywiście jest ignorowane, a teraz układa się całkiem nieźle. Naprawiasz" szerokość i teraz określa się na 200px ... a wyświetlacz jest zepsuty, ponieważ 200px to w rzeczywistości niewłaściwa szerokość do podania i działało tylko dlatego, że ta wartość została zignorowana? Mass S & R są bardzo niebezpieczne, ponieważ prawie na pewno nie studiujesz każdego miejsca, które zmienisz. Prawdopodobnie nie jesteś nawet pewien, co przetestować.

Po trzecie: kod, który jest „oczywiście” zły, może być tym, czego chce użytkownik. Widziałem wiele specyfikacji wymagań, które nawołują do zachowania, które jest oczywiście złe i szalone ... a potem wracam do użytkowników i pytam, czego NAPRAWDĘ chcą, i okazuje się, że naprawdę chcą tego szalonego zachowania, ponieważ to jak działają ich firmy lub wymagają tego przepisy rządowe lub cokolwiek innego.

Nawet jeśli zachowanie jest naprawdę złe, być może użytkownicy zaczęli się tego spodziewać i rutynowo obejdą go, a naprawiając go, złamiesz ich obejścia. Przykład: Pracuję w systemie, w którym mamy miejsce, w którym podajesz daty od i do momentu, kiedy wyprzedaż jest dostępna publicznie. Obie daty były tak naprawdę północą, która rozpoczęła się tego dnia, więc jeśli powiesz „do 30 lipca”, oznacza to, że zakończyło się ono z końcem dnia 29 lipca, tj. Minutę przed 12:01 30 lipca, a nie do końca 30 lipca W pewnym momencie to naprawiłem, ale mogłem to zrobić tylko dlatego, że było mniej niż pół tuzina osób uprawnionych do korzystania z tego ekranu i mogłem po prostu powiedzieć im wszystko, co naprawiłem. Gdyby były setki użytkowników i wszyscy do tej pory zorientowali się, że naprawdę musisz podać dzień po ostatecznej dacie, to moje „naprawienie”


0

Mogę oczywiście dokonać globalnego wyszukiwania i zamiany, aby usunąć większość problemów, ale to oznaczałoby, że moje pierwsze zatwierdzenie składałoby się z tysięcy zmienionych plików .asp. Czy mogę to zrobić?

Nie rozumiem dlaczego nie. Zatwierdzenie powinno być koncepcyjnie jedną rzeczą, ale nie widzę powodu, dla którego globalne znajdowanie i zamiana z style="width=20"na style="width: 20px"nie byłoby liczone jako „jedna rzecz”, mówiąc koncepcyjnie. A jeśli to pomoże ci lepiej spać, nie rozpraszaj się, gdy naprawiasz inne rzeczy i niczego nie psujesz , dlaczego nie?


12
Dlaczego nie? Ponieważ obszerne wyszukiwanie i zamiana w dużej bazie kodu wymaga później szczegółowych testów, aby upewnić się, że nic się nie zepsuło.
JacquesB

-2

Twoim problemem jest ustalenie priorytetów : Które z problemów to showstoppers (w produkcji)? Które tykają szkielety czasu? A które można pozostawić za chwilę (bo to działa i działa od lat, a nawet w pewnym sensie)?

W twojej sytuacji zrobiłbym listy klas problemów , na które chciałbym spojrzeć. Na przykład, zastępując style="width=(\d+)"zstyle="width: \1px" (które prawdopodobnie mogą być usunięte z globalnym Znajdź / Zamień przy użyciu regexp - Przepraszam, jeśli moje nie jest w 100%) będzie jedną klasę, a jeśli nie jest po prostu jednym przypadku, to niech tak będzie. Dla każdej kategorii wymień priorytet (jak pilne jest to zrobić) i szacunek pracy (ile czasu zajmie wykonanie tej kategorii).

Twoje zadania konserwacyjne również znajdą się na tej liście. Teraz zaczynasz stosować pewne zarządzanie, nawet jeśli tylko do siebie, i masz narzędzie, z którego możesz skorzystać, gdy masz czas i nie masz nic do roboty, lub gdy musisz negocjować z menedżerem o pracy do wykonania (lub poprosić czas przeznaczony na coś, czego może nie być świadomy). (Ten rodzaj proaktywności może pomóc ci zostać zauważonym w przypadku promocji, jeśli zostanie to zrobione prawidłowo).

Myślę, że lubisz programować, ponieważ masz do pewnego stopnia perfekcyjną osobowość. ALE w środowisku komercyjnym musisz zacząć zdawać sobie sprawę, że doskonały jest wrogiem dobra (a dobro przynosi pieniądze, doskonały niekoniecznie może przynieść zauważalnie więcej za dużo więcej pracy). Najpierw zrób to, co jest potrzebne, a następnie zrób to, co jest miłe. Tak, to może iść wbrew twojemu zbożu bez końca. Po prostu się uśmiechnij i znieść, a może zdobędziesz hobby, aby ćwiczyć swój perfekcjonizm i zachować zdrowie psychiczne ;-)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.