https://aie24.pl/
Chociaż użycie lintera kodu i formatera kodu może pomóc Ci pisać lepszy kod i unikać wielu typowych błędów, problemy, które nie zostaną wykryte podczas tworzenia, zostaną znalezione w procesie testowania lub przez użytkowników końcowych oprogramowania. Narzędzia do debugowania inne niż AI przybierają wiele różnych form, ale generalnie wszystkie działają w ten sam sposób. Kiedy coś nie działa tak, jak oczekujesz w swoim kodzie, możesz użyć narzędzia do debugowania, aby przerwać działanie programu w miejscu, w którym występuje problem, i użyć narzędzia do debugowania, aby zobaczyć, co dzieje się ze zmiennymi, nasłuchiwaczami zdarzeń i innymi typami kodu. Przerywając program lub po prostu wyprowadzając wartości z kodu, możesz zacząć odkrywać, co może być nie tak. Dwa najważniejsze narzędzia w debugowaniu to rejestrowanie i punkty przerwania. Rejestrowanie to proces pisania wiadomości zawierających informacje o uruchomionym programie i występujących błędach. W JavaScript moduł konsoli i jego metoda log() są często używane do rejestrowania. W Pythonie możesz użyć instrukcji print() lub modułu rejestrowania. Punkty przerwania to miejsca w kodzie, w których wskazujesz (za pomocą debugera), że chcesz, aby wykonywanie programu zostało wstrzymane, podczas gdy sprawdzasz zmienne programu. Przeglądarki internetowe mają narzędzie do debugowania, którego możesz użyć podczas debugowania kodu JavaScript uruchomionego w przeglądarce. Rysunek przedstawia narzędzie do debugowania wbudowane w Google Chrome.

Nawet przy użyciu narzędzia do debugowania, ustalenie, co jest nie tak w programie i jak to naprawić, może wiązać się z wieloma frustrującymi pracami. A dziewięć razy na dziesięć problem okazuje się literówką. Czatboty AI, takie jak Copilot Chat lub ChatGPT, często mogą uwolnić Cię od części ręcznej pracy debugowania, śledząc przyczyny problemów i sugerując poprawki. Podobnie jak we wszystkim, co robisz z generatywnymi modelami AI, kluczem do uzyskania dobrych wyników jest zapewnienie wystarczającego kontekstu dla modelu i prawidłowe podpowiadanie AI.
Poniższy listing przedstawia funkcję języka Python zawierającą co najmniej dwa proste błędy na poziomie jednostki:
def calculate_average(numbers):
total = 0
for number in numbers:
if not isinstance(number, (int, float)):
raise TypeError(“Invalid data type. All values must
be numbers.”)
total += number
average = total / len(numbers)
return average
Pod względem składni funkcja calculated_average() jest w porządku. Problem polega jednak na tym, że funkcja oczekuje otrzymania listy liczb, ale nie sprawdza, czy przekazany jej argument jest listą. Zgodnie z zapisem, jeśli przekażesz tej funkcji wartość, która nie jest listą, zostanie wygenerowany błąd TypeError, wskazujący, że wartości muszą być liczbami, co w rzeczywistości nie jest problemem. Ponadto, jeśli przekażesz funkcji pustą listę, zostanie wygenerowany błąd ZeroDivisionError.
Rysunek pokazuje, jak uruchomić funkcję i spowodować błąd TypeError.

W mojej pierwszej próbie zmuszenia chatbota AI do naprawienia błędu otworzyłem plik zawierający funkcję w VS Code i wpisałem /fix w Copilot Chat. Copilot Chat zidentyfikował problem ZeroDivisionError, jak pokazano na rysunku . ale nie rozwiązał problemu, co się dzieje, gdy przekazujesz funkcji wartość, która nie jest listą.

Zaktualizowałem swój kod sugestią Copilota, a także przykładem wywołania funkcji za pomocą ciągu znaków i poprosiłem Copilota o ponowne poprawienie. Tym razem Copilot prawidłowo wskazał, że niepoprawnie wywoływałem funkcję i pokazał mi, jak wywołać ją za pomocą listy liczb, ale nie rozwiązał problemu z funkcją. Następnie wysłałem następujący monit:
Jak mogę naprawić funkcję, aby nie zgłaszała błędu, gdy nie otrzyma listy?
W tym bezpośrednim pytaniu Copilot odpowiedział kodem, który naprawia problem, który chciałem naprawić. Oto poprawiony kod:
def calculate_average(numbers):
if not isinstance(numbers, list):
return “Error: Input should be a list of numbers.”
if len(numbers) == 0:
return None
total = 0
for number in numbers:
if not isinstance(number, (int, float)):
raise TypeError(“Invalid data type. All values must
be numbers.”)
total += number
average = total / len(numbers)
return average
print(calculate_ave rage(‘a’))