Skip to content

Commit

Permalink
[posts] update korean writings
Browse files Browse the repository at this point in the history
  • Loading branch information
goodtaeeun committed Jan 10, 2024
1 parent fe90f4c commit e2de09c
Show file tree
Hide file tree
Showing 24 changed files with 513 additions and 0 deletions.
19 changes: 19 additions & 0 deletions _posts/2021-08-12-about-love.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
title: 진정한 사랑에 대하여
date: 2021-08-12
author: Tae Eun Kim
kor_author: 김태은
tags:
- Writing Practice
classes:
---

### 요약
사람들이 보편적으로 얘기하는 사랑과 진정한 사랑은 거리가 멀다. 우리가 미디어를 통해 접하는 사랑은 불타오르는 정열적인 사랑이지만 이것은 사랑의 전부가 아니다. 진정한 사랑은 감정을 넘어서 그저 헌신하기로 결정하는 것이다.

### 본문
사람들이 보편적으로 얘기하는 사랑과 진정한 사랑은 거리가 멀다. 물론 정말 많은 사람들이 진정한 사랑을 찾고자 노력한다. 가요나 영화등의 대중매체를 보면 사람들이 얼마나 사랑을 원하는지 알 수 있다. 옛날 사람들도 다를 바 없어서 오래된 사랑 노래나 소설도 쉽게 찾을 수 있다. 하지만 사람들은 진정한 사랑이 무엇인지 잘 모르고 있다.

우리가 미디어를 통해 접하는 사랑은 불타오르는 정열적인 사랑이지만 이것은 사랑의 전부가 아니다. 물론 사랑에 감정적인 요소는 분명히 존재한다. 하지만 이런 뜨거운 감정은 유효기간이 불과 1년 반에서 3년밖에 되지 않는다. 따라서 영화 주인공들 같은 사랑을 기대했다면 짧게는 1년 반 안에 상대에게 실망하여 그 다음 "진정한 사랑"의 후보를 찾게 될 것이다. 설렘도 사라진다. 동일한 자극에 익숙해 질수록 분비되는 호르몬의 수준은 점차 줄어들 것이고 결국 내성이 생기게 된다.

진정한 사랑은 감정을 넘어서 그저 헌신하기로 결정하는 것이다. 앞서 말한 정서적인 요인들은 스스로 조절할 수 없지만, 선택과 결정은 자신의 통제 범위 안에 있다. 이러한 시각으로 사랑을 바라본다면 뜨겁지 않다거나 설레지 않아서 헤어진다는 것은 핑계에 불과하다는 것을 알 수 있다. 결국 헤어지는 것은 자신의 선택이고, 더 이상 사랑하지 않기로 결정하는 것이다. 따라서 오랫동안 흔들리지 않는 사랑을 하기 위해서는 상대방을 계속해서 사랑하겠다고 약속하고 그 약속을 지키는 것이 중요하다. 뜨거운 사랑보다 변함없는 사랑이 더 진정한 사랑이라 할 수 있을 것이다.
21 changes: 21 additions & 0 deletions _posts/2021-08-26-about-fault-localization.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
title: 결함 위치 추정 기술에 대하여
date: 2021-08-26
author: Tae Eun Kim
kor_author: 김태은
tags:
- Writing Practice
classes:
---

### 요약
결함 위치 추정은 자동으로 프로그램의 결함이 존재하는 위치를 찾아내는 기술이다. 이 분야에서 지금까지 제안된 기술들은 크게 두 가지로 나눌 수 있다. 최근에는 다양한 기술들의 결과를 조합하는 기술들이 연구되고 있다.

### 본문
결함 위치 추정은 자동으로 프로그램의 결함이 존재하는 위치를 찾아내는 기술이다. 프로그램에 결함이 발생하였을 때, 자동으로 이를 찾아 준다면 개발자 입장에서는 많은 시간이 절약될 수 있다. 또한 결함 위치 추정 기술은 소프트웨어 유지 보수 자동화의 완성체인 자동 프로그램 수정 기술의 등장과 맞물려 재조명을 받게 되었다. 왜냐하면 결함 위치 추정 기술은 프로그램을 수정할 위치의 정보를 제공해주기에 자동 프로그램 수정 기술에 꼭 필요한 요소이기 때문이다.


이 분야에서 지금까지 제안된 다양한 기술들은 크게 두 가지로 나눌 수 있다. 이 두 가지는 Spectrum-based, 그리고 Mutation-based 방법으로 각각 주어진 테스트 케이스 실행을 통해 수집된 커버리지 정보를 활용하는 방법, 그리고 프로그램을 변이시켜 그 실행결과를 활용하는 방법이다. Spectrum-based는 매우 단순하지만 효과적인 발상으로 문제를 접근하는데, 이는 특정 프로그램 위치를 실패한 테스트 케이스가 많이 지나가고, 성공한 테스트 케이스는 덜 지나갈 수록 해당 위치에 결함이 있을 확률이 높다는 것이다. Mutation-based 또한 단순한 발상에서 시작한다. 특정 프로그램 위치를 변이시켰을 때, 성공하던 테스트 케이스는 유지하면서 실패하던 테스트 케이스는 줄어든다면, 해당 위치에 결함이 있을 확률이 높다는 것이다. 해당 발상에 기반하여 많은 연구자들이 지금까지 다양한 기술을 제안해왔다.


최근에는 다양한 기술들의 결과를 조합하는 기술들이 연구되고 있다. 이러한 접근은 기존의 기술들로부터 도출된 결함위치 추정 결과들을 함께 학습하여, 더 정확한 결과를 도출하고자 하는 노력으로 이어졌다. 구체적으로는 특히 Learn to Rank로 불리는 방법을 사용하여 각 프로그램 위치들을 어떻게 정렬하면 될지 학습하고, 새로운 프로그램이 주어졌을 때, 그 안의 위치들을 올바르게 정렬하는 것을 목표로 한다.
21 changes: 21 additions & 0 deletions _posts/2021-09-09-know-wide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
title: 다양한 분야의 지식을 갖춰야 하는 이유
date: 2021-09-09
author: Tae Eun Kim
kor_author: 김태은
tags:
- Writing Practice
classes:
---

### 요약
연구를 할 때, 한 분야에서 널리 알려진 사실이 다른 분야의 새로운 돌파점이 될 수 있다. 이러한 경우의 가장 대표적인 사례는 전자공학에 불 대수를 도입한 것이라 할 수 있다. 이렇게 새로운 돌파구를 찾기 위해서는 다양한 지식을 아는 것이 중요하다. 따라서 새로운 지식을 탐구하고자 하는 연구자는 자신의 분야에만 몰두하지 않고 여러 분야에 귀를 기울이는 자세를 갖춰야 한다.

### 본문
한 분야에서 널리 알려진 사실이 다른 분야의 새로운 돌파점이 될 수 있다. 연구를 하다 보면 자신의 연구 주제에만 몰두하여 시야가 좁아지기 쉽다. 그러나 같은 분야의 사람들이 같은 생각과 지식으로 오랜 시간 매달리던 문제가 새로운 분야의 지식으로 해결되는 경우가 있다. 이 때 주목할 점은, 이것은 새로운 분야의 지식일 뿐이지, 새로운 지식이 아니라는 점이다.

여러 사례들 중 가장 인상적인 것은 전자회로 설계에 불 대수를 도입한 것이다. 불 대수는 이미 논리학 분야에서 발표되어 널리 받아들여지고 있었지만 두 세계는 서로에게 미지의 영역으로 남아있었다. 이 때 이 사이에 다리를 놓은 것이 바로 클로드 섀넌이다. 가장 위대한 석사 논문 중 하나로 인정받는 클로드 섀넌의 석사 졸업 논문을 통해 불 대수가 전자회로 설계에 도입되어 디지털 컴퓨터의 시대가 열리게 되었다.

그 외에도 다양한 사례들이 존재한다. 진화론의 자연선택설에서 영감을 받은 유전 알고리즘은 컴퓨터 공학 분야에서 NP 문제의 근사해를 구할 때 때 활용되고 있다. 또한 인간의 시신경 구조를 바탕으로 설계된 딥러닝 기법 CNN은 영상처리 성능을 월등하게 끌어올렸다. 직접적인 적용이 아니더라도 영감을 얻은 경우까지 고려한다면 정말 수많은 사례들을 나열할 수 있을 것이다.

이렇게 오래된 문제의 새로운 돌파구를 찾기 위해서는 좁아진 시야를 넓혀 다른 분야에도 귀를 기울일 필요가 있다. 한 영역의 문제의 답이 반드시 그 영역 안에만 존재한다는 보장이 없기 때문이다. 그렇기에 연구를 하는 사람이라면 편식하지 말고 다양한 지식을 접하도록 노력해야 한다. 그 지식을 자신의 것으로 만들고 이를 엮어낼 때, 새로운 지식이 탄생할 가능성이 있기 때문이다.
21 changes: 21 additions & 0 deletions _posts/2021-09-23-expression.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
title: 표현의 중요성
date: 2021-09-23
author: Tae Eun Kim
kor_author: 김태은
tags:
- Writing Practice
classes:
---

### 요약
마음을 전달할 때처럼 지식을 전달할 때도 표현하는 방식이 중요하다. 컴퓨터 프로그램도 일종의 지식으로 그 의미를 전달하는 다양한 방법이 있다. 코드 그 자체도, 사람이 작성한 설명도, 모두 프로그램의 의미를 표현하는 방법이다. 이 때, 두 표현 방식이 전달하는 의미의 수준이 비슷하다면 쉽게 상호변환이 가능하다. 따라서 모든 프로그램 표현 방식을 의미 수준에 따라 연결한다면, 코드에서 사람이 작성한 것 같은 설명으로의 전이적 변환도 가능할 것이다.

### 본문
무엇이든 잘 표현하는 것이 중요하다. 가족이나 연인 관계에서 자신의 마음을 잘 표현하는 것이 중요하듯이 연구에서도 표현은 중요한 문제다. 지식을 더 잘 전달하고 설명하기 위해서이다. 잘 그린 그림이나 공식으로 수십페이지의 글을 설명할 수 있고, 간결하게 개념을 전달할 수 있다.

컴퓨터 프로그램을 표현하는 것도 굉장히 중요한 문제이다. 적절한 프로그램 표현 방식은 자동으로 프로그램을 수정/생성하는 연구, 자동으로 결함의 위치를 찾는 연구, 또는 퍼징이나 정적분석 등 많은 연구 분야에서 중요한 요소이기 때문이다. 이때, 적절하다는 것은 각 연구의 필요에 따라 다양한 의미를 지니게 된다. 따라서 어떤 경우에는 코드의 있는 그대로, 어떤 경우에는 추상구문트리나 유한상태오토마타가, 또는 단순한 문자열 토큰의 나열이 사용된다.

이처럼 다양한 프로그램 표현 방식들이 사용되지만 대부분이 공통적으로 표현하고자 하는 것은 프로그램의 의미다. 이 때, 주석 하나 없는 코드에서부터 사람의 언어로 구구절절 풀어쓴 설명까지의 범위를 의미 표현의 스펙트럼이라고 한다면, 대부분의 프로그램 표현 방식들은 이 안에 들어갈 것이다. 넓게 보면 코드 그 자체로도, 추상구문트리 등의 프로그램 구조를 통해서도, 프로그램 상태의 집합을 통해서도 프로그램의 의미를 표현할 수 있지만 사람이 직관적으로 이해할 수 있는 정도는 다르기 떼문이다.

이러한 의미 표현 스펙트럼이 잘 정리된다면 코드에서 사람이 작성한 것 같은 설명으로, 혹은 그 반대로의 변환도 수월할 것으로 예상된다. 코드로부터 풀어쓴 설명은 도출하기 어려워도, 추상구문트리는 쉽게 만들 수 있기 때문이다. 이처럼 보다 수월한 작은 단계의 변환이 연쇄적으로 이루어진다면 스펙트럼의 끝에서 끝으로의 변환도 가능할 것이다.
21 changes: 21 additions & 0 deletions _posts/2021-10-07-afl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
title: AFL, 무작위성도 꿰어야 보배
date: 2021-10-07
author: Tae Eun Kim
kor_author: 김태은
tags:
- Writing Practice
classes:
---

### 요약
Fuzzing은 사람이 예측하지 못한 무작위 입력을 통해 프로그램을 테스트하는 기법이다. 하지만 무작위성만 갖춘 단순한 Fuzzing은 명백한 한계가 존재한다. 이를 보완하기 위해 Mutation과 Greybox의 개념을 탑재한 AFL이라는 도구가 등장하였다. AFL은 놀라운 성능을 보여주었고 수많은 후속 연구들이 이를 기반으로 다양한 Fuzzer를 제안하였다. 무작위성엔 강력한 힘이 있지만 AFL과 같이 적절히 통제하였을 때 더 유용한 도구가 된다.

### 본문
말 그대로 태풍속에서 태어난 Fuzzing은 일반적이지 않은 무작위성 입력을 통해 프로그램을 테스트 하는 기법이다. 사람이 만든 테스트는 프로그램의 일반적인 실행에 상식적인 예외사항이 더해져서 만들어지지만, Fuzzing은 그보다 훨씬 넓은 범위의 입력을 테스트로 던지게 된다. 이를 통해 개발자가 예상하지 못했던 프로그램의 결함을 더 많이 찾을 수 있다.

하지만 순전히 무작위성에 기대서는 프로그램을 깊이 관통하는 입력을 생성할 수 없다. 프로그램에 들어갈 수 있는 입력은 거의 무한하지만 실제로 프로그램이 처리하는 입력은 제한되어 있기 때문이다. 따라서 올바른 입력을 변형하여 새로운 입력을 생성하는 Mutation이라는 개념이 도입되었다. 하지만 아무리 좋은 입력을 생성해도 실행 결과만 가지고는 Fuzzing 과정이 잘 되고 있는지 확인할 방법이 없다. 이에 최소한의 프로그램 실행 정보, 즉 커버리지 달성률을 통해 Fuzzing을 보조하는 Greybox Fuzzing이라는 개념도 등장하였다.

AFL은 상술한 두 개념에 기반하여 탄생한 Fuzzing 도구이다. AFL은 효과적인 커버리지 달성을 통해수많은 버그를 발견하였으며, JPEG 파일을 입력으로 받는 프로그램의 경우, Fuzzing을 하며 6시간만에 "hello"라는 문자열에서 JPEG 파일을 생성해 내기도 하였다. 이러한 성능에 매료된 수많은 후속 연구들이 이를 기반으로 한 Fuzzer를 제안하였으며, AFL은 마치 하나의 플랫폼처럼 자리잡았다.

AFL은 무작위성과 컴퓨팅 파워가 있는 그대로도 강력한 도구지만 이를 적절히 통제한다면 비약적인 성능 향상을 이룰 수 있는 것을 보여주었다. 이처럼 주어진 자원을 효과적으로 잘 사용하는 것은 공학의 기초이고, 연구자가 항상 고민해야 될 문제일 것이다.
21 changes: 21 additions & 0 deletions _posts/2021-10-21-directed-fuzzing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
title: "지향성 퍼징: 선택과 집중의 미학"
date: 2021-10-21
author: Tae Eun Kim
kor_author: 김태은
tags:
- Writing Practice
classes:
---

### 요약
퍼징은 효과적으로 프로그램 전체를 탐색하는 테스팅 기법이지만 프로그램의 특정 부분만 테스트하는 용도로는 적절하지 못하다. 이에 제안된 것이 기존의 무지향성 퍼징과 차별화된 지향성 퍼징이다. 지향성 퍼징은 사용자가 원하는 지점까지 도달하는 입력을 생성하는 것이 목적을 가지며 다양한 상황에서 활용될 수 있다. 이 글에서는 Def-use Graph를 통해 기존의 지향성 퍼징 기술보다 더 탐색 범위를 좁히는 방법을 제안하고자 한다.

### 본문
퍼징은 무작위한 입력을 생성하여 프로그램을 전반적으로 테스트하는 기술이다. 대상 프로그램에 대한 정보가 거의 없는 상황에서도 프로그램을 효과적으로 관통하는 입력을 만들어내는 등, 퍼징은 강력한 성능으로 인해 많은 사랑을 받아왔다. 그러나 은 총알(Silver Bullet)은 없다는 말<sup>[1](#silverbullet)</sup>처럼 퍼징도 모든 상황에 적합한 만능 도구는 아니다. 별다른 정보 없이 무작위성에 기대어 프로그램의 모든 부분을 탐색하려다 보니, 검사하고 싶은 특정한 위치가 있는 경우에는 퍼징이 적절하지 않다고 볼 수 있다.

이러한 기존의 퍼징, 즉 무지향성 퍼징과 차별화된 기법이 바로 지향성 퍼징이다. 지향성 퍼징의 목적은 사용자가 원하는 지점까지 도달하는 입력을 빠르게 생성하는 것이다. 코드를 새로 추가하거나 수정했을 때, 혹은 결함위치추정 결과가 있을 때는 일부의 코드만 우선적으로 검사해야할 필요가 있다. 하지만 전체 코드에서 원하는 부분을 실제로 실행하는 입력을 만들어내기 어려울 수 있다. 지향성 퍼징은 이런 상황에서 효과적으로 필요한 입력을 생성하고 원하는 코드를 시험할 수 있도록 한다.

기존의 지향성 퍼징 기술들은 Control Flow Graph를 활용하는 등의 방식으로 목표하는 지점에 도달하였다. 하지만 Control Flow Graph는 프로그램의 문법적인 구조만 나타내기 때문에 목표하는 지점과 실제로는 상관이 없는 지점들을 구분할 수 없다. 따라서 정적분석을 수행하여 Def-use Graph를 활용한다면, 각 지점에 실제로 영향을 주는 프로그램의 위치들을 알 수 있고, 이를 통해 더욱 빠르고 효과적으로 목표 지점에 도달할 수 있을 것이다.

[<a name="silverbullet">1</a>] Brooks, F. & Kugler, H. (1987). No Silver Bullet
24 changes: 24 additions & 0 deletions _posts/2021-11-04-beacon.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
title: "BEACON: 감탄고토 Fuzzing"
date: 2021-11-04
author: Tae Eun Kim
kor_author: 김태은
tags:
- Writing Practice
classes:
---

### 요약
지향성 퍼징은 대상 프로그램의 특정 위치에 도달하는 입력을 생성하는 것을 목적으로 한다. 기존의 지향성 퍼징 도구들은 어떻게 더 의미있는 입력을 생산할지에 관심을 가져왔다. BEACON<sup>[1](#beacon)</sup>은 이와 달리 어떻게 목표 지점에 도달 할 수 없는 입력의 실행을 조기에 종료할 지에 관심을 가진다. 기존의 지향성 퍼징과 BEACON은 함께 사용될 시, 서로를 보완하며 더 뛰어난 성능을 보여줄 것으로 기대된다.

### 본문
지향성 퍼징의 목적은 사용자가 원하는 지점까지 도달하는 입력을 빠르게 생성하는 것이다. 기존의 지향성 퍼징 도구들, 특히 Greybox 퍼징 도구들은 목표 지점과의 거리 등을 고려하여 점진적으로 목표 지점에 더 가까이 도달하는 입력을 만드려고 노력하였다. 따라서 퍼징 과정에서 목표 지점과 더 가까운 입력을 찾는다면 그 입력을 새로운 Seed로 삼는 접근을 취해왔다.

BEACON은 기존의 퍼징 도구들과는 조금 다른 방식으로 목표 지점에 도달하는 입력을 찾는다. BEACON은 직접적으로 목표 지점으로 향하는 입력을 찾기보다, 목표지점으로 향하지 않는 입력을 조기에 종료한다. 무의미한 실행을 조기에 종료함으로써, 주어진 시간안에 목표지점에 도달하는 입력을 찾을 가능성을 높이는 것이다.

구체적으로 BEACON은 두가지 기준을 가지고 입력의 목표지점 도달 가능성을 판단한다. 이 기준들은 입력이 지나는 프로그램의 각 위치에서 검사가 이루어진다. 첫번째 기준은 Control Flow Graph상에서 현재 지점과 목표지점 사이의 길이 존재하는 지의 여부이다. 두번째 기준은 현재 위치에서 가지고 있는 변수의 값들이, 목표지점에 도달하기 위한 조건을 만족하는지의 여부이다.
BEACON은 이 두 기준을 각 프로그램 지점에 assert문의 형태로 삽입하여 특정 입력이 목표지점에 닿을 수 없는 것이 확인되면 해당 입력의 실행을 즉시 종료한다.

기존 지향성 퍼징이 목표지점에 더 가까이 도달할 입력을 "생성"하는 것에 더 관심을 두었다면, BEACON은 이미 생성된 입력이 목표지점에 도달하지 못할 경우, 조기에 "종료"하는 것에 관심을 둔다. 따라서 두 접근은 서로 독립적인 접근이며 서로를 보완할 수 있을 것이다.

[<a name="beacon">1</a>] "BEACON : Directed Grey-Box Fuzzing with Provable Path Pruning", Huang et al., S&P 2022
Loading

0 comments on commit e2de09c

Please sign in to comment.