From 12010d8bded32d1f8cc86efd7696dfbea648327e Mon Sep 17 00:00:00 2001 From: duncan020313 Date: Sun, 7 May 2023 15:42:17 +0900 Subject: [PATCH] 05-07-duncan --- blog/2023/05-07-duncan/badqt.jpeg | Bin 0 -> 50067 bytes blog/2023/05-07-duncan/index.md | 83 ++++++++++++++++++++++++++++++ blog/authors.yml | 6 +++ 3 files changed, 89 insertions(+) create mode 100644 blog/2023/05-07-duncan/badqt.jpeg create mode 100644 blog/2023/05-07-duncan/index.md diff --git a/blog/2023/05-07-duncan/badqt.jpeg b/blog/2023/05-07-duncan/badqt.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8ac75679d311e83e54a90f02ecbbbe0aafbfc18a GIT binary patch literal 50067 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 literal 0 HcmV?d00001 diff --git a/blog/2023/05-07-duncan/index.md b/blog/2023/05-07-duncan/index.md new file mode 100644 index 0000000..124bcbb --- /dev/null +++ b/blog/2023/05-07-duncan/index.md @@ -0,0 +1,83 @@ +--- +authors: duncan +slug: software-testing-and-debugging +--- + +# 소프트웨어 테스팅이란? + +안녕하세요, SPARCS에서 개발자로 활동 중인 duncan입니다! + +이번 포스팅에서는 테스팅을 왜 해야 하는지, 테스팅에는 어떤 종류가 있는지 알아보겠습니다. + +## 왜 우리는 테스팅을 안 할까? + +저는 처음 개발을 배우면서 테스팅이 중요하다는 것은 배웠지만 이를 체감하지는 못했습니다. +아마 저를 제외한 많은 학생 개발자분들도 처음에는 "테스팅 이거 왜 해야 하는 거야?" 이런 생각 한 번쯤 해보셨을 겁니다. +우리가 제작하는 과제 프로그램, 토이 프로젝트들은 테스팅이 필요할 만큼 높은 퀄리티가 요구되지도 않고, 테스팅의 효과를 체감할 만큼 복잡도가 높지도 않습니다. +특히, 과제로 제출한 프로그램의 경우 주어진 채점 프로그램에서 실행되고 나면 영원히 실행되지 않는 일회용 프로그램에 불과합니다. +이런 프로그램만을 개발하는 환경에서는 테스트팅의 중요성을 느낄 수 없는 것이 당연해 보입니다. + +![과제물 밈](./badqt.jpeg) + + +### 프로그램 퀄리티가 낮으면 어떻게 되나요? + +오늘날 사용하는 거의 모든 프로그램들은 버그를 가지고 있습니다. +내가 만든 엉성한 토이 프로젝트부터, 빅테크 기업들이 제작한 크롬, 윈도우와 같은 프로그램 중 버그가 없는 프로그램은 존재하지 않습니다. +버그를 100% 제거하는 것은 현대 프로그램의 복잡도 상에서는 불가능한 일입니다. 중요한 것은 버그의 유무가 아닌 버그의 빈도입니다. +잦은 버그는 유저 경험의 퀄리티를 하락시키게 되고 결국 이런 서비스를 찾는 고객은 사라지게 될 것입니다. +또한, 치명적인 보안 버그가 발생하는 경우 중요한 정보들을 탈취당할 수 있습니다. + +어플리케이션 레벨이 아닌 시스템 프로그램으로 내려가면 문제는 더욱 심각해집니다. +항공기, 자동차, 로켓, 원자로 등에 사용되는 시스템 소프트웨어의 결함은 심각한 인명피해를 발생시킵니다. +실제로 보잉 737기의 MCAS라는 프로그램의 버그로 인해 2번의 항공기 추락 사고가 발생하게 됩니다. + +![보잉 373](https://www.claimsjournal.com/app/uploads/2019/03/users_iqjWHBFdfxIU_iCBELMV0mnyQ_v0_piFq5T3pJF0qzS8rF9LjsWaQ_-1x-1.png) +*출처: https://www.claimsjournal.com/news/international/2019/04/11/290347.htm* + +### 테스팅을 하면 개발 비용이 줄어든다고요? + +테스트 코드를 작성하는 작업이 오히려 개발 비용을 늘리는 것처럼 보일 수 있습니다. +하지만, 테스팅을 통해 빠르게 버그의 존재를 파악하여 수정하게 되면 버그를 수정하는 데 드는 비용을 대폭 줄일 수 있습니다. +일반적으로 버그를 늦은 시기에 잡아낼수록 버그를 수정하는 데 드는 비용이 기하급수적으로 늘어나게 됩니다. +버그 픽스에 사용되는 비용을 대폭 줄여주기 때문에 장기적으로 보았을 때는 비용이 절감됩니다. + +## 테스팅의 종류 + +#### Whitebox testing VS Blackbox testing +먼저, whitebox testing과 blackbox testing에 대해서 알아보겠습니다. +whitebox testing은 소스 코드의 내용을 기반으로 테스팅을 진행합니다. +해당 소스 코드가 어떤 semantic을 가지고 있고, 그 semantic이 요구사항을 위반하진 않았는지 검증합니다. +blackbox testing은 소스 코드는 고려하지 않고, 프로그램의 기능만을 테스트합니다. +어떤 입력을 주었을 때 올바른 입력값이 나오는지 확인하는 방식으로 진행됩니다. + +일반적으로 whitebox testing가 bug detection 능력은 뛰어나지만, 높은 비용을 요구합니다. + +#### Functional testing vs Non-functional testing +Functional testing은 프로그램의 기능이 올바르게 작동하는지 테스트합니다. +Non-functional testing은 프로그램의 퍼포먼스와 같이 비기능적인 부분을 테스트합니다. + +## 버그의 탐지와 위치 추정 +테스팅을 자동화하기 위해서는 버그를 잡는 과정을 두 단계로 나누어야합니다. +우선, 프로그램에 버그가 존재하는지를 알아내야하며 이를 위해 여러 가지 분석 기법이 사용됩니다. + +#### Dynamic analysis VS Static analysis +Dynamic analysis(동적 분석)는 프로그램을 실제로 실행시켜 보고 버그가 있는지 확인합니다. +분석의 진행 상황을 파악하기 위해서 "Coverage"라는 metric을 사용합니다. +어떤 coverage를 사용하느냐에 따라 분석의 탐지 능력이 달라집니다. +일반적으로 높은 coverage를 달성하기 어려울수록 탐지 능력도 강화됩니다. + +Static analysis(정적 분석)는 프로그램의 상태를 추상화합니다. +어떻게 상태를 추상화하느냐에 따라 탐지할 수 있는 버그의 종류가 달라집니다. +대표적으로 Type이 있습니다. 프로그램 각 변수들의 값을 실제 값(concrete value)가 아닌 타입(abstract value)로 관측하면서 변화를 추적합니다. +이렇게 Type으로 정적분석을 하게 되면 프로그램에 있는 Type error를 탐지할 수 있게 됩니다. +만약 변수들의 값을 zero or non-zero로 추상화하게 되면 div-by-zero bug를 탐지할 수 있습니다. + +#### Fault localization +프로그램에 버그가 있는 것이 드러나면 해당 버그를 찾아내기 위해서 Fault locatlization을 수행합니다. +프로그램상에서 버그가 있을 것으로 추정되는 부분을 점차 줄여나가며 버그의 위치를 찾아내는 방식을 사용합니다. +버그 위치를 추정하는 방법으로 커버리지 기반 추정 기법, 스펙트럼 기반 기법, 뮤테이션 기반 기법 등 다양한 기법이 있습니다. +# 마무리 +지금까지 테스팅에 관한 기초적인 내용들을 말씀드렸습니다. +테스팅은 분야에 따라 개발 자체보다 더 중요한 요소가 될 수 있습니다. +테스팅의 중요성이 조금이나마 전달되길 바라며 이 글을 마칩니다. 감사합니다! \ No newline at end of file diff --git a/blog/authors.yml b/blog/authors.yml index 07c141b..bde1234 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -69,3 +69,9 @@ suwon: title: 곧 카이스트 졸업할 몸 url: https://github.com/14kgun image_url: https://github.com/14kgun.png + +duncan: + name: 이동재 (duncan) + title: 척척박사가 될래요 + url: https://github.com/duncan020313 + image_url: https://github.com/duncan020313.png \ No newline at end of file