Suche senden
Hochladen
レガシーコード改善のススメ
•
Als PPTX, PDF herunterladen
•
74 gefällt mir
•
29,878 views
A
Akira Hirasawa
Folgen
レガシーコード改善勉強会(2014/9/27@ヤフーさん)の講演資料です。
Weniger lesen
Mehr lesen
Internet
Melden
Teilen
Melden
Teilen
1 von 39
Jetzt herunterladen
Empfohlen
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
takezoe
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Empfohlen
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
takezoe
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
私にとってのテスト
私にとってのテスト
Takuto Wada
Paxos
Paxos
Preferred Networks
Raft
Raft
Preferred Networks
AWS Black Belt Online Seminar Amazon Aurora
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Web Services Japan
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
yoku0825
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
H Iseri
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
Weitere ähnliche Inhalte
Was ist angesagt?
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
私にとってのテスト
私にとってのテスト
Takuto Wada
Paxos
Paxos
Preferred Networks
Raft
Raft
Preferred Networks
AWS Black Belt Online Seminar Amazon Aurora
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Web Services Japan
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
yoku0825
Was ist angesagt?
(20)
分散システムについて語らせてくれ
分散システムについて語らせてくれ
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Redisの特徴と活用方法について
Redisの特徴と活用方法について
私にとってのテスト
私にとってのテスト
Paxos
Paxos
Raft
Raft
AWS Black Belt Online Seminar Amazon Aurora
AWS Black Belt Online Seminar Amazon Aurora
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
Andere mochten auch
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
H Iseri
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
Nyandoc: Scaladoc/Javadoc to markdown converter
Nyandoc: Scaladoc/Javadoc to markdown converter
tod esking
「レガシーコード」とはいったい?
「レガシーコード」とはいったい?
Hiroyuki Ohnaka
精神論によるいきいきとした組織づくりのご提案
精神論によるいきいきとした組織づくりのご提案
tod esking
貧者のための入力デバイス
貧者のための入力デバイス
tod esking
概観テキストマイニング
概観テキストマイニング
tod esking
仕様変更で死なないためのユニットテスト
仕様変更で死なないためのユニットテスト
tod esking
Andere mochten auch
(8)
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
Nyandoc: Scaladoc/Javadoc to markdown converter
Nyandoc: Scaladoc/Javadoc to markdown converter
「レガシーコード」とはいったい?
「レガシーコード」とはいったい?
精神論によるいきいきとした組織づくりのご提案
精神論によるいきいきとした組織づくりのご提案
貧者のための入力デバイス
貧者のための入力デバイス
概観テキストマイニング
概観テキストマイニング
仕様変更で死なないためのユニットテスト
仕様変更で死なないためのユニットテスト
Ähnlich wie レガシーコード改善のススメ
OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)
OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)
Satoshi Konno
モダンアジャイル - Agile Japan 2017 地方サテライト版 #agilejapan
モダンアジャイル - Agile Japan 2017 地方サテライト版 #agilejapan
満徳 関
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
David Buck
Ulsアジャイル推進室 エンタープライズアジャイルがやってくる! 20160312
Ulsアジャイル推進室 エンタープライズアジャイルがやってくる! 20160312
Shozaburo Yoshihara
CNNチュートリアル
CNNチュートリアル
Ikuro Sato
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
心 谷本
[網元] WordPress 高速化チューニング AMI
[網元] WordPress 高速化チューニング AMI
Hiromichi Koga
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
Fuyuki Ishikawa
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
智治 長沢
Androidテスティング実践2 システムテスト編
Androidテスティング実践2 システムテスト編
株式会社 NTTテクノクロス
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
Yuki Tagami
DBTS2015 Tokyo DBAが知っておくべき最新テクノロジー
DBTS2015 Tokyo DBAが知っておくべき最新テクノロジー
Masaya Ishikawa
July techfesta2014 f30
July techfesta2014 f30
Motoki Kakinuma
エンタープライズへのアジャイル開発の導入事例
エンタープライズへのアジャイル開発の導入事例
Shozaburo Yoshihara
Coldfusionを活かすシステム企画をリーンスタートアップに学ぶ
Coldfusionを活かすシステム企画をリーンスタートアップに学ぶ
masashi takehara
[db tech showcase Tokyo 2015] C17:MySQL Cluster ユーザー事例紹介~JR東日本情報システム様における導入事例...
[db tech showcase Tokyo 2015] C17:MySQL Cluster ユーザー事例紹介~JR東日本情報システム様における導入事例...
Insight Technology, Inc.
クラウドファースト時代のAWS活用事例と今後の展望 - AWS Cloud Storage & DB Day 2014
クラウドファースト時代のAWS活用事例と今後の展望 - AWS Cloud Storage & DB Day 2014
Takayuki Enomoto
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
株式会社 NTTテクノクロス
Ähnlich wie レガシーコード改善のススメ
(20)
OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)
OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)
モダンアジャイル - Agile Japan 2017 地方サテライト版 #agilejapan
モダンアジャイル - Agile Japan 2017 地方サテライト版 #agilejapan
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Ulsアジャイル推進室 エンタープライズアジャイルがやってくる! 20160312
Ulsアジャイル推進室 エンタープライズアジャイルがやってくる! 20160312
CNNチュートリアル
CNNチュートリアル
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
[網元] WordPress 高速化チューニング AMI
[網元] WordPress 高速化チューニング AMI
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
Androidテスティング実践2 システムテスト編
Androidテスティング実践2 システムテスト編
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
DBTS2015 Tokyo DBAが知っておくべき最新テクノロジー
DBTS2015 Tokyo DBAが知っておくべき最新テクノロジー
July techfesta2014 f30
July techfesta2014 f30
エンタープライズへのアジャイル開発の導入事例
エンタープライズへのアジャイル開発の導入事例
Coldfusionを活かすシステム企画をリーンスタートアップに学ぶ
Coldfusionを活かすシステム企画をリーンスタートアップに学ぶ
[db tech showcase Tokyo 2015] C17:MySQL Cluster ユーザー事例紹介~JR東日本情報システム様における導入事例...
[db tech showcase Tokyo 2015] C17:MySQL Cluster ユーザー事例紹介~JR東日本情報システム様における導入事例...
クラウドファースト時代のAWS活用事例と今後の展望 - AWS Cloud Storage & DB Day 2014
クラウドファースト時代のAWS活用事例と今後の展望 - AWS Cloud Storage & DB Day 2014
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
レガシーコード改善のススメ
1.
ULS レガシーコード改善のススメ ~保守開発を楽しくする技術を身につけよう~
Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 2014/9/27 ウルシステムズ株式会社 平澤章 http://www.ulsystems.co.jp mailto:info@ulsystems.co.jp Tel: 03-6220-1420 Fax: 03-6220-1402
2.
自己紹介 平澤章(ひらさわあきら) ULS
– 35才の時に生涯一技術者として身を立てると決意したが、 浮き世のしがらみもあり、若干不本意に思いつつも ここ数年は中間管理職としての会社生活を楽しんでいる。 [著書] [翻訳書- すべて共訳] Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 1 ウルシステムズ株式会社 – 企業の戦略的ITに特化したIT技術者集団 – 技術ブログ – http://enterprisegeeks.hatenablog.com/ エンタープライズギークス検索
3.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 2 アジェンダ 保守開発のデフレスパイラル レガシーコードをテストで保護する手法 レガシーコードと闘うための技術大全 レガシーコードとの闘いで得られる果実 翻訳時のこぼれ話 おわりに
4.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 3 皆さんに質問です 今、どんな仕事をしていますか? 新規開発の仕事をしている人 保守開発や運用の仕事をしている人 開発以外の仕事をしている人 仕事をしていない人 この質問には答えたくない人(笑)
5.
最近、保守開発が増えたと思いませんか? ULS ERPでなんとかなるなら、無理して
スクラッチ開発なんかしないでしょ メインフレームのアプリは、 2000年代前半にJava や.NETで作り替えちゃったし ゼロから全部作り替えたいけど、 お金と時間がもったいないでしょ そんなこんなで保守開発が主流に Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 4
6.
だけど、保守開発って大変ですよね ULS ソースコードはひどいし
テストコードなんてもちろんないし まともなドキュメントは残ってないし あっても嘘ばっかり書いてあるし 前の担当者は退職しちゃってるし Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 5
7.
だけど、保守開発って大変ですよね(続き) ULS 修正中に見つけた別の潜在バグは
どうすりゃいいのよ? 元のドキュメントがないのに、変更 分をどこに書けばいいのよ? 手間暇かけてテストする時間をど うやって作ればいいのよ? そもそも、ちゃんと動くのが当たり前だと、 みんなが思ってること自体どうなのよ? Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 6
8.
保守開発のデフレスパイラル ULS コードが
よくわからない デグレードが起きる Copyright © 2014 UL Systems, Inc. All rights reserved. 手探りで修正する Proprietary & Confidential Powered by 7 慌ててやっつけで 修正する 顧客や上司に 怒られる さらにコードが わからなくる 時間外に 呼び出される 人事評価が 悪くなる 仕事がどんどん つまらなくなる スキルが 身につかない オーマイガッ
9.
そんなデフレスパイラルから脱却するには ULS [対策1]
きれいにリファクタリングする [対策2] 単体テストを整備する Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 8
10.
レガシーコードのジレンマ ULS 安全にリファクタリングするためには
先に単体テストを整備する必要がある。 (しかし、レガシーコードの場合) 単体テストを整備するためには 先にリファクタリングする必要がある。 Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 9 その通り! オー、ノー
11.
ということで、レガシーコード改善ガイド ULS Copyright
© 2014 UL Systems, Inc. All rights reserved. 地味ながら ロングセラーになっ ています Proprietary & Confidential Powered by 10 原題 Working Effectively with Legacy Code 著者 マイケル・C・フェザーズ 発刊 2004年9月(米国) 2009年7月(日本) テストがないコードは レガシーコードだ! あなたも、Javaや.NETで レガシーコードを書いていませんか?
12.
「レガシーコード改善ガイド」に書いてあること ULS 1.レガシーコードをテストで保護する手法
「レガシーコードのジレンマ」をすり抜けて、単体テ ストを整備するためのさまざまな手法 2.レガシーコードと闘うための技術大全 コード修正に限らない、レガシーコードを退治する ための、ありとあらゆる技術 3.レガシーコードとの闘いで得られる果実 レガシーコードを改善することの意義と効果 技術者にとっての価値 Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 11
13.
「レガシーコード改善ガイド」はTDDケンカ本だ! 例えるなら、TDD本がリング上で行われるボクシングの試合につ いて記した本であるのに対し、本書は街のケンカについて記した
本である。 TDD本が構え方、ステップ、ジャブの打ち方について解説してい るのに対し、本書は相手が目潰しのために砂を投げてきた時にど うするか、刃物を出してきたらどうするか、といった類の、綺麗事 だけではすまされない様々な現実的な状況への対処方法が例示 されている。 いわばTDDケンカ本である。 ULS 小野和俊さんのブログ (2012年10月1日のエントリー) からの引用 Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 12
14.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 13 アジェンダ 保守開発のデフレスパイラル レガシーコードをテストで保護する手法 レガシーコードと闘うための技術大全 レガシーコードとの闘いで得られる果実 翻訳時のこぼれ話 おわりに
15.
レガシーコードのジレンマへの対処方法(その1) ULS リファクタリングの前に
単体テストを整備したい 単体テストを整備する前に リファクタリングしたい Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 14 レガシーコードのジレンマ 対処方法(その1) リファクタリングせずに 強引に単体テストを整 備する きちんとリファクタリン グする
16.
リファクタリングせずに単体テストを整備する手法例(1) ULS スプラウトメソッド/
スプラウトクラス Sprout Method / Sprout Class Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 15 –状況 機能を追加する際に、汚い既存のコードには極力手を加えたくない。 –対処法 追加機能を独立したメソッドやクラスとして作り、既存のコードには新し いコードを呼び出すロジックだけ追加する。 単体テストは新しく書いたコードにだけ整備し、既存コードのテストはひ とまずあきらめる。 既存の汚いコード 既存の汚いコード スプラウトメソッド [before] [after] ここだけ単体テスト を整備する
17.
リファクタリングせずに単体テストを整備する手法例(2) ULS Nullを渡す
Pass Null Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 16 –状況 テストしたいメソッドが、生成しづらいオブジェクトを引数に 取るため、テストコードを書けない。 –対処法 引数にNullを渡す。それでテストが動いたら結果オーライ。 テストしたいメソッド 生成しづらい オブジェクト テストしたいメソッド Null [before] [after]
18.
レガシーコードのジレンマへの対処方法(その2) ULS レガシーコードのジレンマ
リファクタリングの前に 単体テストを整備したい 単体テストを整備する前に リファクタリングしたい ジレンマへの対処方法(その2) Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 17 単体テストを書ける ように、最低限のリ ファクタリングを行う 単体テストを整備す る きちんとリファクタリ ングする 追加のステップ
19.
単体テストを書くためのリファクタリング手法例(1) ULS 静的メソッドの公開
Expose Static Method テスト対象クラステスト対象クラス Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 18 –状況 インスタンス生成は困難だが、テストしたいメソッドはインスタンス変数や 他のインスタンスメソッドを使っていない。 –対処法 テストしたいメソッドをstaticメソッドに変えてしまう インスタンスメソッドstaticメソッド [before] [after]
20.
単体テストを書くためのリファクタリング手法例(2) ULS テスト対象クラス
インスタンス変数の入れ替え Supersede Instance Variable Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 19 –状況 内部で生成しているオブジェクトが邪魔な実処理を行っているため、単 体テストを書けない。 –対処法 テストのためのsetterを追加して、実処理を行う邪魔なオブジェクトを強 引にダミーに置き換える テスト対象クラス 邪魔なインスタンス邪魔なインスタンス テスト用setter [before] [after]
21.
単体テストを書くためのリファクタリング手法例(3) ULS インタフェースの抽出
Extract Interface Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 20 –状況 メソッドの引数に指定する邪魔なオブジェクトのせいで、単体テストを書 けない。 –対処法 引数に指定するオブジェクト用のインタフェースを定義して、シグニチャ を置き換える。 単体テストでは、テスト用オブジェクトに置き換える。 [before] [after]
22.
単体テストを書くためのリファクタリング手法例(4) ULS 呼び出しの抽出とオーバーライド
Extract and Override Call Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 21 –状況 メソッドの内部に邪魔な処理があるために単体テストを書けない。 –対処法 邪魔な処理をメソッドに切り出す。 テスト用のサブクラスを定義して、邪魔な処理をオーバーライドする。 [before] [after]
23.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 22 アジェンダ 保守開発のデフレスパイラル レガシーコードをテストで保護する手法 レガシーコードと闘うための技術大全 レガシーコードとの闘いで得られる果実 翻訳時のこぼれ話 おわりに
24.
レガシーコードを解読するためのさまざまな手法(1) ULS 仕様化テスト
Characterization Test –既存のコードをそのまま動かすテストケースを書いて 動作を把握する。 –そのテストケースはドキュメントとして扱う。 試行リファクタリング Scratch Refactoring –コードを理解するために自由にリファクタリングする。 –ただし修正したコードはチェックインせず破棄する。 Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 23
25.
レガシーコードを解読するためのさまざまな手法例(2) ULS メソッド分類法
Method Grouping –巨大なクラスに定義されているメソッドを、名前とアク セス属性で分類することで、責務を把握する evaluate branchingExpression causalExpression variableExpression valueExpression nextTerm hasMoreTerms Copyright © 2014 UL Systems, Inc. All rights reserved. addVariable Proprietary & Confidential Powered by 24
26.
レガシーコードを解読するためのさまざまな手法(3) ULS 機能スケッチ
Feature Sketch –レガシーコードを解読する際に、メソッドの呼び出しや 変数へのアクセスの関係を図に描いてみる duration extend() dailyRate Copyright © 2014 UL Systems, Inc. All rights reserved. extendForWork() Proprietary & Confidential Powered by 25 getPrincipalFee() getTotalFee()
27.
レガシーコードを解読するためのさまざまな手法(4) ULS 白紙のCRC
Naked CRC –白紙のカードをオブジェクトに見立てて、それを動かし ながら、設計内容を複数のメンバーで議論する Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 26
28.
レガシーコードと闘うためのその他の技術(1) ULS コンパイラまかせ
Lean on the Compiler –力作業は自分で行わず、コンパイラにまかせる ペアプログラミング Pair Programming –間違いを防止するために、二人で作業する Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 27
29.
レガシーコードと闘うためのその他の技術(2) ULS 超集中編集
Hyperaware Editing –世界をシャットアウトし、レガシーコードとの闘いに没 頭できる状態にして作業を行う。 心頭滅却すれば 火もまた涼し Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 28
30.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 29 アジェンダ 保守開発のデフレスパイラル レガシーコードをテストで保護する手法 レガシーコードと闘うための技術大全 レガシーコードとの闘いで得られる果実 翻訳時のこぼれ話 おわりに
31.
コードが自然にきれいになる 単体テストを整備すると、クラスやメソッドの独立 性が高くなる
コードがどんどんきれいになる ULS –依存関係を排除することで、テスト対象クラスやメソッ ドの凝集度が上がり、結合度が下がる –単体テストを整備する作業を繰り返すと、テストコード が整備されるだけでなく、優れたコードのオアシスが できてくる Copyright © 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 30
32.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 31 技術者にとってのメリット 隣の新規開発の芝はそれほど青くない –新規開発プロジェクトはデスマーチになりがち 実践的な設計スキルが身につく –具体的なコードを前提に作業するので、設計のトレー ドオフ判断がしやすい –すぐにリリースするため、フィードバックを早く得られる レガシーコードとの闘いは意外と楽しい –少しずつ改善して、優れたコードの オアシスを広げていく充実感
33.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 32 アジェンダ 保守開発のデフレスパイラル レガシーコードをテストで保護する手法 レガシーコードと闘うための技術大全 レガシーコードとの闘いで得られる果実 翻訳時のこぼれ話 おわりに
34.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 33 翻訳時のこぼれ話(1) レガシーなのにCOBOLが出てこないなんて! –2004年冬に、某出版社さんから翻訳を 打診されましたが、そのときは断っちゃいました 当時の感覚では、Javaでレガシーはないなと。
35.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 34 翻訳時のこぼれ話(2) 翻訳作業中に原書の読書会を発見! –猛者たちが集う、濃いコミュニティだったので、 出版後にこっぴどく批判されることを心配しました(笑) –で、おそるおそる読書会に参加して、翻訳作業への協 力を依頼したところ、快く対応していただきました。 貢献していただいたこと – 原稿の査読 – 質問や嘆きを表現した第2部の章タイトルの日本語表現 – 「レガシーコード改善ガイド」というタイトルの命名
36.
ULS Copyright ©
2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 35 アジェンダ 保守開発のデフレスパイラル レガシーコードをテストで保護する手法 レガシーコードと闘うための技術大全 レガシーコードとの闘いで得られる果実 翻訳時のこぼれ話 おわりに
37.
保守開発のデフレスパイラル ULS コードが
よくわからない デグレードが起きる Copyright © 2014 UL Systems, Inc. All rights reserved. 手探りで修正する Proprietary & Confidential Powered by 36 慌ててやっつけで 修正する 顧客や上司に 怒られる さらにコードが わからなくる 時間外に 呼び出される 人事評価が 悪くなる 仕事がどんどん つまらなくなる スキルが 身につかない オーマイガッ
38.
レガシーコード改善技術を身につけて 保守開発のデフレスパイラル 余裕を持ってリファク
ULS デグレードが起こら Copyright © 2014 UL Systems, Inc. All rights reserved. ない Proprietary & Confidential Powered by 37 設計スキルが 上がる 顧客や上司に 褒められる コードがどんどん きれいになる デート中に 呼び出されない 給料が上がる 仕事がどんどん 楽しくなる レガシーコード改善 技術を身につけると タリングできる 確信を持って 修正できる 保守開発を楽しもう!
39.
ULS おしまい! Copyright
© 2014 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 38
Jetzt herunterladen