DUICUO

控えめで独学で学んだ達人は皆、オープンソース コミュニティを始めとして、インスピレーションを与えてくれる人物です。

オープンソースソフトウェアへの貢献方法がわからない?まずはバグ報告から始めましょう。もしかしたら報酬がもらえるかもしれません!Qian Hongさんの体験談をご覧ください。

今年のFreedom of Software Day(SFD)では、広州Linuxユーザーグループ主催のオフラインイベントで「オープンソースコミュニティの隠れた名人になる(パート1)」と題したプレゼンテーションを行いました。より多くの方々と共有できるよう、プレゼンテーションを再構成・拡張し、トランスクリプトを作成しました。

金庸の小説には、「掃き清僧」と呼ばれる伝説の人物が登場します。その経歴は謎に包まれており、武術の腕前は比類なきものです。小説の中の掃き清僧は、登場した瞬間から達人のように振る舞いますが、どのようにしてそのような境地に達したのかは誰にも分かりません。このような「掃き清僧」は、まさに到達不可能な存在です。しかし、誰もが真似て到達できる別のタイプの掃き清僧も存在します。それを「偽掃き清僧」と呼びましょう。

最近、ある実話が話題になっています。広東外語大学の寮長が、中山大学と広東外語大学の会計学講座を聴講し、公認会計士試験に合格した後、大手4会計事務所に転職したのです。さらに有名な例としては、今年のロンドンオリンピック閉会式のリオ大会で8分間のサンバダンスを披露したブラジル人清掃員が挙げられます。彼はまさに「隠れた名人」で、ブラジルのダンススクールで清掃員として働いていました。

どの山の要塞でも、掃討作戦を担当する僧侶はインスピレーションを与える人物です...

この記事は、オープンソースコミュニティにおいて、一見地味ながらも非常に優れたスキルを持つ人物の、試練と苦難を乗り越えてレベルアップしていく道のりを紹介しています。もちろん、このタイトルはクリックベイトのためのもので、本当のタイトルは次のとおりです。

=バグレポートからGoogle Summer of Codeへ= サブタイトルは: ==200のバグから5,000ドルへ== 端的に言えば、要点は: ===どうやってお金を騙し取るのか? ===

プレビュー:この記事はかなり長いです。読み切れない場合は、5000ドルくらいで購入を検討してくださいXD

バグ報告と詐欺行為に何の関係があるのでしょうか?これはすべてGoogle Summer of Codeから始まりました。

GSoCはGoogleがスポンサーとなっているサマーキャンププログラムで、学生はオープンソースプロジェクトでコードを書くことで報酬を得られます。プロジェクトが提供するマンツーマンのメンターシップも受けられます。GSoCプログラムは3ヶ月間続き、プログラムを修了し、評価テストに合格した学生全員に5,000ドルの賞金が授与されます。公式の説明はかなり長いので、もし迷ったら5,000ドルについて考えてみてください。http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs

GSoCは毎年、世界約200のオープンソースプロジェクト組織と連携し、年間4,000名以上の学生からの応募を受け付け、最終的に1,000名以上が合格しています。合格者の大多数は中間評価と期末評価に合格しています。幸運にも合格できた方は、常に誠実に、怠けずに、そして頻繁に指導を受ければ、評価に不合格になることを心配する必要はありません。GSoCの合格率は、翌年のオープンソースプロジェクト組織に割り当てられる学生数に影響を与える可能性があるため、メンターが困難を乗り越えるお手伝いをいたします。もちろん、別の視点から言えば、合格した暁には、この機会を大切にし、目標達成に向けて努力する責任も負うことになります。

申請、中間レビュー、最終レビューなど、オープンソースプロジェクトのメンターは各段階で最終決定権を持ちます。そのため、金銭を詐取しようとしているなら、オープンソースプロジェクトの開発者と事前に知り合うのが良いでしょう ;-)

2011年の初めから、私はWineプロジェクトに意図的にバグを報告し、床掃除をし、テストを行い、人々と知り合いになるよう努めました。2012年4月、WineプロジェクトのGSoC(Global System for Computing)に応募し、大した苦労もなく承認され、私の詐欺行為は成功しました[注1]。今年は10名以上の学生がWineプロジェクトのGSoCに応募しましたが、Wineプロジェクトには学生の枠が5名しかありませんでした。もし事前に計画を立てていなかったら、人を騙す機会は絶対に得られなかったでしょう。

一人で詐欺をするより、みんなで詐欺をする方がましです。私の金銭詐欺の経験を共有したいと思います。- 1年前から準備を始め、バグ報告やオープンソースプロジェクトへの参加を始めました。私は1年間で約200件のバグを報告しました。- バグ報告を通して、オープンソースプロジェクトのワークフローを理解し、開発者と知り合い、彼らの知識を「盗んで」オープンソースプロジェクトの開発を始めました。- バグ報告を通して、開発者との信頼関係を築き、GSoCへの参加を「詐欺」で獲得し、最終的に5,000ドルの賞金を騙し取りました。

簡単に言えば、お金をだまし取るコツは、バグを報告してオープンソース プロジェクトに参加し、課題を克服して常にレベルアップし、それによって自分のスキルを向上させ、GSoC アプリケーションの成功率を高めることです。

真面目な話、オープンソースプロジェクトに200件のバグを報告した人は、そのプロジェクトを心から大切に思い、オープンソースコミュニティにおける自分の評判を大切にしているはずです。貢献もせずにただ金銭を詐取するような人ではないはずです。GSoCの目的は、オープンソースプロジェクトへの新たな貢献者を育成し、サマーキャンプ終了後も学生が貢献し続けることを期待することです。200件のバグを報告すること自体が大きな貢献です。オープンソースプロジェクトの開発者の観点から言えば、1年間かけて200件のバグを報告し続ける学生は、報酬を受け取った後も貢献を続ける可能性が高いため、そのような学生に機会を与えるのは理にかなっています。したがって、信頼と機会は努力によって得られるものであり、いわゆる「詐欺」は単なる冗談であり、真剣に受け止めるべきではありません。

200 個のバグを報告するのは難しいように思えますが、200 個のバグを報告すると 5,000 ドル稼げると固く信じれば、突然簡単になります :D

バグはどのように報告すればいいのでしょうか?実は、成熟したオープンソースプロジェクトには必ず詳細なバグ報告ガイドラインがあります。そのドキュメントに従えば、バグの報告方法がわかるはずです。もしそのようなドキュメントを読んだことがない場合は、以下のキーワードの組み合わせでGoogle検索してみてください:XXX + QA / テスト / バグレポート。例えば、http://lmgtfy.com/?q=libreoffice+qa http://lmgtfy.com/?q=chromium+bug+report https://www.google.com/search?btnG=1&pws=0&q=ubuntu+testing など。

これらの文書は通常かなり長いので、読めなくなったら 5,000 ドルの値札を考えてみてください ;-)

ほとんどのドキュメントには多数の外部リンクが含まれており、可能な限りそれらを読むべきです。これらのリンクには、オープンソースプロジェクトのテストリリースサイクルの説明、専用のバグ報告およびデバッグツールの紹介、プロジェクト関連のメーリングリストに関する情報の提供、さらにはオープンソースプロジェクトのワークフローの説明などが含まれている場合があります。

ワークフローとは一体何でしょうか?例えば、病院に行くには、登録、診察、検査、料金の支払い、薬の受け取り、そして場合によっては賄賂の渡し合いなど、様々な手続きが必要です。学校に行くには、入学手続き、コースの選択、授業の欠席、課題の提出、試験の受験、そして場合によっては不合格になって再受験することなど、様々な手続きが必要です。GSoC(Global System for Computing and Research)に参加するには、プロジェクトやトピックの選択、人々との交流、応募、コードの作成、評価、そして最も重要な、金銭を詐取するといった手続きが必要です。つまり、ワークフローとは、一見面倒で退屈に見える一連の手続きであり、時にはそれらをこなさなければならないこともあるのです。

オープンソース プロジェクトのワークフローには、バグを報告する場所、バグのライフサイクルの仕組み、パッチを送信する場所、パッチが受け入れられない場合の対処法、オープンソース プロジェクトのバグ トラッカーへの管理アクセスを取得する方法、公式のコード送信権限を取得する方法などが含まれます。

新規参入者にとって、オープンソース プロジェクトに参加する際の最大のハードルは、技術的なスキルやプログラミング言語ではなく、ワークフローの理解不足である場合があります。問題をどこに報告すればよいのか、誰にパッチを送信すればよいのか、どこに助けを求めればよいのかなどがわかりません。営利企業の開発者も、この問題に遭遇することがあります。たとえば、仕事でオープンソース プロジェクトを使用し、いくつかのバグを修正しても、コミュニティにパッチを送信する方法がわからない場合や、パッチが一度も受け入れられなかったために改善を諦め、長期間ローカル ブランチを維持する場合があります。これにより、本来は双方にとってメリットのある状況が複雑になり、余分な負担が生じます。実際には、オープンソース プロジェクトのワークフローは大体似ています。1 つのプロジェクトで作業したことがあれば、ドキュメントを参照することで他のプロジェクトのワークフローを理解することは難しくありません。

バグ報告のワークフローを基本的に理解していれば、バグ報告はフォーラムへの投稿と非常に似ていることに気づくでしょう。ただし、投稿はバグトラッカー上で行われる点が異なります。この観点から見ると、バグ報告の技術的なハードルは非常に低くなっています。技術的な内容が不足しているからこそ、「床を掃く」ような作業と言えるのです。

バグ報告はフォーラムに投稿するのと同じくらい簡単ですが、質の高いバグレポートを書くには、やはり献身的な努力が必要です。バグ報告に関する一般的なチュートリアルはいくつかありますが、最も効果的なのは「バグを効果的に報告する方法」です。同様に役立つ記事として、「質問することの知恵」があります。これらの記事をよく読み、自分の実践を振り返ることで、質の高いバグレポートを作成できるようになります。どちらの記事もかなり長いので、行き詰まったら5000ドルのことを考えてみてください。すると、急に短く感じられるかもしれません。両方をよく読んでみると、質問することとバグを報告することには、基本的に同じ資質が求められることがわかります。「バグ報告の仕方がわかった」と自信がついたら、フォーラムに投稿されているほとんどの質問を見てみてください。多くの人が質問の仕方を知らないことに気づくかもしれません。もしかしたら、あなた自身も過去にそうだったかもしれません。200件のバグを報告してみてください! :P

質の高いバグ報告は開発者に歓迎されますが、質の低い報告は逆効果となり、時間を無駄にしてしまう可能性があります。「バグを効果的に報告する方法」や「質問術」をじっくり読むことに抵抗を感じる人も多いかもしれません(もしかしたら5000ドルのボーナスをもらえないかもしれません! :P)。誰かが一度に200件もの低品質なバグを報告してしまうのを防ぐために、注意点をお伝えしましょう。質の高いバグ報告者は、以下の点に注意する必要があります。- プロジェクトのバグ報告ガイドラインを読む!ガイドラインを読まずにバグを報告するのは無責任です。- バグごとに1つの問題だけを報告する。- 関連するプログラムのバージョン番号とオペレーティングシステムのバージョンを正確に指定する。- バグを再現するための正確な手順を時系列順に列挙する。- 開発者からの質問には必ず迅速に回答する!

もう1つ追加すべき点がありました。バグを報告する前に、Googleとプロジェクトのバグトラッカーの両方で重複した問題を検索してください。しかし、重複した問題の検索は、初心者、特に英語が苦手な人にとっては最も難しい部分です。

繰り返し発生するバグの検索と特定方法を知っていれば、もう初心者ではありません。バグの品質基準を上げることを検討してください。 - 一貫したスタイルを確立します。固定形式でバグレポートを作成するようにします。これにより、習慣が身につき、厳密に考えることが促進され、重要な情報を見逃すことがなくなります。多くのバグ追跡システムでは、バグレポートのテンプレートが用意されています。この習慣を身に付けるには、これらを参照してください。 - 50 件のバグを報告したと想像してください。6 か月後に 1 つのバグをランダムに選択してレビューするとしたら、一度読んだだけで再現できると保証できますか。この考え方でバグを報告し、多くのバグを報告したら、レポートをレビューします。一度読んだだけで再現できない場合、他の人はどうやって再現できるでしょうか。 - オープンソース プロジェクトのバグ追跡システムを購読/フォローします。他の人がどのようにバグを報告しているかを観察し、経験豊富な開発者から学び、初心者を積極的に支援します。他の人を助けることは、自分自身を向上させる方法でもあります。バグ報告に関する重要なドキュメントを読んで要点を把握すると、次のことがわかるかもしれません。バグを報告することが問題なのではありません。問題はバグがあることではありません!

確かに、バグを報告するのは難しくありませんが、見つけるのは簡単です。日常的な使用状況でバグを発見できるかどうかは、運次第です。そうでなければ、誰もそのソフトウェアを使いたくなくなるでしょう ;-) しかし、本当にバグを報告したいのであれば、バッチバグ検出の方法を学ぶ必要があります。たとえそのような方法がなくても、自分で作るべきです!

えっ?大量のバグを見つけるって?実は、大量のバグを見つけるのは珍しいことではありません。大量のバグを見つける仕事があり、そのような職種はテスター、QA(品質保証)、QE(品質エンジニアリング)と呼ばれています。

大量のバグを見つけるには、まず「早期」に行う必要があります。

多くのオープンソースプロジェクトには、開発版、アルファ版、ベータ版といった様々な開発・テスト版に加え、いわゆる最終版や安定版があります。オープンソースソフトウェアの「安定版」に不安定さを感じても、心配する必要はありません。多くのオープンソースプロジェクトには徹底的なテストを行うための人員が不足していますが、商用ソフトウェアには通常、専任のQAチームが多数存在します。逆に、深刻なバグに遭遇していないのであれば、オープンソースプロジェクトに静かに貢献しているQAチームに感謝すべきです。「一括バグ報告」の機会を逃さないためにも、ソフトウェアの新バージョンがリリースされたら、できるだけ早くテストを行うべきです。最初のバージョンはアルファ版、2番目はデイリービルド版、3番目はGitリポジトリからダウンロードしてコンパイルするリアルタイム版です。

早起きは三文の徳ですが、大量のバグを見つけるには通常、経験豊富なプログラマーが必要です。そのため、2つ目のポイントは、彼らから学ぶことです。オープンソースプロジェクトのバグリストを購読し、他者が報告したバグを観察し、経験豊富なプログラマーを見つけ、彼らがどのようにバグを発見し報告しているかを観察しましょう。QAドキュメントをよく読んでください。大量のバグを見つけるための方法やツールが、そこに記載されている場合があります。

バグをまとめて見つけるのは、時にとても簡単です。例えば、Wineで200個のバグを報告するにはどうすればいいでしょうか?私が使った最も簡単な方法は次のとおりです。- ソフトウェアダウンロードサイトにアクセスし、上位100個のアプリを見つけます。時間があるときにWineでテストします。時間があれば、必要な数のバグを見つけることができます。- 様々なオンラインバンキングシステムのコントロールをターゲットにダウンロードしてインストールするテストです。これにより、無意識のうちに多くのバグが報告され、ICBCやCMBのオンラインバンキングシステムの多くの問題が改善されました。- メーリングリストやフォーラムで他のユーザーが報告したWineの問題にも注目してください。関連がありそうな投稿を見つけたら、テストに協力してバグをいくつか報告してください。 ;-)#p#

これらの面倒な方法が気に入らない場合は、より技術的に洗練されたバッチ処理方法を検討してください: http://wiki.winehq.org/UnitTestSuites

多くのプロジェクトには独自のユニットテストがあります。これらのユニットテストをWineで実行すると、貴重なWineテストケースセットが作成されます。(Windowsソフトウェアの作者で、Wineを使ってLinux/Macに移植したい場合、Wineでユニットテストを実行するだけで、ほとんどの問題を発見して解決できます。)

上記の例は珍しいものではなく、実際、多くのプロジェクトでは、先行者によってまとめられ開発されたバッチバグレポートの方法やツールが存在します。

  • Chromium/Firefoxブラウザのバグを一括で見つけるにはどうすればいいでしょうか?Seleniumというオープンソースプロジェクトがあります。これは、IE、Firefox、Chromium、そして一部のモバイルブラウザに対応したブラウザ自動テストツールです。http://seleniumhq.org/

  • Linuxデスクトップ環境のバグを一括で見つけるにはどうすればいいでしょうか?Linux Desktop Testing Projectというオープンソースプロジェクトがあります。これは、デスクトップ環境やグラフィカルユーザーインターフェースソフトウェアの自動テストツールを作成するために利用されています。Linux、Windows、Macをサポートしています。http://ldtp.freedesktop.org/wiki

  • LibreOffice/OpenOfficeのバグを一括で見つけるにはどうすればいいでしょうか? 賢い方法は思いつきませんが、シンプルですが少し不器用なアプローチがあります。LibreOffice/OpenOfficeがMS Office形式と互換性がないケースはすべてバグです。形式の互換性の問題に直面しても、文句を言う人もいれば、5000ドルを静かに懐に入れる人もいます… LibreOfficeのWikiを見るとわかるように、GSoCの学生数名が既に形式の互換性の改善に取り組んでいます。

実際、互換性に関わるプロジェクトはどれも、簡単に大量の非互換性バグを「生み出し」てしまいます :P Mono、Wine、ReactOS、Haiku OS、LibreOffice/OpenOffice、mingw/mxe、gnash/lightspark など、これらはすべて互換性関連のプロジェクトです。Google で「XXX オープンソース 代替」と検索するだけで、互換性関連のオープンソースプロジェクトが数多く見つかります。これらのプロジェクトは、バグを発見して報告してくれるボランティアを切実に必要としています。互換性の問題はしばしば難しい技術的問題であり、開発とデバッグは困難で、リバースエンジニアリングが頻繁に必要になります。残念ながら、これらのプロジェクトは最も多くの批判を受けており、これは本当に報われない仕事です。もし私たち全員がもっと多くのバグを報告し、不満を少なくすることができれば、世界はもっと良い場所になるでしょう。

バグを一括報告する方法は、通常、自動テスト/ユニットテストツールに関連しています。オープンソーステストプロジェクトでは、多数の自動テスト/ユニットテストツールをまとめています: http://www.opensourcetesting.org/functional.php

通常のプロジェクトでバグを報告するのが難しすぎると感じたら、どうすればいいでしょうか?ご心配なく。克服すべき難しい課題は常に存在します。

  • GCCのバグを一括で見つけるにはどうすればいいのでしょうか?正直なところ、全く分かりませんでしたが、この質問の答えを探していたところ、Deltaツールが非常に便利だとわかりました。http://gcc.gnu.org/wiki/Aguidetotestcasereduction です。Deltaはバイナリサーチの原理を使ってコードをトリミングするツールで、コンパイラのバグ診断に非常に役立ちます。バグ報告で収入を得られるなら、まずDeltaを学び、次にGCCのBugzillaを使って過去に報告された有効なバグを検索し、何十個ものバグを自分で再現します。バグを再現することは、実際にはバグを報告することに似ています。一種の「クリーンアップ」であり、そこから多くのことを学ぶことができます。「唐詩三百首を暗記すれば、詩は作れなくても朗誦できる」ということわざがあります。十分な数のバグレポートを読み、十分な数のバグを再現すれば、必ずバグを見つけて報告できるようになります。 GCCのような基礎的かつ重要なプロジェクトでは、初心者がバグを見つけるのは確かに容易ではありませんが、不可能ではありません。GCCはx86プラットフォームでは非常に堅牢ですが、あまり一般的ではないプラットフォームではそれほど堅牢ではない可能性があります。これもバグを見つけるための一つのアプローチです。

  • カーネルのバグをまとめて見つけるにはどうすればいいでしょうか? Linux Testing Projectというオープンソースプロジェクトがあります。これはLinuxカーネル専用のテストスイートです。http://ltp.sourceforge.net/ 同様に、カーネルのバグ報告が難しすぎる場合は、他の人のバグレポートを再現することから始めるのも良いでしょう。それでも多くのことを学ぶことができます。カーネルのバグを見つけるのは簡単ではありませんが、不可能ではありません。OpenRISCのように人手が限られている人気のないプラットフォームでは、間違いなく多くのバグが見つかるのを待っています ;-)

Linuxカーネルは安定していると言う人は多いですが、Linuxカーネルの真の安定はどこにあるのでしょうか?カーネルテストチームが最も脆弱で、新しくリリースされたカーネルはパニックを起こしやすいのです。安定したカーネルは複数回のテストを経ています。実際、十分な産業グレードのテストを実施すれば、Linuxデスクトップはカーネルと同じくらい安定することもあります。オープンソースコミュニティには、ボランティアのQA担当者が著しく不足しています。バグを見つける意欲があれば、どこでも歓迎されますし、彼らは喜んで手順を一つ一つ教えてくれるでしょう(ただ、教える人材が足りないのではないかと心配しているだけです…)。200件ものバグを報告すれば、オープンソースプロジェクトにどれほど多くのバグがあり、どれほど人材が不足しているかを実感するでしょう…

大量のバグを見つけるには、ある程度の創造性と想像力が必要です。例えば、Seleniumは元々ブラウザのテスト用に設計されており、多数のブラウザテストケースが組み込まれています。ReactOSはオープンソースのWindowsライクなオペレーティングシステムです。この2つを組み合わせると、Windows版のSeleniumとReactOS上のFirefox/Chromeを実行することで、ReactOSのテストケースがすぐに作成されます。その時点でも、ReactOSのバグを見つけるのは困難でしょうか?

少し考えれば、誰も思いつかなかったようなバッチバグ検出方法をきっと発明できるはずです。さっきも言ったように、5000ドルあれば、必ず方法はありますよ :P ここまで読んでいただければ、バグ報告自体が問題なのではなく、バグ発見自体が問題なのではなく、プロジェクト自体がないことが問題なのだとお気づきになるかもしれません!

オープンソースプロジェクトに参加したいと思っていても、どれを選べばいいのかわからないという人は少なくありません。実際的な答えは至ってシンプルです。GSoCバグレポート報酬の5,000ドルを目指しているなら、過去5年間にGoogleと共同研究を行ったプロジェクトをGSoCウェブサイト(http://code.google.com/intl/zh-CN/soc/)で確認してみてください。このウェブサイトを見れば、来年共同研究の可能性が高いプロジェクトが推測でき、そこから興味のあるプロジェクトを見つけることができます。オープンソースプロジェクトについてあまり詳しくない場合は、1~2週間かけて幅広く見て回り、その中からいくつかを選んで深く研究してみてください。

あまり実利的ではない答えですが、興味のあるプロジェクトなら何でも構いません。もし何もわからない場合は、例えばohloh.netを閲覧して、アクティブな貢献者によるランキング上位1000件を見てみてください(https://www.ohloh.net/p?page=100&sort=active_committers)。興味のあるプロジェクトが見つかったら、ohloh.netで関連プロジェクトを検索してみましょう。偶然にも、興味深いプロジェクトがいくつも見つかるかもしれません。候補となるプロジェクトが複数あり、集中的に調査するために1つを選びたい場合は、ohloh.netでプロジェクトの統計情報を確認できます。例えば、-最近のコードコミット数 -先月の新規貢献者数 -高いKudoランクを持つ開発者の数などです。

頻繁に新しいコードが提出されるオープンソースプロジェクトは、アクティブであると見なされます。アクティブなプロジェクトに参加するということは、やるべき仕事があるということであり、バグを報告すれば、それらのバグが修正されることを意味します。頻繁に新しい貢献者を惹きつけるプロジェクトは魅力的であり、新規参入者にとって比較的参入障壁が低いとみなされます。多くの高位のKudo開発者がいるプロジェクトは、多くの専門家から学ぶことができることを意味します。

GSoCにこれまで参加したことのないプロジェクトを見つけたら、開発者に来年GoogleにGSoCパートナープロジェクトとして応募するよう勧めましょう。もちろん、応募が必ずしも成功するとは限りません。Googleと協業できるプロジェクトは毎年約200件にとどまるからです。さらに、Googleは毎年、翌年もGSoCが継続される保証はないと明言しています。誰かを騙そうとしているのであれば、早めに行動を起こすのが賢明です。

多くのことは言うほど簡単ではありませんが、バグ報告も例外ではありません。たとえバグを一括報告するためのプロジェクトと方法を見つけたとしても、200件ものバグを継続的に報告するのは容易ではありません。

バグを継続的に報告するモチベーションをどうやって見つければいいのでしょうか? 実はそれほど難しいことではありません。

バグを報告し修正することで得られる達成感は、人々に挑戦を続けるモチベーションを与えます。問題は、すべてのバグが時間内に修正できるわけではないということです。多くの初心者はよく「バグ修正にはどれくらい時間がかかりますか?」と尋ねます。この質問に、ネット上で広まっているジョークが完璧に答えています。

===
>> マスター、コードを書く上で最も重要なことは何ですか?
落ち着いてください。
>> マスター、プログラムをデバッグするときに最も重要なことは何ですか?
運。
===

このジョークは定番です。バグ修正には様々な要因が絡み合っています。1日で修正できるバグもあれば、長年放置され、何年も解決されていないバグもあります。バグ修正にどれくらいの時間がかかるのかは答えようがありませんが、言い換えれば希望が生まれます。報告された100個のバグのうち、1年後に修正されるものはいくつあるでしょうか?私の大まかな計算では、Wineプロジェクトに100個のバグを報告した場合、1年後には約50個が修正されます。つまり、「バグの半減期」はおよそ1年です。他のオープンソースプロジェクトでは、開発が活発に行われている限り、「バグの半減期」はそれほど長くないはずです。したがって、バグ報告のモチベーションを維持する方法の一つは、より多くのバグを報告することです。そうすれば、必然的にいくつかのバグが先に修正され、その成果が前進し続けるモチベーションとなるでしょう。

#p#

実は、モチベーションを維持する2つ目の方法は、「もっとバグを報告する」ことです。十分な数のバグを報告すれば、たとえしばらくオフラインになっていても、受信トレイにはバグ関連のメールが山積みになり、対応を待っていることに気づくでしょう。これは、開発者が新しいパッチをリリースしてテストに協力を求めている、あるいは関連するバグのステータスが変更されて再テストが必要になったなど、様々な理由が考えられます。まさにここでバグ報告者が重要な役割を担うのです。返信を怠ると、開発者の作業が滞ってしまう可能性があります。このことを認識することで、コミュニティにおける自分の存在価値を倍増させることができるでしょう。

もしモチベーションを維持する3つ目の方法がやはりバグ報告だと言ったら、読者の皆さんにボロボロに叩きのめされるでしょう :) 実は、私にとってモチベーションを維持する一番の方法は、オープンソースプロジェクトの他の貢献者と友達になることです。国際的なオープンソースプロジェクトに参加すれば、世界中の友人と出会うことができます。訪れる機会がない場所もあるかもしれませんが、そこでは、今まで会ったことのない人が同じオープンソースプロジェクトに貢献しているのを見つけることができるでしょう。これは素晴らしいことではないでしょうか?外国人から助けてもらったら、その人の名前を覚えておきましょう。外国人の名前は覚えにくいものですが。励ましを受けたら、他の人を励ますことも忘れないでください。ベテランも初心者も、励ましは必要です。世界中のオープンソース貢献者と友達になれば、オープンソースの楽しさがさらに増すでしょう。そうなれば、バグ報告を止めるものは何もありません。

バグを報告すると決めたなら、床を掃除しながら学ぶ機会を無駄にしないでください。それが「掃除坊主」(舞台裏で精力的に働く伝説の人物)の真髄です。オープンソースコミュニティでは「盗む」必要はありませんが、他の人が見落としている点を観察し、他の人が学んでいない点を学ぶために「注意を払う」ことは必要です。いわゆる「盗んで学ぶ」とは、実際には観察と学習に細心の注意を払うことです。少しの努力で、200件のバグを報告することで多くのことを学ぶことができます。

  • 開発者からバグの詳細やログを繰り返し求められれば、トラブルシューティングの方法やアプローチを学習して蓄積することができます。
  • 開発者が重複するバグをクローズする場合は、特に英語が苦手な初心者は、検索方法の学習と検索キーワードの蓄積に注意を払う必要があります。
  • バグが開発者によってアップストリーム バグであると診断された場合は、アップストリーム プロジェクトについて学ぶ機会を得ることもできます。
  • 大規模なプロジェクトでは、すべてのコードを読むのはほぼ不可能です。バグを報告するプロセスは、コードの特定の部分を理解し、徐々に開発を開始するのに役立ちます。
  • 開発者がバグの修正プログラムをリリースした場合は、無関係なコードを一時的に無視しながら、修正プログラムに関連するコードを読んで学習し、その目的を理解することができます。
  • 十分な数のバグを報告すれば、そのバグに関連するコードの一部に見覚えがあることに気づくかもしれません。この時点で、自分でコードを修正してみるのも良いでしょう。最初は診断を手伝うことから始めてもいいですし、ちょっとしたハックから始めてもいいでしょう。徐々に、バグの報告からバグの修正へと進んでいくでしょう。

バグ報告から本格的な開発へと進むことが目標であれば、最初からオープンソースプロジェクトのパッチリストと開発リストを購読することが重要であることを強調しておきます。最初は理解できなくても心配しないでください。継続的に参加することで、量的な変化が質的な飛躍につながる可能性があります。これもまた「床掃除」の一種です。

私のように開発スキルに自信がないなら、この一見回りくどい道のりは開発への参入障壁を格段に下げ、無意識のうちに自信を高めるきっかけになるかもしれません。それでも自信が持てないなら、5,000ドルくらいで考えてみてはいかがでしょうか XD

直接的に学べること以外にも、バグを報告すると間接的に多くのメリットが得られます。

  • バグを報告することで、開発者と知り合い、友人になることさえできます。彼らは将来的に大きな助けとなるだけでなく、開発に関する問題についてアドバイスを求めることもできます。
  • バグ報告は英語力向上の素晴らしい方法です!もし私のように大学の英語プレースメントテストで最下位クラスに入ってしまったなら、今すぐバグ報告を始めましょう。200件ものバグを報告できれば、コンピュータサイエンスの英語はきっと問題ではなくなるでしょう。私がオープンソースプロジェクトのバグ報告を英語で始めた頃は、単語がほとんど分からず、バグレポートを書く際に常に調べ物をし、一つ一つのバグレポートにかなりの時間がかかりました。また、間違った表現をしてしまうのではないかと不安で、とても緊張していました。今では英語はそれほど上手ではありませんが、少なくとも収入は得られています=)。オープンソースプロジェクトに長く関わっていれば、外国人の友達を作るのは簡単です。そうすれば、英語で困った時に助けを求めることができます…(英語で助けを求める、笑)

  • バグを報告するプロセスは、徐々にあなたの考え方を変えていきます。10個のバグを報告するのと200個のバグを報告するのとでは、異なる学習体験と異なる考え方が生まれます。前者はユーザーの視点から考えることを必要とし、後者はオープンソースプロジェクトチームの視点から考えることを強いるでしょう。例えば:

  • バグが修正される確率を高めるにはどうすればよいでしょうか?
  • 開発者と私たち自身の時間を節約するにはどうすればよいでしょうか?
  • このプロジェクトのどの部分が最も改善が必要ですか?
  • 新しいユーザーがバグを報告する際のハードルを下げるにはどうすればよいでしょうか?
  • これらの質問について考え始める頃には、あなたはすでにプロジェクトチームに徐々に溶け込んでいるでしょう。溶け込んでいくと、私のように、常に何人かの人に助けを求めている自分に気づくかもしれません…そこでこの記事を書きました =)。

报bug能学到很多东西, 可惜很多东西记录不下来, 记下来的也可能会失真. 这也正常, 如果读一读别人的分享就能学到这些东西, 那又何必亲力亲为去扫地? 如果真的报了200个bug, 一定会充分掌握扫地僧骗钱大法, 申请GSoC成功的概率一定会很大. GSoC的学生需要在申请时说明自己想要为项目做什么贡献, 尽管GSoC的合作项目会提供一些可选的任务, 但更鼓励学生提出自己的idea. 如果你对项目很了解, 就容易提出自己的idea, 不会跟其他学生撞车. 如果你对项目很了解, 就会对不同任务的难度心里有数, 申请成功后也容易实现目标. 其实大多数被拒绝的学生, 不是idea太难不现实, 就是idea太容易骗钱意图太明显. 骗钱可以, 但不要太明显;-)

其实, <<做一名开源社区的扫地僧(上)>>, 到这里就可以结束了. 也许有人会困惑, 这才刚讲完扫地, 还没开始讲骗钱, 怎么就结束了? 有这样的困惑, 正是纸上谈兵的后果. 如果真的按照扫地僧打怪升级的道路去做, 会发现对自己帮助***的人, 其实是开源项目中的前辈, 而这篇文章***的作用无非是引诱多几个人去尝试, 真正的价值不大, 属于读过就可以忘掉的类型.

开源项目的前辈, 有的就是GSoC的潜在导师. 骗钱事宜, 都是导师说了算, 所以最重要的还是赶紧找个项目去跟潜在的导师混熟;-)

正经地说, 这篇文章希望探讨的问题不仅仅是骗钱, 而是这么一个老大难的问题: 应届毕业生找工作难! 没有工作经验, 所以找不到工作; 找不到工作, 所以没有工作经验.

其实对于未来码农来说, 解决这个问题的办法很简单, 只要愿意在开源项目中找一份扫地的活干, 花个大半年的时间报一两百个bug, 就能积累一定的经验, 这个时候去找测试岗位的实习[广告1], 肯定很受欢迎, 而有了开源项目经历和靠谱的实习, 肯定不怕找不到工作. 在开源项目中扫地扫久了, 还能逐渐进阶入门开发, 如果成功参加过GSoC, 就更不愁找不到工作了.

当然, 参与开源项目实践, 也不能包治百病. 比如, 参与开源项目不能代替学习计算机基础和算法基础, 不能代替阅读好书. 不过, 多实践对于明白需要学什么会很有帮助, 实践遇到瓶颈的时候也会更容易发现自己读书不够. 再比如, 参与开源项目也不能代替企业的实习经历, 实际上两者都能学到很多东西, 但两者互不可替代. 不过, 如果有开源项目的实践经历, 对于寻找更好的实习机会肯定大有帮助.

希望这篇文章对在读本科新生或者研究生新生有帮助, 尤其是对开源感兴趣却不知如何入手的同学, 或者对开发感兴趣却经验不足的同学. 开发能力很强的同学请不要被这篇文章误导, 你应该向 google-opensource.blogspot.com 中记录的优秀案例看齐, 争取成为下一个优秀案例, 扫地的路径不一定适合你, 我这种骗钱的技俩也不应该是你追求的层次;-)

GSoC每年报名申请的时间是4月份, 现在开始扫地距离GSoC2013还有半年的时间, 其实很充裕. 对于接近毕业面临就业压力的学生, 现在开始扫地合不合适我就不知道了:P

我有一个小小的愿望, 希望以后国内的大学生争先恐后给开源项目报bug, 通过报bug入门参与开源项目, 紧接着成功申请GSoC, 并且在骗完钱之后仍然继续给开源项目做贡献;-) 希望将来本科生参与开源项目就像现在的本科生参加数学建模竞赛, ACM竞赛, XXX软件开发比赛一样多. 想一想哪个比赛有5000美金, 就知道谁吸引力大了XD

我还有一个大一点的愿望, 希望将来我们可以在国内举办比GSoC更大规模的夏令营, 鼓励和支持更多的学生为开源项目做贡献. 每年1000多名参加GSoC的学生中, 印度学生和美国学生是最多的, 都有200人上下, 而中国学生只有50人左右. 如果有更多中国学生愿意走"扫地僧路线", 我相信人数翻一翻两翻完全不是问题. 但是如果大家真的争先恐后都去申请GSoC了, 肯定也没办法全部申请成功, 毕竟机会有限. 我希望我们能够举办一个"本土化类GSoC", 提供更多的机会, 当然这需要钱. 其实现在很多学校都喜欢举办ACM/数模等的院赛和校内赛, 是否以后也可以多举办一些院级或校级的"报bug扫地夏令营"呢?

有人会问, 如果扫地捉bug的人多了, 僧多bug少怎么办? 我只能说, 我非常期待没bug可报的那一天;-) 其实很多开源项目每年"制造"的bug远不只200个, 比如Wine项目, 从2011年到2012年就增长了3500个bug. 粗略估计, 凡是ohloh.net上活跃贡献人数排名前1000的项目, 每年都能制造成百上千个bug:https://www.ohloh.net/p?page=100&sort=active_committers 如果你不信, 你给我钱我找给你看XD 活跃的开源项目其实是一直在发展中的, 简直可以说是批量生bug, 所以bug是永远捉不完的...

从捉bug入门进阶开发, 不是新鲜事, 我只是跟随前人的脚步走, 应该感谢扫地的前人. 刘未鹏写过一篇文章, 叫做<<怎样花两年时间面试一个人>>, 我的扫地僧计划有很大程度上受到了这篇文章的启发, 所以我还应该谢谢刘未鹏^_^ <<做一名开源社区的扫地僧>>, 其实就是从学生的角度出发, 对<<怎样花两年时间面试一个人>> 的理论进行实践. 有(上)自然有(下), <<扫地僧(下)>>也大致预谋好了, 但现在仍不能剧透, 否则一旦失败就变成搞笑剧了冏其实, 最***的结果是, 这篇文章的学生读者, 将来写出成百上千各种版本的<<扫地僧(下)>>.

虽然文章的标题叫做扫地僧, 可是文章的内容其实是"山寨扫地僧", 为了呼应金庸原著中的绝世扫地僧, 在结尾向大家介绍Wine社区的扫地高僧Anastasius Focht, 十一年来他分析了成百上千个bug, 他的bug report就是Wine的调试教材...http://goo.gl/TxIvZ

***, 感谢我的GSoC导师Aric Stewart, 在Wine的开发中给我很多帮助. Aric Stewart是日本人, 我们都希望中日和平友好. 我相信开源不分种族性别信仰和国界. 感谢Dan Kegal, Bruno Jesus, Austin English, André Hentschel 等帮助和鼓励过我的开发者, 尽管他们看不懂中文:-\ 感谢Google Open Source Team, 8年来为培养开源社区新人做了很多贡献, 特别要感谢Carol Smith, GSoC的成功举办离不开她.

亲爱的读者, 如果你读到这里才想起自己已经不是学生, 猛然意识到GSoC骗钱已经与你无关, 那我只能说非常抱歉, 骗你读了这么久... 如果你想报复社会, 就转载这篇文章吧...

小调查: CrossOver (Wine的商业版) 将专门为中文用户提供中文技术支持以及特别优惠. 如果你有时间, 请花3分钟做一份关于Wine / CrossOver 的调查, 一共只有6个问题, 非常感谢!http://goo.gl/aEfE4

Qian Hong fracting AT gmail DOT com 2012-10-12

[注1] 要了解技术性的内容, 可以看一下我的"分享Wine调试经验" 系列, 比如:https://groups.google.com/forum/?fromgroups=#!topic/gzlug/dGet0BGOikQ [广告1] 代Kexin姐发个广告: 红帽北京长期招内核测试实习生, 欢迎在校学生投简历, google一下就可以找到相关信息. 如果感兴趣但担心自己达不到要求, 我建议从扫地开始;-) 如果扫地扫够了准备出山, 也可以发信问我要Kexin的联系方式.

全文转载自邮件列表