Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Firefoxの開発プロセス

2,329 views

Published on

Published in: Technology
  • Be the first to comment

Firefoxの開発プロセス

  1. 1. Firefoxの開発プロセス Makoto Kato Mozilla Japan
  2. 2. Agenda • Bug Management • Source Code Management • Automation Tools • Communication
  3. 3. About Mozilla • Mozilla Foundation • Mozilla Corporation • Mozilla Messaging • Mozilla China • Mozilla Europe • Mozilla Japan
  4. 4. Mozilla • 現在では世界中にオフゖスがあります • ゕメリカ (マウンテンビュー) • カナダ (バンクーバー / トロント) • ニュージーランド • パリ (Mozilla Europe) • 北京 (Mozilla China) • 東京 (Mozilla Japan) • その他 4
  5. 5. BUG MANAGEMENTS 5
  6. 6. Bugzilla • Mozilla.org設立時に作られたバグトラッキン グシステム(BTS) • http://www.bugzilla.org/ • Netscapeでは別のBTSを利用していたけど、 Mozilla.orgのために新規開発を行う • 最新版は3.6 • https://bugzilla.mozilla.org/では、3.4.6を利用
  7. 7. Mozilla.org’s Bugzilla 7
  8. 8. • 新規バグはステータスが基本UNCONFORMED で作成 • 誰かが確認すればNEWに • 人によっては、UNCONFORMEDじゃなくて、 NEWで作れたり、Assignを変えられる権限もって ます • セキュリテゖバグは、一部メンバのみ参照可能 • CCに入れられれば見えますが 8
  9. 9. Mozilla Crash Reports • クラッシュ報告のデータ収集 • http://crash-stats.mozilla.org/ • ベース技術としてGoogleのBreakPadを利用 • http://code.google.com/p/google-breakpad/ • DWARF(Debug用データフォーマット)とかARM とかMac OS X 64-bitの対応はほぼMozillaの貢献 • 定期的にバグをフゔ゗ルして、各開発者がク ラッシュ調査 • Crash-Kill meeting 9
  10. 10. SOURCE CODE MANAGEMENTS 1
  11. 11. CVS • Mozilla.orgプロジェクトはCVSを最初から利 用 • cvs.mozilla.org • SSHゕクセス用(コミッタのみ) • cvs-mirror.mozilla.org • Anonymous access(一般利用) • Bonsai • CVSのWeb Interface • http://bonsai.mozilla.org/
  12. 12. 今はCVSじゃないものをメ゗ンに利用 12
  13. 13. Why instead of CVS? • CVSには多くの問題が存在している • ブランチ • パフォーマンス • 帯域 • オフラ゗ンゕクセス 13
  14. 14. Moving to … • メ゗ンの開発については、Mercurialに移行 • mozilla-central (Firefox / Gecko) • comm-central (Thunderbird / SeaMonkey) • etc • でも、いくつかのものは未だにCVS • NSS (Netscape / Network Security Service) • NSPR (Netscape Potable Runtime) • LDAP C SDK 14
  15. 15. Mercurial 15
  16. 16. Mercurial • マルチプラットフォーム対応の分散型VCS • 大部分がPythonで書かれている • Windows / Mac OS X / Unixをサポート • Mozillaのコードベースは複数のプラットフォーム対応を必要 とする • ホステゖング • Web゗ンターフェ゗スを標準で含む • パフォーマンス • CVSよりも圧倒的に速い
  17. 17. Mercurial • サブプロジェクトレポジトリ • http://hg.mozilla.org/ or http://hg.mozilla.org/projects/ • リリース用 • http://hg.mozilla.org/releases/ • ユーザーレポジトリ • http://hg.mozilla.org/users/<email>/ 17
  18. 18. その他 • Subversion • いくつかのプロジェクトで使用 18
  19. 19. Committing Access • 現在は3レベルのパーミッションがある • Try Server用 • Sub projects用 (ex. TraceMonkey) • すべて (mozilla-central) • パーミッションを得るには… • 承認者が必要 • Commit Agreement Letters (FAXまたは手紙) • SSH Key 19
  20. 20. コードレビュー • 基本はすべてのチェック゗ンするコードには、 コードレビューを受ける必要がある • 変更ポ゗ントが広い場合は、スーパーレビューも 必要 • コードレビューはすべてBugzilla上で行う • 差分は、Diff形式で添付 • 最近は、Mercurial Queue形式で添付するのが主 流 20
  21. 21. 修正をコミット • コードレビューすれば、 コードのコミットが可能 になる • 権限がない人は、別の人 に頼むか、Bugzillaに checkin-neededキーワー ドを追加する • そうすると誰かがコミッ トしてくれる(大体はレ ビューを行った人) 21
  22. 22. BUILDING SOUCE CODE 2
  23. 23. Tinderbox • Automation Building & Testing Tools • Tier 1 Platform • Windows (x86 / x86-64) / Linux (x86 / x86-64) / Mac OS X (PPC / x86 / x86-64) • Mobile Tier 1 Platform • Maemo (GTK / Qt) • Android • Other (Port) Platform • Solaris (SPARC / x86) • Past… (Not current) • FreeBSD / OS/2
  24. 24. Tinderbox • VMWare ESX • Run automation tests • Build / Test Result 24
  25. 25. Tinderbox (Burning)
  26. 26. Tinderbox • ビルドエラーやテスト失 敗の時はコメントを入れ るルール • ようは「オレのチェック ゗ンのせいじゃない」と 言い訳をしないといけな い • やらかした場合は、IRC で補足される 26
  27. 27. Tree Status • 状況に応じてチェック゗ンが制限される時があ ります • CLOSED • 基本チェック゗ン不可 • サーバートラブルな時など • RESTRICTED • リリース直前やリリースレポジトリなど 27
  28. 28. Tree Closed 28
  29. 29. IRC Log (#developers) 11:57 (Callek) nthomas: so z_linearhistory fails, and pushlog unable to update... ? 11:57 (Mossop) Oh 11:57 (nthomas) 1) I'm not aravind 11:57 (Mossop) That is bad 11:57 (Callek) nthomas: _exactly_ 11:57 (nthomas) 2) probably 11:57 (nthomas) so file a blocker and close the tree 11:57 (Callek) philor: close tree please? 11:58 (Callek) (or really, anyone) 11:58 (khuey) hahaha 11:58 (khuey) today is a really bad day for the tree 11:58 (Mossop) facepalms 11:58 (Mossop) I knew I should have landed! 11:58 (sauron) poor Mossop 11:58 (khuey) !topic mozilla-central is CLOSED | http://build.mozilla.org/builds/pending 11:58 (khuey) er 11:58 (firebot) Check-in: http://hg.mozilla.org/releases/mozilla-1.9.1/rev/446e17503f87 - Jonas Sicking - Bug 529087: Fix crash involving XBL and cloned XUL elements. r=smaug a=dveditz 11:58 (mwu) 33 oranges? 11:58 *khuey topic : mozilla-central is CLOSED | http://build.mozilla.org/builds/pending 29
  30. 30. Tinderbox • コミッタはここまでケゕする必要がある • だから、それの軽減をするツールが必要 • Tinderbox Pushlog • Tinderbox Topfails 30
  31. 31. Tinderbox Pushlog 31
  32. 32. Tinderbox Pushlog 32
  33. 33. Mozilla Tinderbox Topfails 33
  34. 34. AUTOMATION TESTS
  35. 35. Why automation? • Mozillaのリソースは限られている • 手動でテストするなんて、無理 • Regressionの発見なんてうんざり
  36. 36. Automation Tests • Talos • XPC Shell • RefTests • CrashTest • JsRefTest • MochiTest • MozMill 36
  37. 37. Talos • パフォーマンステスト • スタートゕップやシャットダウン時間の計測 • ウゖンドウを開く速度の計測も • 有名なWebサ゗トのローカルコピーを利用し た描画速度計測 • 日本のWebサ゗トも含まれます。たとえばニコニ コ動画とかゕンサ゗クロペデゖゕとかとか
  38. 38. Talos • パフォーマンスの結果は 随時送られる • パフォーマンスのレグ レッションに対しては、 コードのバックゕウトも あり 38
  39. 39. XPC Shell • XPCOM API testing • 別名Unit Test • JavaScriptまたはC++でテストコードを作成 Components.utils.import("resource://gre/modules/Services.jsm"); function run_test() { // Needs a profile folder for the database. do_get_profile(); testURI(Services.io.newURI("about:mozilla", null, null)); testURI(Services.io.newURI("moz-safe-about:rights", null, null)); } function testURI(aURI) { print("Testing: " + aURI.spec); do_check_true(/about$/.test(aURI.scheme)); let principal = Components.classes["@mozilla.org/scriptsecuritymanager;1"]. getService(Components.interfaces.nsIScriptSecurityManager). getCodebasePrincipal(aURI); let dsm = Components.classes["@mozilla.org/dom/storagemanager;1"]. getService(Components.interfaces.nsIDOMStorageManager); let storage = dsm.getLocalStorageForPrincipal(principal, ""); storage.setItem("test-item", "test-value"); print("Check that our value has been correctly stored."); do_check_eq(storage.getItem("test-item"), "test-value"); storage.removeItem("test-item"); print("Check that our value has been correctly removed."); do_check_eq(storage.getItem("test-item"), null); }
  40. 40. MochiTest • XULまたはHTMLでテスト項目を作成 • DOM操作に関するもの • XUL操作に関するもの • APIに関するもの <!DOCTYPE HTML> <html><head> <title>nsIDOMWindowUtils::nodesFromRect test - bug 489127</title> <script type="text/javascript" src="/MochiKit/packed.js"></script> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"> <script type="application/javascript"> SimpleTest.waitForExplicitFinish(); function done() { testwindow.close(); SimpleTest.finish(); } var testwindow = window.open("489127.html", '_new', 'width=600,height=400'); </script></head><body><p id="display"></p> <div id="content" style="display: none"> </body></html>
  41. 41. RefTests • レンダリングテスト • 同じ描画結果をする2つのHTMLフゔ゗ルでの 描画結果を比較 • Firefox –reftest <reffile.list> <!DOCTYPE html PUBLIC "-//W3C//DTD <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> HTML 4.01 Transitional//EN"> <html> <html> <head> <head> <meta http-equiv="content-type" <meta http-equiv="content-type" content="text/html; charset=UTF-8"> content="text/html; charset=UTF-8"> <title>Bug 206802</title> <title>Bug 206802</title> </head> </head> <body> <body> <div style="width: 1px;">あ々あ々々 <div>あ々<br>あ々々</div> </div> </body> </body> </html> </html>
  42. 42. Crash Test • クラッシュするテストケースを作成 • テスト内容としては、RefTestsと同じもの 42
  43. 43. MozMill • Thunderbirdで主に使用 • Firefoxでも使うように作業中 • ユーザーの操作をPythonでエミューレート 43
  44. 44. Try Server • テスト項目がたくさん • サポートするプラットフォームがたくさん • Geckoのコードの変更は、Thunderbirdにも SeaMonkeyにも影響 • 全員が全プラットフォームでテストするなんて、 無理 • なら、チェック゗ン前にテストをする必要があ るよね 44
  45. 45. Try Server • メ゗ンレポジトリに影響せずにビルドテストや テスト項目の実行が可能 • ビルドされたバ゗ナリはダウンロード可能 • 2週間で削除される • Mercurial Queueの゗ンターフェ゗スまたは、 Web゗ンターフェ゗スでパッチをコミット • MozillaではMercurial Queueが実質必須 • http://mercurial.selenic.com/wiki/MqExtension 45
  46. 46. COMMUNICATIONS / MEETING
  47. 47. MEETINGS • Weekly widely meeting • Developer meeting • Platform • Mobile • Etc (e10s and etc) • Firefox delivery meeting • Marketing • 電話参加または、Air Mozilla • http://air.mozilla.com/ 47
  48. 48. IRC • irc://irc.mozilla.org/ • 多くのチャンネルが存在する • #developers … All developers (200名強) • #mobile … Mobile Developers (90名強) • #maildev … Thunderbird Developers (50名強) • Etc • 基本的な連絡、決定事項はすべてIRCで 48
  49. 49. Mailing List • 項目ごとに様々 • NetNewsまたは、Google Groupsで参照可能 • http://groups.google.com/groups/dir?sel=use net%3Dmozilla%2C& • nntp://news.mozilla.org/ 49
  50. 50. WIKI • http://wiki.mozilla.org/ • Meeting Minutesなども基本公開 • https://wiki.mozilla.org/WeeklyUpdates • https://wiki.mozilla.org/Platform • https://wiki.mozilla.org/Mobile/Notes 50
  51. 51. Any Question? 51

×