Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 1448] ファイルの概要

このコミットは、Go言語のテストスイートにおけるbug046bug080という2つの既知のバグを修正したものです。具体的には、これらのバグに関連するテストファイルをtest/bugsディレクトリからtest/fixedbugsディレクトリへ移動させ、test/golden.outファイルからこれらのバグに関するエントリを削除することで、修正が反映されたことを示しています。

コミット

bug046 and bug080 are fixed

R=r
DELTA=72  (30 added, 42 deleted, 0 changed)
OCL=22373
CL=22378

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/51c3ac7e3fabaaeb551bb1d287c840d5208e5be4

元コミット内容

commit 51c3ac7e3fabaaeb551bb1d287c840d5208e5be4
Author: Russ Cox <rsc@golang.org>
Date:   Thu Jan 8 20:06:37 2009 -0800

    bug046 and bug080 are fixed
    
    R=r
    DELTA=72  (30 added, 42 deleted, 0 changed)
    OCL=22373
    CL=22378
---
 test/{bugs => fixedbugs}/bug046.go |  0
 test/{bugs => fixedbugs}/bug080.go |  0
 test/golden.out                    | 12 ------------
 3 files changed, 12 deletions(-)

diff --git a/test/bugs/bug046.go b/test/fixedbugs/bug046.go
similarity index 100%
rename from test/bugs/bug046.go
rename to test/fixedbugs/bug046.go
diff --git a/test/bugs/bug080.go b/test/fixedbugs/bug080.go
similarity index 100%
rename from test/bugs/bug080.go
rename to test/fixedbugs/bug080.go
diff --git a/test/golden.out b/test/golden.out
index 8ee55ef353..132286615f 100644
--- a/test/golden.out
+++ b/test/golden.out
@@ -34,9 +34,6 @@ Faulting address: 0x0
 pc: xxx
 
 
-=========== ./method2.go
-BUG: errchk: command succeeded unexpectedly:  6g ./method2.go
-\
 =========== ./peano.go
 0! = 1
 1! = 1
@@ -87,21 +84,12 @@ PASS
 =========== bugs/bug041.go
 BUG: compilation succeeds incorrectly
 
-=========== bugs/bug046.go
-BUG: errchk: command succeeded unexpectedly:  6g bugs/bug046.go
-\
 =========== bugs/bug064.go
 bugs/bug064.go:15: illegal types for operand: CALL
  int
  struct { u int; v int }
 BUG: compilation should succeed
 
-=========== bugs/bug080.go
-bugs/bug080.go:12: illegal types for operand: CALL
- int
- struct { x int; y float }
-BUG: fails incorrectly
-\
 =========== bugs/bug085.go
 bugs/bug085.go:8: P: undefined
 BUG: fails incorrectly

変更の背景

このコミットの背景は、Go言語の開発初期段階におけるバグ修正プロセスの一環です。Go言語は当時まだ活発に開発されており、コンパイラ、ランタイム、標準ライブラリには多くのバグが存在していました。これらのバグは、テストスイート内の特定のテストケースによって捕捉され、test/bugsディレクトリに配置されていました。

test/bugsディレクトリは、Goコンパイラやツールチェーンが正しく動作しない、または予期せぬ動作をする既知のバグを示すテストケースを格納するために使用されていました。これらのテストは、バグが修正されるまで失敗し続けることが期待されていました。

bug046bug080は、Go言語のコンパイラまたはランタイムにおける特定の不具合を露呈させるテストケースでした。これらのバグが特定され、根本原因が修正されたため、関連するテストケースはもはや「バグ」を示すものではなくなり、「修正済み」のテストとして扱われるべきとなりました。このコミットは、その状態変化をコードベースに反映させるためのものです。

前提知識の解説

  • Go言語のテストスイート: Go言語のプロジェクトには、言語仕様、コンパイラ、ランタイム、標準ライブラリの正確性を検証するための広範なテストスイートが含まれています。これらのテストは、開発中に発見されたバグの回帰を防ぐためにも利用されます。
  • test/bugsディレクトリ: Go言語のテストディレクトリ構造において、test/bugsは、まだ修正されていない既知のバグを示すテストケースを格納するための慣習的な場所でした。これらのテストは、バグが修正されるまで失敗することが期待されていました。
  • test/fixedbugsディレクトリ: test/fixedbugsは、以前はバグとして認識されていたが、現在は修正された問題に関連するテストケースを格納するためのディレクトリです。テストケースがこのディレクトリに移動されることは、そのバグが解決され、テストが成功するようになったことを意味します。これにより、将来的に同じバグが再発しないことを確認するための回帰テストとして機能します。
  • test/golden.outファイル: このファイルは、Go言語のテストスイートにおける「ゴールデンファイル」の一種であると考えられます。ゴールデンファイルテストは、プログラムの出力が特定の期待される出力(ゴールデンファイルの内容)と一致するかどうかを検証するテスト手法です。この文脈では、golden.outは、特定のテストケース(特にバグを示すもの)が生成するエラーメッセージや予期される失敗の出力を記録していた可能性があります。バグが修正されると、そのバグに関連するエラー出力はもはや期待されないため、golden.outから対応するエントリが削除されます。
  • 6g: これは、Go言語の初期のコンパイラ(gcツールチェーンの一部)の名前です。Go言語のバージョン1.0以前は、コンパイラはターゲットアーキテクチャに基づいて命名されていました(例: 6gはamd64用、8gは386用、5gはarm用)。6g ./method2.goのような記述は、method2.goというファイルを6gコンパイラでコンパイルしようとしたことを示しています。
  • BUG: errchk: command succeeded unexpectedly: これは、テストシステムが期待する動作と実際の動作が異なった場合に表示されるメッセージです。この場合、「エラーチェックコマンドが予期せず成功した」とあり、本来エラーになるべきコンパイルが成功してしまったことを示唆しています。これはコンパイラのバグである可能性が高いです。
  • BUG: fails incorrectly: これは、テストが誤って失敗したことを示します。つまり、本来成功すべきテストが失敗した、または期待されるエラーとは異なるエラーで失敗したことを意味します。

技術的詳細

このコミットの技術的詳細は、Go言語のテストインフラストラクチャとバグ追跡のメカニズムに深く関連しています。

  1. テストファイルの移動:

    • test/bugs/bug046.go から test/fixedbugs/bug046.go へのリネーム。
    • test/bugs/bug080.go から test/fixedbugs/bug080.go へのリネーム。 このファイル移動は、これらのテストケースがもはや「未修正のバグ」を示すものではなく、「修正済みのバグに対する回帰テスト」として機能することを示す、セマンティックな変更です。ファイルの内容自体は変更されていません(similarity index 100%| 0行の変更がそれを示しています)。これは、バグの修正がテストファイル自体ではなく、Goコンパイラやランタイムのコードベースで行われたことを意味します。
  2. test/golden.outからのエントリ削除: test/golden.outファイルから、bug046.gobug080.goに関連する以下の行が削除されています。

    =========== bugs/bug046.go
    BUG: errchk: command succeeded unexpectedly:  6g bugs/bug046.go
    
    =========== bugs/bug080.go
    bugs/bug080.go:12: illegal types for operand: CALL
     int
     struct { x int; y float }
    BUG: fails incorrectly
    

    これらのエントリは、以前はbug046.gobug080.goが特定のコンパイルエラーやランタイムエラーを引き起こすことをgolden.outが期待していたことを示しています。

    • bug046.goの場合、「6g bugs/bug046.goというコマンドが予期せず成功した」というバグが記録されていました。これは、コンパイラが本来エラーを出すべきコードに対してエラーを出さなかったことを意味します。修正により、このテストは正しくエラーを出すようになったか、またはコードが修正されてエラーが不要になったかのいずれかです。
    • bug080.goの場合、「illegal types for operand: CALL」というコンパイルエラーが期待されていましたが、テストが「誤って失敗した」と記録されていました。これは、コンパイラが間違ったエラーを出していたか、またはテストの意図と異なる挙動をしていたことを示唆します。修正により、このテストは期待通りに動作するようになったと考えられます。

    これらのエントリがgolden.outから削除されたことは、これらのバグが修正され、関連するテストがもはや期待されるエラー出力を生成しない(または、テストが成功するようになった)ことを明確に示しています。これは、Go言語のテストハーネスが、特定のテストの出力がgolden.outの内容と一致するかどうかをチェックしていたことを示唆しています。

このコミットは、Go言語の継続的な品質保証とバグ修正のサイクルの一部であり、テストスイートが言語の進化に合わせて更新されていることを示しています。

コアとなるコードの変更箇所

diff --git a/test/bugs/bug046.go b/test/fixedbugs/bug046.go
similarity index 100%
rename from test/bugs/bug046.go
rename to test/fixedbugs/bug046.go
diff --git a/test/bugs/bug080.go b/test/fixedbugs/bug080.go
similarity index 100%
rename from test/bugs/bug080.go
rename to test/fixedbugs/bug080.go
diff --git a/test/golden.out b/test/golden.out
index 8ee55ef353..132286615f 100644
--- a/test/golden.out
+++ b/test/golden.out
@@ -34,9 +34,6 @@ Faulting address: 0x0
 pc: xxx
 
 
-=========== ./method2.go
-BUG: errchk: command succeeded unexpectedly:  6g ./method2.go
-\
 =========== ./peano.go
 0! = 1
 1! = 1
@@ -87,21 +84,12 @@ PASS
 =========== bugs/bug041.go
 BUG: compilation succeeds incorrectly
 
-=========== bugs/bug046.go
-BUG: errchk: command succeeded unexpectedly:  6g bugs/bug046.go
-\
 =========== bugs/bug064.go
 bugs/bug064.go:15: illegal types for operand: CALL
  int
  struct { u int; v int }
 BUG: compilation should succeed
 
-=========== bugs/bug080.go
-bugs/bug080.go:12: illegal types for operand: CALL
- int
- struct { x int; y float }
-BUG: fails incorrectly
-\
 =========== bugs/bug085.go
 bugs/bug085.go:8: P: undefined
 BUG: fails incorrectly

コアとなるコードの解説

このコミットにおけるコアとなるコードの変更は、以下の2つのタイプに分類されます。

  1. ファイルの移動(リネーム):

    • test/bugs/bug046.gotest/fixedbugs/bug046.go にリネームされました。
    • test/bugs/bug080.gotest/fixedbugs/bug080.go にリネームされました。 similarity index 100% は、ファイルの内容が変更されていないことを示しています。これは、バグ自体がGoコンパイラやランタイムの他の部分で修正されたため、これらのテストファイルはもはやバグを再現するものではなく、修正が正しく行われたことを検証する回帰テストとして機能するようになったことを意味します。
  2. test/golden.outからの行削除: test/golden.outファイルから、bug046.gobug080.goに関連する複数の行が削除されています。

    • bug046.goに関連する削除行:
      -=========== bugs/bug046.go
      -BUG: errchk: command succeeded unexpectedly:  6g bugs/bug046.go
      
      これらの行は、以前はbug046.goがコンパイル時に予期せぬ成功(つまり、本来エラーになるべきものがエラーにならなかった)を引き起こすバグがあることをgolden.outが記録していたことを示しています。この行が削除されたことで、このバグが修正され、テストが期待通りに動作するようになったことを意味します。
    • bug080.goに関連する削除行:
      -=========== bugs/bug080.go
      -bugs/bug080.go:12: illegal types for operand: CALL
      - int
      - struct { x int; y float }
      -BUG: fails incorrectly
      
      これらの行は、以前はbug080.goが「不正な型のオペランド」というコンパイルエラーを引き起こし、かつそのテストが「誤って失敗した」と記録されていたことを示しています。この行が削除されたことで、このバグも修正され、テストが正しく成功するか、または期待されるエラーを正しく報告するようになったことを意味します。

これらの変更は、Go言語のテストスイートが、バグのライフサイクル(発見、修正、回帰テスト)を管理するためにどのように使用されているかを示しています。golden.outのようなファイルは、テストの期待される出力をバージョン管理下に置くことで、テストの安定性と信頼性を確保するのに役立ちます。

関連リンク

  • Go言語の初期のバグトラッカーやメーリングリストのアーカイブ(もしあれば、特定のバグ番号bug046bug080に関する議論が見つかる可能性がありますが、このコミットの時点では公開されている情報が少ない可能性があります。)
  • Go言語のテストフレームワークに関するドキュメント(もしあれば)

参考にした情報源リンク

  • Go言語の公式Gitリポジトリ: https://github.com/golang/go
  • Go言語の初期のコンパイラ(6gなど)に関する情報(Go言語の歴史に関する記事やドキュメント)
  • ゴールデンファイルテストに関する一般的な情報