3月21日、プロ棋士と将棋ソフトによる5対5の団体戦「将棋電王戦FINAL」の第2局・永瀬拓矢六段対Seleneの対局が行われ、Seleneがプログラム上の問題で「角成らず」を認識できず反則負けになるという異例の結末を迎えました。(ねとらぼ、より。)
Seleneと言うのは将棋ソフト(=プログラム)ですね。
プログラマーはプログラムコードで考えうる(起こり得る)全てのケースをテストするのが一般的です。しかし、それは「プログラム」。前段の仕様設計で漏れていればそのまま漏れるのです。
ゲームなどは、こういう予想外の事態が多いので「テスター」と言う一般の人を雇って発売前に色々と遊んでもらいます。初めて触るゲームなので、十人十色の操作法があって不具合を見つけると言うものです。
最近では、ベータテスター募集と言って、発売前のゲームを一般の人に遊んでもらい不具合を調べる傾向にあります。(こういうのを、皮肉って「無料デバッガー」と呼んだりします。)
こういうテストの事を「モンキーテスト」と言います。
設計者が設計しても一般ユーザがどういう使い方をするかは予測がつかないので、実際に仕様を知らない人にテストしてもらうと言うものです。
将棋の世界では、「相手の陣地に行けば駒は成る」事が出来ます。成るのが一般的ですが、成らない事も自由です。設計者は「まさか成らない訳がないだろう。」と思ってしまったんですね。
僕は将棋には詳しくないのですが、詰め将棋などでは「成らず」と言うのも戦法らしいです。
世の中には「まさか、こういう事をするとは!」と言う事が一杯あります。
そんな、世の中だから、色んな事が起こるのですね。
僕はシステムエンジニアでプログラムを設計する時には色々なケースを想定して設計しますが、今回の件を知って、もう一度、しっかり考えて設計しようと思った次第です。