Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Yahoo!デベロッパーネットワーク
42,276 views
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
9/27に行われたレガシーコード改善勉強会で発表された資料です。 http://passmarket.yahoo.co.jp/event/show/detail/01pitgwzj67m.html
Software
◦
Read more
69
Save
Share
Embed
Embed presentation
Download
Downloaded 79 times
1
/ 97
2
/ 97
3
/ 97
4
/ 97
5
/ 97
6
/ 97
7
/ 97
8
/ 97
9
/ 97
10
/ 97
11
/ 97
12
/ 97
13
/ 97
14
/ 97
15
/ 97
16
/ 97
17
/ 97
18
/ 97
19
/ 97
20
/ 97
21
/ 97
22
/ 97
23
/ 97
24
/ 97
25
/ 97
26
/ 97
27
/ 97
28
/ 97
29
/ 97
30
/ 97
31
/ 97
32
/ 97
33
/ 97
34
/ 97
35
/ 97
36
/ 97
37
/ 97
38
/ 97
39
/ 97
40
/ 97
41
/ 97
42
/ 97
43
/ 97
44
/ 97
45
/ 97
46
/ 97
47
/ 97
48
/ 97
49
/ 97
50
/ 97
51
/ 97
52
/ 97
53
/ 97
54
/ 97
55
/ 97
56
/ 97
57
/ 97
58
/ 97
59
/ 97
60
/ 97
61
/ 97
62
/ 97
63
/ 97
64
/ 97
65
/ 97
66
/ 97
67
/ 97
68
/ 97
69
/ 97
70
/ 97
71
/ 97
72
/ 97
73
/ 97
74
/ 97
75
/ 97
76
/ 97
77
/ 97
78
/ 97
79
/ 97
80
/ 97
81
/ 97
82
/ 97
83
/ 97
84
/ 97
85
/ 97
86
/ 97
87
/ 97
88
/ 97
89
/ 97
90
/ 97
91
/ 97
92
/ 97
93
/ 97
94
/ 97
95
/ 97
96
/ 97
97
/ 97
More Related Content
PDF
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
by
naoki koyama
PDF
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
by
貴志 上坂
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
PDF
Keycloak拡張入門
by
Hiroyuki Wada
PPTX
脱RESTful API設計の提案
by
樽八 仲川
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
by
Noritaka Sekiyama
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
by
naoki koyama
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
Azure Api Management 俺的マニュアル 2020年3月版
by
貴志 上坂
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
Keycloak拡張入門
by
Hiroyuki Wada
脱RESTful API設計の提案
by
樽八 仲川
Redisの特徴と活用方法について
by
Yuji Otani
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
by
Noritaka Sekiyama
What's hot
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
by
Amazon Web Services Japan
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
PDF
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)
by
Amazon Web Services Japan
PDF
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
by
NTT DATA Technology & Innovation
PDF
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
by
Atsushi Tanaka
PDF
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
by
Trainocate Japan, Ltd.
PDF
MQTTとAMQPと.NET
by
terurou
PPTX
AWSで作る分析基盤
by
Yu Otsubo
PDF
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
by
NTT DATA Technology & Innovation
PPTX
backlogsでもCI/CDする夢を見る
by
Takeru Maehara
PPTX
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
by
Hitachi, Ltd. OSS Solution Center.
PDF
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
by
都元ダイスケ Miyamoto
PDF
RESTful Web アプリの設計レビューの話
by
Takuto Wada
PDF
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
PDF
マルチテナントのアプリケーション実装〜実践編〜
by
Yoshiki Nakagawa
PPTX
Azure API Management 俺的マニュアル
by
貴志 上坂
PDF
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
by
NTT DATA Technology & Innovation
PDF
Data platformdesign
by
Ryoma Nagata
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
by
Amazon Web Services Japan
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)
by
Amazon Web Services Japan
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
by
NTT DATA Technology & Innovation
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
by
Atsushi Tanaka
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
by
Trainocate Japan, Ltd.
MQTTとAMQPと.NET
by
terurou
AWSで作る分析基盤
by
Yu Otsubo
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
by
NTT DATA Technology & Innovation
backlogsでもCI/CDする夢を見る
by
Takeru Maehara
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
by
Hitachi, Ltd. OSS Solution Center.
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
by
都元ダイスケ Miyamoto
RESTful Web アプリの設計レビューの話
by
Takuto Wada
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
マルチテナントのアプリケーション実装〜実践編〜
by
Yoshiki Nakagawa
Azure API Management 俺的マニュアル
by
貴志 上坂
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
by
NTT DATA Technology & Innovation
Data platformdesign
by
Ryoma Nagata
Similar to PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PDF
MakeGoodで快適なテスト駆動開発を
by
Atsuhiro Kubo
PDF
関西Php勉強会のlimeの話
by
Hisateru Tanaka
PDF
PHPの今とこれから2019
by
Rui Hirokawa
PDF
徹底攻略!PHP5.4
by
Takuya Sato
KEY
EC-CUBE + PHPUnit で 実践テスト駆動開発
by
Kentaro Ohkouchi
PDF
PHPUnit でテスト駆動開発を始めよう
by
Yuya Takeyama
PDF
PHPの今とこれから2025 (PHP Conference Japan 2025)
by
Rui Hirokawa
PDF
8時間耐久PHPUnitの教室
by
Yusuke Ando
PDF
CodeIgniter東京勉強会 2011.05.14
by
Takako Miyagawa
PDF
レガシーコードとの付き合い方とテストでの話
by
H Iseri
PDF
Modern PHP Programming @ PFI Seminar
by
Sotaro Karasawa
PDF
PHPの今とこれから2021
by
Rui Hirokawa
PDF
International php conference 2016 参加レポート
by
Ryosuke Miyahara
PDF
ライバルに差をつけろ!カスタム○○○猛特訓ゼミ!!!+α
by
takashi ono
PPTX
PHP基礎勉強会
by
Yuji Otani
PDF
Introduction to Continuous Test Runner MakeGood
by
Atsuhiro Kubo
PDF
PHPの今とこれから2023
by
Rui Hirokawa
PPTX
Php development efficiency improvement
by
伸幸 茂木
PDF
PHPの今とこれから 2013
by
Rui Hirokawa
PDF
Getting Started with Testing using PHPUnit
by
Atsuhiro Kubo
MakeGoodで快適なテスト駆動開発を
by
Atsuhiro Kubo
関西Php勉強会のlimeの話
by
Hisateru Tanaka
PHPの今とこれから2019
by
Rui Hirokawa
徹底攻略!PHP5.4
by
Takuya Sato
EC-CUBE + PHPUnit で 実践テスト駆動開発
by
Kentaro Ohkouchi
PHPUnit でテスト駆動開発を始めよう
by
Yuya Takeyama
PHPの今とこれから2025 (PHP Conference Japan 2025)
by
Rui Hirokawa
8時間耐久PHPUnitの教室
by
Yusuke Ando
CodeIgniter東京勉強会 2011.05.14
by
Takako Miyagawa
レガシーコードとの付き合い方とテストでの話
by
H Iseri
Modern PHP Programming @ PFI Seminar
by
Sotaro Karasawa
PHPの今とこれから2021
by
Rui Hirokawa
International php conference 2016 参加レポート
by
Ryosuke Miyahara
ライバルに差をつけろ!カスタム○○○猛特訓ゼミ!!!+α
by
takashi ono
PHP基礎勉強会
by
Yuji Otani
Introduction to Continuous Test Runner MakeGood
by
Atsuhiro Kubo
PHPの今とこれから2023
by
Rui Hirokawa
Php development efficiency improvement
by
伸幸 茂木
PHPの今とこれから 2013
by
Rui Hirokawa
Getting Started with Testing using PHPUnit
by
Atsuhiro Kubo
More from Yahoo!デベロッパーネットワーク
PDF
ゼロから始める転移学習
by
Yahoo!デベロッパーネットワーク
PDF
継続的なモデルモニタリングを実現するKubernetes Operator
by
Yahoo!デベロッパーネットワーク
PDF
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
by
Yahoo!デベロッパーネットワーク
PDF
オンプレML基盤on Kubernetes パネルディスカッション
by
Yahoo!デベロッパーネットワーク
PDF
LakeTahoe
by
Yahoo!デベロッパーネットワーク
PDF
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
by
Yahoo!デベロッパーネットワーク
PDF
Persistent-memory-native Database High-availability Feature
by
Yahoo!デベロッパーネットワーク
PDF
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
by
Yahoo!デベロッパーネットワーク
PDF
eコマースと実店舗の相互利益を目指したデザイン #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
ビッグデータから人々のムードを捉える #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
サイエンス領域におけるMLOpsの取り組み #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
「新しいおうち探し」のためのAIアシスト検索 #yjtc
by
Yahoo!デベロッパーネットワーク
PDF
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
by
Yahoo!デベロッパーネットワーク
ゼロから始める転移学習
by
Yahoo!デベロッパーネットワーク
継続的なモデルモニタリングを実現するKubernetes Operator
by
Yahoo!デベロッパーネットワーク
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
by
Yahoo!デベロッパーネットワーク
オンプレML基盤on Kubernetes パネルディスカッション
by
Yahoo!デベロッパーネットワーク
LakeTahoe
by
Yahoo!デベロッパーネットワーク
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
by
Yahoo!デベロッパーネットワーク
Persistent-memory-native Database High-availability Feature
by
Yahoo!デベロッパーネットワーク
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
by
Yahoo!デベロッパーネットワーク
eコマースと実店舗の相互利益を目指したデザイン #yjtc
by
Yahoo!デベロッパーネットワーク
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
by
Yahoo!デベロッパーネットワーク
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
by
Yahoo!デベロッパーネットワーク
ビッグデータから人々のムードを捉える #yjtc
by
Yahoo!デベロッパーネットワーク
サイエンス領域におけるMLOpsの取り組み #yjtc
by
Yahoo!デベロッパーネットワーク
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
by
Yahoo!デベロッパーネットワーク
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
by
Yahoo!デベロッパーネットワーク
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
by
Yahoo!デベロッパーネットワーク
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
by
Yahoo!デベロッパーネットワーク
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
by
Yahoo!デベロッパーネットワーク
「新しいおうち探し」のためのAIアシスト検索 #yjtc
by
Yahoo!デベロッパーネットワーク
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
by
Yahoo!デベロッパーネットワーク
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
1.
PHP版レガシーコード改善に 役立つ新パターン ヤフー株式会社
佐藤祐司 2014/9/27 レガシーコード改善勉強会 #wewlc_jp
2.
自己紹介 佐藤 祐司
• 2010年新卒入社 • Webエンジニア • PHP @kuidaoring
3.
今日話すこと • 私の業務とレガシーコード
• パターンの紹介 • これで幸せになれるのか
4.
今日話すこと • 私の業務とレガシーコード
• パターンの紹介 → 本日のメイン • これで幸せになれるのか
5.
今日話すこと • レガシーコード改善の具体的な
リファクタリングの具体的な方法 • 今あるコードを何とかテストで保護して、 自分が手を加える部分のテストを 書けるようにしたい
6.
今日話すこと • レガシーコード改善の具体的な
リファクタリングの具体的な方法 • 今あるコードを何とかテストで保護して、 自分が手を加える部分のテストを 書けるようにしたい
7.
私の業務とレガシーコード
9.
サービス サービス規模 •
58.3億PV / 月 • 1.4億UB / 月 出典:Yahoo! JAPAN 媒体資料 2014年6月改訂版 (PDF) http://i.yimg.jp/images/marketing/portal/paper/media_sheet_open.pdf
10.
サービス トップページを作る部署の中の一つ PJメンバー約40名
• 開発約20名 PCスマホアプリ… ここ
11.
業務とレガシーコード こんなことありませんか? •
少ない自動テスト • リリース当時の開発メンバーはゼロ • どんどん開発メンバーが増える どうしてこんなふうになったのか
12.
新規リリース時 まずはローンチを目指す •
ローンチ、リリース優先 • ヒットするかはわからない ローンチだ!
13.
リリース後 サービスの成長を目指す •
機能を増やす • メンバーも少しづつ増える 機能追加だ!
14.
ある程度成熟して振り返ると • メンバーの入れ替わり
• 歴史的経緯によるコード • 場当たり的な修正 とりあえず 直しました…! 今⽇日からよろしく お願いします!
15.
業務とレガシーコード • その時の判断が間違いだったかは
わからない • 優先順位の話 • ただしずっとそのままでいい というわけではない
16.
業務とレガシーコード 過去には一部似た状況になったが、 •
有志による改善活動 • 社内でもノウハウがたまってきた
17.
ユニットテスト拡充 CI整備
18.
開発フロー整備
19.
業務とレガシーコード どうしたか •
レガシーコードを地道に改善 • レガシーコードを作りにくくする 仕組みや体制を整備 地道に少しづつ改善を進めた
20.
パターンの紹介
21.
パターンの紹介 • レガシーコード改善の具体的な
リファクタリングの具体的な方法 • 今あるコードを何とかテストで保護して、 自分が手を加える部分のテストを 書けるようにしたい
22.
PHPって • Webに特化
• 置けば動く • HTMLに埋め込める • テンプレートエンジン • 標準関数が豊富
23.
PHPにおけるレガシーコード • 環境に依存
• 構造を持たない • スーパーグローバル変数 • $_GET, $_POST, $_SESSION など • 不用意なexit
24.
PHPにおけるレガシーコード サンプルコードを用いて説明 •
adminユーザと一般ユーザで見せる メニューを変更する
26.
どう対応するのか 1. テストを書けるようにする
2. テストで保護する 3. リファクタリング 4. テスト、リファクタリングを繰り返す
27.
どう対応するのか 1. テストを書けるようにする
2. テストで保護する 3. リファクタリング 4. テスト、リファクタリングを繰り返す
28.
なにが問題になるか • DBに接続する
• exitでスクリプトが終了 • getパラメータが必要 • ビューとロジックの混在
29.
DBに接続
30.
exitで終了
31.
スーパーグローバル 変数を参照して パラメータ取得
32.
ビューとロジックが 混在
33.
どうにかしてテストを 書けるようにするためのパターン
34.
• 関数オーバーライド •
ラップ関数
35.
関数オーバーライド
36.
関数オーバーライド • 名前空間を使って組み込み関数などを
上書き • 実際には上書きしてない • 元ネタ PHPでネイティブ関数を含むコードのテスタビリティを上げる2つの方法 - 絶品ゆどうふのタレ http://yudoufu.hatenablog.jp/entry/20110808/1312828535 • 名前空間が接合部になる
37.
関数オーバーライド index.php func()
外部 リソース プロダクトコード
38.
関数オーバーライド index.php func()
外部 リソース プロダクトコード func() テストコード
39.
接合部 接合部とは、その場所を直接変更しなくて も、プログラムの振る舞いを変えることの
出来る場所である レガシーコード改善ガイドより
41.
コンストラクタで 渡すオブジェクトによって 振る舞いを変更できる
42.
名前空間 PHP5.3から導入 PHP:
名前空間 ‒ Manual http://php.net/manual/ja/language.namespaces.php 他の言語のパッケージやモジュールに相当
43.
名前空間 名前空間の影響を受けるもの •
class • interface • trait(5.4以降) • 関数 • 定数(const)
44.
定義
45.
参照
46.
名前空間 • 名前空間の中であれば、
組み込み関数やグローバルな関数と 同じ名前の関数を定義できる • 同じ名前空間内であれば、 名前空間の指定を省略できる
48.
組み込み関数と同じ 名前で定義できる
49.
名前空間内の関数が 呼ばれる
50.
関数オーバーライド どういう時に有効か •
上書きしたい対象が関数でしか 用意されていない 外部の影響を受ける組み込み関数を そのまま使っている場合など
51.
ラップ関数
52.
ラップ関数 変数の参照などを直接行うのではなく 関数を経由して行うようにする
53.
どう対応するのか
54.
なにが問題になるか • DBに接続する
• exitでスクリプトが終了 • getパラメータが必要 • ビューとロジックの混在
55.
どう対応するのか 1. テストを書けるようにする
• 環境の分離 • スーパーグローバル変数の間接参照 • exitの検討 2. テストで保護する 3. リファクタリング 4. テスト、リファクタリングを繰り返す
56.
どう対応するのか 1. テストを書けるようにする
• 環境の分離 • スーパーグローバル変数の間接参照 • exitの検討 2. テストで保護する 3. リファクタリング 4. テスト、リファクタリングを繰り返す
57.
環境の分離 テスト実行時にもDBに接続しにいってしま う
• DBに接続する関数をなんとかしたい • 関数オーバーライドを使う
58.
環境の分離 1. テスト対象のスクリプトに
名前空間の定義を追加 2. テストコードでテスト対象と 同じ名前で名前空間の定義を追加 3. 上書きしたい関数と同じ名前の 関数をテストコードで定義
59.
環境の分離 1. テスト対象のスクリプトに
名前空間の定義を追加 2. テストコードでテスト対象と 同じ名前で名前空間の定義を追加 3. 上書きしたい関数と同じ名前の 関数をテストコードで定義
61.
環境の分離 1. テスト対象のスクリプトに
名前空間の定義を追加 2. テストコードでテスト対象と 同じ名前で名前空間の定義を追加 3. 上書きしたい関数と同じ名前の 関数をテストコードで定義
63.
すでに他の名前空間が あればその下に追加
64.
環境の分離 1. テスト対象のスクリプトに
名前空間の定義を追加 2. テストコードでテスト対象と 同じ名前で名前空間の定義を追加 3. 上書きしたい関数と同じ名前の 関数をテストコードで定義
67.
関数オーバーライド プロダクトコード index.php
db_get_user() DB
68.
関数オーバーライド プロダクトコード index.php
テストコード db_get_user() DB db_get_user()
69.
注意 名前空間を定義することで 関数が呼び出せなくなる場合がある
70.
名前空間の定義を 追加
71.
参照できなくなる
72.
名前空間の影響 どうするか •
関数を名前空間の外に再定義
74.
どう対応するのか 1. テストを書けるようにする
• 環境の分離 • スーパーグローバル変数の間接参照 • exit, dieの検討 2. テストで保護する 3. リファクタリング 4. テスト、リファクタリングを繰り返す
75.
スーパーグローバル変数 変数なので代入して書き換えが可能 •
他のテストケースに影響してしまう • 変数を直接参照しなければいい • ラップ関数を使う
77.
どう対応するのか 1. テストを書けるようにする
• 環境の分離 • スーパーグローバル変数の参照 • exitの検討 2. テストで保護する 3. リファクタリング 4. テスト、リファクタリングを繰り返す
78.
exitの検討 exitのなにが問題になるか •
スクリプトを終了 PHPUnit自体も終了する • exitは関数ではない
81.
実行されない
82.
exit、dieの必要性の検討 成功・失敗も わからず終了
83.
exitの検討 exitは言語構造、予約語 •
名前空間内でも「exit」という 名前の関数を定義できない • 「関数オーバーライド」が使えない
84.
exitの検討 どうするか •
returnの代わりに使ってませんか • returnに変える • exitする部分をラップ関数にする • その後に関数オーバーライドを使う
87.
どう対応するのか 1. テストを書けるようにする
2. テストで保護する 3. リファクタリング 4. テスト、リファクタリングを繰り返す
88.
テスト • ビューとロジックが混ざっているので
ロジックのみの検証はおそらく不可能 • 条件によって変わるビューを検証する • assertRegex, assertContains • HTMLであればassertTagなど
89.
どう対応するのか 1. テストを書けるようにする
2. テストで保護する 3. リファクタリング 4. テスト、リファクタリングを繰り返す
90.
リファクタリング まずはベタなものを適切な単位に分離 •
ファイルを分離 • 関数に分離 • クラスに分離
91.
課題 globalが邪魔をする •
グローバル変数ではなくなる ことによってうまく動作しなくなる • 「コンパイラまかせ」が使えないので 動かすまでわからない
92.
課題 • 関数内でグローバル変数を参照している
部分を引数に置き換えるように リファクタリングする • 地道に。。。 • 参考 テスト不能な PHP コードをリファクタリングするための戦略 http:/www.ibm.com/developerworks/jp/opensource/library/os-refactoringphp/
93.
これで幸せになれるのか
94.
これで幸せになれるのか これだけで根本解決はできない •
とりあえずテストは書けるようになった • 適用できるケースは それほど多くない(かも) • 今回は「今」できること
95.
レガシー 小改善 テストで
保護 リファクタ リング イケてる
96.
これで幸せになれるのか 全体を考えて設計の変更などを 行う必要がある
• フラットなPHPからフレームワークへ • 地道にテストコードを増やしていく 継続的な改善が必要
97.
ありがとうございました
Download