컴파일러 검증 방법이 어떤것이 있을까요??

ds5nde의 이미지

컴파일러 검증을 위한 일반적인 접근 방법이 어떤것이 있을까 궁금해서 글을 올려봅니다.

보통 Vendor들의 홈페이지에서는 수천개의 코드를 이용해서 테스트를 했다

정도의 언급만 있을뿐 더 자세한 내용은 없습니다.

수치연산이나 분기등에 대한 무결성을 확인하기 위한 방법이 어떤것이 있는지요?

간단히 생각해서는 발생가능한 수치연산이나 분기에 대한 예제코드를 수행해보는 것인데,

이것도 개인이 생각해내서 하면 어느정도 한계가 있으리라 생각이 됩니다.

혹시 이에 관한 논문이나 관련 정보 혹은 커맨트 부탁드립니다

M.W.Park의 이미지

공개된 컴파일러의 소스에는 테스트 코드가 포함되어 있을 것입니다.
그 테스트 코드를 활용하면 cross 검증 같은 것도 가능할듯 싶네요.

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

semmal의 이미지

http://ropas.snu.ac.kr/~kwang/papers.html

------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

imyejin의 이미지

등으로 검색해 보시면 됩니다.

몇 가지 접근 방법이 있는데,

첫째는 컴파일러 자체를 만들 때 컴파일러에 오류가 없다는 것을 자체적으로 증명할 수 있도록 하는 고차원의 검증 능력을 갖춘 시스템으로 컴파일러를 작성하는 것입니다. 이론적으로 완벽한 이야기인데, 문제는 컴파일러라는 것의 덩치가 워낙에 클 수 있기 때문에 당장에 이런 컴파일러가 상용화되기는 힘들 것입니다. 또한 이 방법의 또 한 가지 한계는, 검증된 컴파일러 외에도 항상 많은 다른 컴파일러들이 존재할 수 있다는 것입니다. (아 물론 그 컴파일러를 작성하는 시스템은 또 어떻게 믿느냐는 문제가 계속 꼬리를 물기도 하고요.)

그래서 나온 생각이 컴파일러 자체는 오류가 있을 수 있을지도 모르지만, 컴파일러가 코드를 생성할 때 컴파일 과정에서 생성된 코드가 어떤 조건을 만족한다는 증명을 같이 생성하는 것입니다. 이 아이디어는 조지 네큘라가 시작한 것으로 proof carrying code 라고 불립니다. 컴파일러 전체는 증명하지 못할지라도 컴파일러가 어떤 증명을 자동으로 작성하게 하고, 그 자동으로 작성된 증명을 생성된 코드가 만족하는가를 검증하는 검증기를 만들면 됩니다. 이 검증기 자체는 컴파일러보다 작을 수 있기 때문에 믿어야 하는 소프트웨어의 크기 즉 trusted base 의 크기를 줄일 수 있으며, 서로 다른 컴파일러가 같은 형식의 증명 기술 방법을 사용하면 검증기를 공유할 수 있습니다. 하지만 이것도 아직은 실용화되려면 시간이 어느 정도 걸릴 것입니다.

마지막으로 이미 이용되고 있는 아이디어가 있는데 그것은 typed assembly language 라는 것입니다. 컴파일러가 생성하는 저급 언어 자체에 타입 시스템 등과 같은 고급 프로그래밍 언어의 방법론을 도입하거나 생성된 저급 언어에 대한 프로그램 분석을 통하여 최소한의 무결성을 검사하는 방법입니다. 컴파일러 자체의 무결성이나 정확성을 검사할 수는 없지만, 최소한 하드웨어나 플랫폼이 요구하는 최소한의 동작 방식을 따르고 있는지를 검사할 수는 있습니다. 자바 바이트 코드와 같은 것도 일종의 TAL이라고 볼 수 있으며, 실제로 자바 바이트 코드를 실행하기 전에 스택 언더플로 등과 같은 것은 정적으로 검사가 가능하지요.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.