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

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

このコミットは、Go言語の初期開発段階におけるテスト関連の変更です。具体的には、test/golden.out というファイルが更新され、2つの異なる「hello, world」出力が追加されました。これは、Go言語のテストスイートにおいて、特定のプログラムの期待される出力を記録する「ゴールデンファイル」の更新を意味します。

コミット

  • コミットハッシュ: 384c5bed2d921027085cd1f2d4eff9a2652b6513
  • 作者: Rob Pike r@golang.org
  • 日付: Fri Jun 6 14:02:48 2008 -0700
  • コミットメッセージ:
    update golden.out for two versions of hello, world
    
    SVN=121479
    
  • 変更ファイル: test/golden.out
  • 変更概要: 1ファイル変更、2行追加

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

https://github.com/golang/go/commit/384c5bed2d921027085cd1f2d4eff9a2652b6513

元コミット内容

このコミットの目的は、test/golden.out ファイルを更新することです。コミットメッセージにある「two versions of hello, world」とは、おそらくGo言語で書かれた2つの異なる「hello, world」プログラム、または既存の「hello, world」プログラムの出力が変更された結果、その期待される出力が golden.out に追加されたことを示しています。SVN=121479 という記述は、このコミットがGoプロジェクトがGitに移行する前のSubversionリポジトリからのインポートであることを示唆しています。

変更の背景

Go言語は2007年末から2008年初頭にかけてGoogle社内で開発が始まりました。このコミットの日付(2008年6月6日)は、Go言語がまだ活発に開発され、その初期のテストインフラが構築されていた時期に当たります。

golden.out のようなファイルは、一般的に「ゴールデンファイルテスト」または「スナップショットテスト」と呼ばれるテスト手法で使用されます。この手法では、プログラムの出力(コンソール出力、生成されたファイルの内容など)を事前に「正しい」ものとしてファイルに保存しておき、テスト実行時に実際の出力とこのゴールデンファイルの内容を比較します。もし両者が一致しなければ、テストは失敗と判断されます。

このコミットで golden.out が更新された背景には、以下のいずれかの理由が考えられます。

  1. 新しいテストケースの追加: 新しい「hello, world」プログラムがGo言語のテストスイートに追加され、その正しい出力が golden.out に記録された。
  2. 既存のテストケースの出力変更: 既存の「hello, world」プログラムの動作が変更され、その結果として出力が変わったため、新しい正しい出力を golden.out に反映させた。
  3. テストインフラの調整: テスト環境や実行方法の変更により、既存の「hello, world」プログラムの出力形式がわずかに変更され、それに合わせてゴールデンファイルを更新する必要があった。

いずれにしても、このコミットはGo言語のテストの健全性を維持し、将来の変更が既存の動作を破壊しないことを保証するための重要なステップでした。

前提知識の解説

Go言語の初期開発

Go言語は、GoogleのRob Pike、Ken Thompson、Robert Griesemerによって設計されました。彼らは、当時のソフトウェア開発における課題(コンパイル時間の長さ、依存関係の管理の複雑さ、並行処理の難しさなど)を解決するために、新しいプログラミング言語の必要性を感じていました。Goは、シンプルさ、効率性、並行処理のサポートを重視して設計され、2009年11月にオープンソースとして公開されました。このコミットが行われた2008年6月は、GoがまだGoogle社内で開発されていた非常に初期の段階にあたります。

ゴールデンファイルテスト (Golden File Testing / Snapshot Testing)

ゴールデンファイルテストは、テスト対象のプログラムや関数の出力が、事前に定義された「正しい」出力(ゴールデンファイル)と一致するかどうかを検証するテスト手法です。

  • 仕組み:
    1. テスト対象を実行し、その出力を取得します。
    2. 取得した出力を、あらかじめ用意されたゴールデンファイルの内容と比較します。
    3. 両者が完全に一致すればテストは成功、そうでなければ失敗となります。
  • 利点:
    • 複雑な出力(例えば、長いテキスト、HTML、画像など)の検証が容易になります。
    • 出力のわずかな変更も検出できます。
    • テストコード自体が簡潔になる傾向があります。
  • 欠点:
    • ゴールデンファイルが古くなると、誤った出力を正しいと判断してしまう可能性があります(テストの陳腐化)。
    • ゴールデンファイルの更新が頻繁になると、管理が煩雑になります。
    • 意図的な変更とバグによる変更の区別がつきにくい場合があります。

このコミットでは、test/golden.out がGo言語のテストスイートにおけるゴールデンファイルとして機能していると考えられます。

Rob Pike

Rob Pikeは、Go言語の共同開発者の一人であり、Unixオペレーティングシステムの初期開発にも貢献した著名なコンピュータ科学者です。彼はベル研究所でPlan 9 from Bell LabsやInfernoオペレーティングシステムの開発にも携わりました。Go言語においては、その設計思想や哲学に大きな影響を与えています。彼のコミットは、Go言語の初期の基盤を築く上で非常に重要でした。

技術的詳細

このコミットは、test/golden.out という単一のファイルを変更しています。このファイルは、Go言語のテストフレームワークが特定のテストケースの出力を検証するために使用する参照ファイルです。

変更内容は、以下の2行の追加です。

  • hello, world
  • Hello World!

これらの行は、test/golden.out 内の既存のテスト出力のセクションに追加されています。ファイルの内容から推測すると、golden.out は複数のテストプログラムの出力をまとめて記録しているようです。各テストプログラムの出力は =========== [プログラム名] のような区切りで示されています。

このコミットでは、=========== helloworld.go のセクションに hello, world が追加され、=========== turing.go のセクションに Hello World! が追加されています。これは、helloworld.goturing.go という2つのGoプログラム(またはテストスクリプト)が、それぞれ新しい「hello, world」形式の出力を生成するようになったことを示唆しています。

  • helloworld.go は、おそらく標準的な「hello, world」プログラムのテストケースでしょう。
  • turing.go は、チューリングマシンに関連するテスト、あるいはより複雑なプログラムのテストの一部として「Hello World!」を出力するようになったのかもしれません。

この更新は、これらのプログラムの出力が変更されたか、または新しいテストケースが追加された結果として、その「正しい」出力をゴールデンファイルに記録する必要が生じたことを意味します。これにより、将来のコード変更がこれらのプログラムの出力に意図しない影響を与えないことを保証できます。

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

変更されたファイルは test/golden.out のみです。

--- a/test/golden.out
+++ b/test/golden.out
@@ -18,6 +18,7 @@ BUG: known to fail incorrectly
 hashmap.go:46: fatal error: optoas: no entry LSH-<uint32>UINT32
 BUG: known to fail incorrectly
 =========== helloworld.go
+hello, world
 =========== if.go
 =========== int_lit.go
 int_lit.go:5: syntax error
@@ -47,3 +48,4 @@ test0.go:54: illegal types for operand
 	(<Point2>{}) AS ({})\n BUG: known to fail incorrectly
 =========== turing.go
+Hello World!

コアとなるコードの解説

上記のdiffは、test/golden.out ファイルに2つの新しい行が追加されたことを示しています。

  1. +hello, world: この行は、=========== helloworld.go というセクションの下に追加されています。これは、helloworld.go という名前のテストプログラムまたはGoプログラムが実行された際に、その標準出力に hello, world という文字列が出力されることを期待していることを意味します。この出力が golden.out に記録されることで、今後のテスト実行時に helloworld.go の実際の出力がこの文字列と一致するかどうかが検証されます。

  2. +Hello World!: この行は、=========== turing.go というセクションの下に追加されています。同様に、turing.go という名前のテストプログラムまたはGoプログラムが実行された際に、その標準出力に Hello World! という文字列が出力されることを期待していることを意味します。helloworld.go の出力とは大文字・小文字の区別があるため、異なるプログラムまたは異なる出力形式を持つテストケースであることが示唆されます。

これらの変更は、Go言語のテストスイートが進化し、新しいテストケースが追加されたり、既存のテストケースの期待される出力が更新されたりする過程の一部です。これにより、Goコンパイラやランタイムの変更が、基本的なプログラムの出力に予期せぬ影響を与えないことが保証されます。

関連リンク

参考にした情報源リンク

  • Go言語の歴史に関する情報 (Go公式ブログなど)
  • ゴールデンファイルテストに関する一般的な情報 (ソフトウェアテストの文献やブログ記事)
  • Rob Pikeに関する情報 (Wikipediaなど)
  • GitHubのコミット履歴 (直接参照)

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

このコミットは、Go言語の初期開発段階におけるテスト関連の変更です。具体的には、test/golden.out というファイルが更新され、2つの異なる「hello, world」出力が追加されました。これは、Go言語のテストスイートにおいて、特定のプログラムの期待される出力を記録する「ゴールデンファイル」の更新を意味します。

コミット

  • コミットハッシュ: 384c5bed2d921027085cd1f2d4eff9a2652b6513
  • 作者: Rob Pike r@golang.org
  • 日付: Fri Jun 6 14:02:48 2008 -0700
  • コミットメッセージ:
    update golden.out for two versions of hello, world
    
    SVN=121479
    
  • 変更ファイル: test/golden.out
  • 変更概要: 1ファイル変更、2行追加

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

https://github.com/golang/go/commit/384c5bed2d921027085cd1f2d4eff9a2652b6513

元コミット内容

このコミットの目的は、test/golden.out ファイルを更新することです。コミットメッセージにある「two versions of hello, world」とは、おそらくGo言語で書かれた2つの異なる「hello, world」プログラム、または既存の「hello, world」プログラムの出力が変更された結果、その期待される出力が golden.out に追加されたことを示しています。SVN=121479 という記述は、このコミットがGoプロジェクトがGitに移行する前のSubversionリポジトリからのインポートであることを示唆しています。

変更の背景

Go言語は2007年末から2008年初頭にかけてGoogle社内で開発が始まりました。このコミットの日付(2008年6月6日)は、Go言語がまだ活発に開発され、その初期のテストインフラが構築されていた時期に当たります。

golden.out のようなファイルは、一般的に「ゴールデンファイルテスト」または「スナップショットテスト」と呼ばれるテスト手法で使用されます。この手法では、プログラムの出力(コンソール出力、生成されたファイルの内容など)を事前に「正しい」ものとしてファイルに保存しておき、テスト実行時に実際の出力とこのゴールデンファイルの内容を比較します。もし両者が一致しなければ、テストは失敗と判断されます。

このコミットで golden.out が更新された背景には、以下のいずれかの理由が考えられます。

  1. 新しいテストケースの追加: 新しい「hello, world」プログラムがGo言語のテストスイートに追加され、その正しい出力が golden.out に記録された。
  2. 既存のテストケースの出力変更: 既存の「hello, world」プログラムの動作が変更され、その結果として出力が変わったため、新しい正しい出力を golden.out に反映させた。
  3. テストインフラの調整: テスト環境や実行方法の変更により、既存の「hello, world」プログラムの出力形式がわずかに変更され、それに合わせてゴールデンファイルを更新する必要があった。

いずれにしても、このコミットはGo言語のテストの健全性を維持し、将来の変更が既存の動作を破壊しないことを保証するための重要なステップでした。

前提知識の解説

Go言語の初期開発

Go言語は、GoogleのRob Pike、Ken Thompson、Robert Griesemerによって設計されました。彼らは、当時のソフトウェア開発における課題(コンパイル時間の長さ、依存関係の管理の複雑さ、並行処理の難しさなど)を解決するために、新しいプログラミング言語の必要性を感じていました。Goは、シンプルさ、効率性、並行処理のサポートを重視して設計され、2009年11月にオープンソースとして公開されました。このコミットが行われた2008年6月は、GoがまだGoogle社内で開発されていた非常に初期の段階にあたります。

ゴールデンファイルテスト (Golden File Testing / Snapshot Testing)

ゴールデンファイルテストは、テスト対象のプログラムや関数の出力が、事前に定義された「正しい」出力(ゴールデンファイル)と一致するかどうかを検証するテスト手法です。

  • 仕組み:
    1. テスト対象を実行し、その出力を取得します。
    2. 取得した出力を、あらかじめ用意されたゴールデンファイルの内容と比較します。
    3. 両者が完全に一致すればテストは成功、そうでなければ失敗となります。
  • 利点:
    • 複雑な出力(例えば、長いテキスト、HTML、画像など)の検証が容易になります。
    • 出力のわずかな変更も検出できます。
    • テストコード自体が簡潔になる傾向があります。
  • 欠点:
    • ゴールデンファイルが古くなると、誤った出力を正しいと判断してしまう可能性があります(テストの陳腐化)。
    • ゴールデンファイルの更新が頻繁になると、管理が煩雑になります。
    • 意図的な変更とバグによる変更の区別がつきにくい場合があります。

このコミットでは、test/golden.out がGo言語のテストスイートにおけるゴールデンファイルとして機能していると考えられます。

Rob Pike

Rob Pikeは、Go言語の共同開発者の一人であり、Unixオペレーティングシステムの初期開発にも貢献した著名なコンピュータ科学者です。彼はベル研究所でPlan 9 from Bell LabsやInfernoオペレーティングシステムの開発にも携わりました。Go言語においては、その設計思想や哲学に大きな影響を与えています。彼のコミットは、Go言語の初期の基盤を築く上で非常に重要でした。

技術的詳細

このコミットは、test/golden.out という単一のファイルを変更しています。このファイルは、Go言語のテストフレームワークが特定のテストケースの出力を検証するために使用する参照ファイルです。

変更内容は、以下の2行の追加です。

  • hello, world
  • Hello World!

これらの行は、test/golden.out 内の既存のテスト出力のセクションに追加されています。ファイルの内容から推測すると、golden.out は複数のテストプログラムの出力をまとめて記録しているようです。各テストプログラムの出力は =========== [プログラム名] のような区切りで示されています。

このコミットでは、=========== helloworld.go のセクションに hello, world が追加され、=========== turing.go のセクションに Hello World! が追加されています。これは、helloworld.goturing.go という2つのGoプログラム(またはテストスクリプト)が、それぞれ新しい「hello, world」形式の出力を生成するようになったことを示唆しています。

  • helloworld.go は、おそらく標準的な「hello, world」プログラムのテストケースでしょう。
  • turing.go は、チューリングマシンに関連するテスト、あるいはより複雑なプログラムのテストの一部として「Hello World!」を出力するようになったのかもしれません。

この更新は、これらのプログラムの出力が変更されたか、または新しいテストケースが追加された結果として、その「正しい」出力をゴールデンファイルに記録する必要が生じたことを意味します。これにより、将来のコード変更がこれらのプログラムの出力に意図しない影響を与えないことを保証できます。

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

変更されたファイルは test/golden.out のみです。

--- a/test/golden.out
+++ b/test/golden.out
@@ -18,6 +18,7 @@ BUG: known to fail incorrectly
 hashmap.go:46: fatal error: optoas: no entry LSH-<uint32>UINT32
 BUG: known to fail incorrectly
 =========== helloworld.go
+hello, world
 =========== if.go
 =========== int_lit.go
 int_lit.go:5: syntax error
@@ -47,3 +48,4 @@ test0.go:54: illegal types for operand
 	(<Point2>{}) AS ({})\n BUG: known to fail incorrectly
 =========== turing.go
+Hello World!

コアとなるコードの解説

上記のdiffは、test/golden.out ファイルに2つの新しい行が追加されたことを示しています。

  1. +hello, world: この行は、=========== helloworld.go というセクションの下に追加されています。これは、helloworld.go という名前のテストプログラムまたはGoプログラムが実行された際に、その標準出力に hello, world という文字列が出力されることを期待していることを意味します。この出力が golden.out に記録されることで、今後のテスト実行時に helloworld.go の実際の出力がこの文字列と一致するかどうかが検証されます。

  2. +Hello World!: この行は、=========== turing.go というセクションの下に追加されています。同様に、turing.go という名前のテストプログラムまたはGoプログラムが実行された際に、その標準出力に Hello World! という文字列が出力されることを期待していることを意味します。helloworld.go の出力とは大文字・小文字の区別があるため、異なるプログラムまたは異なる出力形式を持つテストケースであることが示唆されます。

これらの変更は、Go言語のテストスイートが進化し、新しいテストケースが追加されたり、既存のテストケースの期待される出力が更新されたりする過程の一部です。これにより、Goコンパイラやランタイムの変更が、基本的なプログラムの出力に予期せぬ影響を与えないことが保証されます。

関連リンク

参考にした情報源リンク

  • Go言語の歴史に関する情報 (Go公式ブログなど)
  • ゴールデンファイルテストに関する一般的な情報 (ソフトウェアテストの文献やブログ記事)
  • Rob Pikeに関する情報 (Wikipediaなど)
  • GitHubのコミット履歴 (直接参照)
  • Web検索: "Go language early development history"