イノベーション人材育成のためのオープン・ソース・ソフトウェア概説 (in...

62
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . イノベーション人材育成のための オープン・ソース・ソフトウェア概説 山上俊彦 ACCESS IoT 事業本部, ACCESS [email protected] 2017/03 山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説 2017/03 1 / 61

Upload: toshihiko-yamakami

Post on 05-Apr-2017

85 views

Category:

Education


0 download

TRANSCRIPT

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

イノベーション人材育成のためのオープン・ソース・ソフトウェア概説

山上俊彦

ACCESS IoT 事業本部, [email protected]

2017/03

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 1 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

前編

オープンイノベーション

オープンソースとは

ツール

オープンソースの掟

オープンソースのご法度

オープンソースのビジネス活用

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 2 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンイノベーション

OSS (Open Source Software): ソフトウェアの著作者の権利を守りながらソースコードを公開することを可能にするライセンス(ソフトウェアの使用許諾条件)を指し示す概念(Wikipedia)

二元論の終わり

オープンソースソフトウェア

商用ソフトウェア

現代工学の

主要課題

オープン

イノベーション

越境

ソフト工学

説明するソフト開発大規模ソフト開発、分散開発

顧客や提携相手と

イノベーション

現代研究開発戦略

標準化 or 財団工学

コンセンサス工学個人戦→ 団体戦

経済生態系

工学

フリー経済

フレームワーク

生態依存性工学プラットフォーム戦略

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 3 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

OSS に見るプログラミングスキル転換

スキル パワー

10 年前のプログラミング

アーキテクト能力

スキルパワー

今のプログラミング

ソフトは資産ではなくて負債 (1 行でも書かないほうがいい)80 % 以上はフレームワークが仕事をしている何をどう流用し、組み合わせるかを知っていることが決定的

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 4 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

Hollywood Principle

フレームワークデザインのガイドライン

“don’t call us, we’ll call you”コントロールの放棄: デバッグ、維持、試験の容易さ

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 5 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

フレームワークへの変遷

機械

?信号

機械 信号プログラム

メモリ

?信号

【フォンノイマン型コンピューティングの誕生】

機械 プログラム 変数

ROM RAM

?信号

機械 プログラム 変数

?信号

ファイルシステム

ソース → バイナリ

【ソースコードプログラミングの誕生】

機械 プログラム 変数

?信号

ファイルシステム

フレームワーク

WS 要素 FW 要素

コード コード

→ バイナリ

(OSS or Proprietary)

サーバ

クラウド, Web Services(OSS or Proprietary)

ネットワーク

【フレームワークプログラミングの誕生 (OSS による普及)】

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 6 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

OSS とは?

オープンソースはソフトウェア以外にもある知財の一部を無償公開し、周辺領域で事業運営するソフトの場合は OSS (オープンソースソフトウェア)

OSS とは何かは非常に難しい (私だけ?)複雑な概念だという理解が不足 (OSS= 無料という程度の理解)IT インフラ進化により加速OSS はプロジェクトによって千差万別

コード

SourceForge

e.g Meego(1 億行)

ライセンス

GPL, LGPL (GPL 汚染)

BSDDual License

XXX Public License 乱立

開発手法

�、バザール方式

設計 + コード + デバッグ+ 運用の一体化

哲学・社会運動

フリーソフトウェア

普及方法プロフェッショナル OSS

コミュニティ属人的, 感情的摩擦

Maintainer, 標準ツール,プロジェクト数 30 万

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 7 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

[参考] OSS の歴史

GNU(1983)

FSF(1985)

BSDLicense(1990)

GPLv2LGPL(1991)

Linux(1991)

OSS, OSI(1998)

Black Duck(2002)

ApacheS. F.

(1999)

SourceForge(1999)

GNOMEFoundation(2000)

LinuxF.

(2007)

LiMo F.(2007)OHA (2007)

Symbian F. (2008)

MozillaFoundation

(2003)

Eclipse.org(2001)

EclipseFoundation

(2004)

Ubuntu(2004)Red Hat

Software(1995)

MySQL AB(1995)

MySQL 買収(2008)

注 1: Red Hat は copyleft 注 2: Linux は今でもバザール方式注 3: GNU/Linux はアプリも含めたパッケージ注 4:BSD 系ライセンスは派生ライセンスが自由

注 5: Bugzilla(1999)山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 8 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンであること

オープンであることは痛みを伴うプロジェクト毎にやりかたはいろいろ

汗を流した人に決める権利がある

大規模であれば、実は OSS でなくても課題は同じ

コーディング

コミュニケーション

コーディングコミュニケーション

多少の誇張はあるが…

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 9 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンソース

共同開発の新しい形態

今後のソフトウェア開発の方法として有望

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 10 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンソース (2)

オープンソースとは単にソースコードを公開する、ということではない会社に入る、と同じような、ある作法に従うことを前提とする開発の仕方の選択

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 11 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンソース (3)

オープンソース化したい自分を証明する仲間の一員として認めてもらう

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 12 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

仲間にはいる方法

自分を知ってもらう (1)IRC(チャット) にはいって話しかけるメーリングリストに入ってメール交換する自分がどのようなソフトを作ろうとしているかをチャットやメールで話す変なおたくジョークをチャットで披露

自分を知ってもらう (2)Bugzilla(バグ管理ソフト) の中からバグを取り上げて直すProject の作業項目の中から何かを貢献する

相手を知るMaintainer, Contributors を知る

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 13 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

仲間にはいる方法 (2)

中世のギルドのようなものおひかえなすって、…自分の知識を紹介その中で時間を使う: 存在証明作業を分担し、信頼してもらう

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 14 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ご法度

いきなり大貢献こっそり半年作業して、いきなり 15 万行の改変コードを貢献する

誰もレビューできない:レビューシステムの無視他人との共同作業の拒否と見られる部分的に何かつくっていた人々の時間が無駄にいろいろなアイディアがあって進行している他作業や経緯の無視

大きな tarball を出すくらいならプロジェクトを起こす

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 15 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

貢献

Bugzilla にそって行うパッチ (修正) を投稿パッチのレビューパッチの承認/拒否パッチの受け入れパッチのコミット

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 16 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

貢献 (2)

大きな貢献1回より小さな貢献たくさん

不安定でも早く何回もリリース

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 17 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

プロジェクトの掟

プロジェクトの掟はプロジェクト毎に違う

プロジェクトは基本的には Maintainer の BabyGetting Involved慣例もプロジェクトによって違う

例: 偶数バージョンは安定版、奇数バージョンは試用版: プロジェクトによって違う

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 18 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

プロジェクト

プロジェクトは次のものからなっている人: Maintainer, Reviewers, Contributorsコードツール: Web, Wiki, IRC, Mailing List, blog, RCS, doxygen, Bugzilla,SDK, …

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 19 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ツール

コミュニケーションツール

開発ツール

バグ管理ツール

コード維持ツール

ドキュメンテーションツール

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 20 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

MaintainerMain ContributorsOccasional ContributorsBreeding Edge UsersUsers

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 21 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

エコシステムの一員になる

プロジェクトのツールを使う

プロジェクトの情報交換の一部となる

プロジェクトの貢献・レビューシステムの一員となる

ロードマップを共有する

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 22 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

エコシステムの一員になる (2)

まず Maintainer, Contributors と相談

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 23 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

尊敬と責任

オープンソースエコシステムの一部となる信頼を勝ち得る尊敬を勝ち得る責任を勝ち得る

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 24 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

開発の方法

Internal Temporary BranchTemporary Branch: No GuaranteePre-release BranchStable Branch

Upstream への貢献

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 25 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

よい OSS プロジェクト

強い開発コミュニティ

確固たるユーザベース

メジャーディストリビューションでの採用

安定したリリースサイクル

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 26 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

なぜオープンソース

メンテナンスコストの削減

標準のツール、ドキュメンテーションの利用:継続可能なシステムの採用

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 27 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンソース化するには

オープンソースコミュニティのメンバを雇用

オープンソースコミュニティメンバをコンサルタント契約

e.g. オープンソース廃人の活用

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 28 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンソースのバリア

時間的制約英語圏のチャットに参加するには時差が壁

言語的制約IRC やおたくジョークはしきいが高い

開発文化的制約制約された開発計画の拒否定期的ミーティングや出社の拒否自宅勤務

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 29 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンソース会社

オープンソースのビジネスモデルデュアルライセンス開発コンサルタント

勤務形態自宅勤務グローバル: オーストラリア、ブラジル

採用形態バグ修正の経験をみて採用はずれがないコミュニティの束縛

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 30 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

哲学

オープンソース・ソフトウェアの哲学の尊重プログラミングはアートプログラマはアーティスト新しい思考方法, 勤労方法プログラマの情熱の共有

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 31 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

コミュニケーションスキル

なにもかも話さなければならないわけではない開発プランの一部を秘匿しても深い技術的議論はできる隠したがっているという態度は NG

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 32 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンソースにする

オープンにしながら自分の優位性を保つには基盤プラットフォームは人と共通化するよりクリエイティブになる

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 33 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンソースにする (2)

プロトコル、などは成功例が多い

開発環境、もオープンソース向き

ユーザエクスペリエンス、などは難しい

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 34 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

オープンソースにする (3)

プロジェクトを理解するのに時間を惜しまない

信頼を勝ち得るのには時間がかかる

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 35 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

前編のまとめ

オープンイノベーション

オープンソースとは

ツール

オープンソースの掟

オープンソースのご法度

オープンソースのビジネス活用

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 36 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

後編のはじめに

書く技術より読む技術ソースコードを読むことは状況を読むことに近い

読む目的を理解外部依存性の理解すべては読まない技術構造の理解リスクの理解成り立ちの理解

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 37 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースコードを読む技術

他人のソースを読むことは書くことより難しい読む技術を教えることは難しい読む技術は教えられていない

自分で書いたソースも忘却により他人のソースと同じになる

多くのコミュニケーションと同様、ソースコードを読むことも苦痛

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 38 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースコードを読む技術 (2)

よいコードを書くためによいコードを読めといわれた時代技術の習得よい習慣の習得統一的なコーディング

書かないために読む、時代へ

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 39 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースコードを読む技術 (3)

オープンソース時代にはソースを読むことが重要規模複雑さ完成度外部依存性

自分で書くか、オープンソースを使うかを判断

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 40 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースコードを読む技術 (4)

添付されているドキュメントを読む

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 41 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースコードを読む技術 (5)

巨視的な理解規模の把握 (ファイル数、行数など)、ディレクトリ構造、ドキュメントの精査、プロジェクトのポータルサイトの確認 (サイトマップ)、メーリングリスト、掲示板等コミュニティサイトの確認、名前付け規約の確認、ソースコード管理システム、バグ管理システム

微視的な理解ソースコード、ソースコードリファレンス、ChangeLog、バグデータベース、ソースコード管理システム (バージョン間の差分)、検索エンジン、メーリングリスト

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 42 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 43 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースの読み方

静的に読むそもそも静的に読むだけでも大変IDE, gdb などを使い、ツールで読む

動的に読むツールなどを使い、性能などを解析する

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 43 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースの読み方 (2)

もっとも非効率な読み方はしから順番に読むソースコードははしから読むようにできていないソースコードははしから順番に書かれたわけでもない

効率的な読み方コードを読む技術とはコードを読まない技術読まなくていいところを判断する技術ツールを使う: gprof, oprofile など → 読むべきところを把握

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 44 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースの読み方 (3)

読み方はサイズに依存プログラムのサイズ

サイズはありとあらゆる人間の協調活動に影響サイズは読み方、書き方、メンテナンスに仕方に影響

プログラムのサイズ小規模: 1-5 万行 (10 人以下で半年以下)中規模: 5-20 万行大規模: 20 万行以上 (100 人で 1 年以上)メンテナンス、依存関係にもよる

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 45 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大規模なソース

OSS は 100 万行なんて珍しくない(MySQL/PHP/PostgreSQL/Samba/Perl …)Linux カーネルなんて 500 万行 (2007)ひらメソッド(超精細)なんてのもある:

LKH-jp(旧読学のススメ)で提案されているコードリーディング手法.関数単位で Wiki にメモを残しながら,ボトムアップに読み進める.

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 46 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大規模なソース (2)

WebKit (browser) テスト除いて 80 万行Android  カーネル除いて  800 万行OSS でなくてもブラウザ、Java、など 100 万行超える組み込みソフトはごろごろ

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 47 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方

読む目的の設定構造を理解するインタフェースを理解する改造の準備をする利用可能性を評価する

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 48 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方 (2)

読むこと名前の塊を理解すること

関数名、変数名、定数名、…コメントのスタイルファイル名名前付けの体系

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 49 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方 (3)

歴史を読むこと設計の開始点を読むチーム構成を読む変更の時間間隔、最新の変更を読む

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 50 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方 (4)

構造を読むことファイル構成、ディレクトリ構成バージョン管理グローバルな名前体系、コーディングルールインタフェース仕様拡張の方法想定されているデバッグのしかた外部依存関係データ構造制御構造データベース構成

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 51 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方 (5)

ヘッダファイルを読むこと基本的なデータ構造分岐やデバッグの作法依存関係

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 52 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方 (6)

権利を読むことライセンス条件配布条件

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 53 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方 (7)

静的な解析ツールctags, doxygen, …呼び出し関係の可視化ツールなどもある

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 54 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方 (8)

ソースコードには著者の意思や哲学がちりばめられている書いたひとを理解できればソースの理解は格段に効率化する拡張する方法、好きなデータ構造などテーストを理解

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 55 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方 (9)

テストコードを読むことテストの環境設定テストの網羅性テストの対象

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 56 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

後編のむすび

書く技術より読む技術ソースコードを読むことは状況を読むことに近い

読む目的を理解外部依存性の理解すべては読まない技術構造の理解リスクの理解成り立ちの理解

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 57 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

参考

ソースコードを読むための技術 http://i.loveruby.net/ja/misc/readingcode.htmlその後、Ruby ソースコード完全解説序章にはいった模様

Code Reading: The Open Source Perspective (by Diomidis Spinellis, 2003 Addison-Wesley)オープンソースのコードサーチエンジン http://www.koders.com/

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 58 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

最近の潮流

単体で読みやすくする

ユニットテストをしっかりするリファクタリングする

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 59 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

(参考)Eclipse

IBM によって開発された Java 用統合開発環境 (IDE)Java で書かれている1998 年開発開始, 2001 年 11 月オープンソース化2004 年 Eclipse Foundation 設立

プラグイン

さまざまな機能をプラグインとして組み込めるよう設計非常に拡張性が高いプラグインでさまざまな言語 (C++, Perl, C#, Python, …) に対応CVS 連携, JUnit 連携, Ant 連携SWT(Standard Widget Toolkit) を使い、動作が軽快

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 60 / 61

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

(参考) リファクタリング

振る舞いを変えずにソースコードの内部構造を整理する)

主な技術

長いメソッドの抽出双方向関連を単方向に変更継承を委譲に書き換えるコンストラクタを Factory Method に書き換える引数オブジェクトの導入クラス、メソッド、属性の名称を変更

最近の IDE はリファクタリング機能が具備アジャイルプログラミングの XP などでは開発の習慣としてリファクタリングを挙げている

山上俊彦 (ACCESS Confidential) イノベーション人材育成のためのオープン・ソース・ソフトウェア概説2017/03 61 / 61