- 일반적인 코딩 수업은...
어떻게 하면 좋은 프로그램을 만들까?
좋은 코드를 짜려면 어떻게 해야 할까?
- 도전! 디버깅 입문 수업은...
어떻게 하면 실수를 덜 할 수 있을까?
틀린 코드를 어떻게 고쳐야 할까?
- 에러를 만났을때
def greeting(your_naem):
print("Hello, " + yourname + "!")
greeting("Donald Trump")
Traceback ( most recent call last) :
File "main.py", line 4, in <module>
greeting("Donald Trump")
File "main.py", line 2, in greeting
print("Hello", yourname + "!")
NameError: name'yourname' is not defined
- 버그(Bug)
코드가 원하는 대로 동작하지 않는 모든 경우
* 프로그램이 죽는(크래시가 발생하는) 경우
* 예상한 속도보다 훨씬 느리게 동작하는 경우
* 잘못된 결과를 출력하는 경우
* 코드 설계 상일어나면 안 되는 상황이 일어난 경우
- 예외(Exception)
일반적이지 않은 코드의 동작
* 사용자가 프로그램을 강제 종료하는 경우
* 분수의 분모에 0이 들어가는 경우
* 열고자 하는 파일이 존재하지 않는 경우
* 인터넷이 불안정한 경우
- 예외 처리(Exception handling)
상황1) 인터넷 상의 파일을 불러옴 -> 불러오는 동안 로딩 화면을 띄움 -> 다 불러온 뒤 파일의 내용을 화면에 표시
파일을 불러오는 중에 인터넷이 끊겼다면?
-> 처리되지 않은 예외는 버그를 만들 수 있음!
상황2) 업로드하고 싶은 사진을 선택 -> 사진을 SNS에 업로드
사진 업로드 중에 배터리가 없어 휴대폰이 꺼졌다면?
-> 개발자는 사용자의 다양한 상황을 예측할 수 있어야함
- 디버깅이란?
사용/테스트 중 찾아낸 버그를 없애 나가는 과정
* 버그의 원인을 찾고
* 발생한 버그를 해결하고
* 비슷한 버그의 재발을 방지하는 것
- 버그의 원인 찾기
* 어떤 상황에서, 어떤 조작을 했을 때 일어났는가?
* 얼마나 잦은 빈도로 발생하는가?
* 에러 메시지가 뜬다면 내용이 무엇인가?
- 발생한 버그 해결하기
* 버그가 발생한 원인을 해결하려면 어떻게 해야 하는가?
* 새로운 코드가 일으킬 새로운 버그는 없는가?
- 버그 재발 방지하기
* 버그를 일으킨 코그다 다른 곳에서 사용되는가?
* 비슷한 설계를 이용한 다른 코드는 없는가?
* 고친 코드의 약점은 없는가?
* 코드를 지속적으로 검증할 방법은 무엇인가?
- 사용자 경험과 직결
버그로 인한 불쾌한 경험 > 새로운 기능
- 처음부터 완벽한 코드는 없다
코드가 잘 작동하지 않을 때 - 어... 왜 안 되지?
코드가 한 번에 작동할 때 - 어... 왜 벌써 되지?
빠르게 문제를 파악/해결하는 것이 능력!
- 실패는 성공의 어머니
많은 버그를 경험할수록,
더 안전한 코드를 설계하는 능력이 생긴다!