SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
レガシーコード改善のススメ
Report
Akira Hirasawa
Follow
Software Developler at UL Systems. Inc.
Sep. 28, 2014
•
0 likes
•
29,677 views
1
of
39
レガシーコード改善のススメ
Sep. 28, 2014
•
0 likes
•
29,677 views
Download Now
Download to read offline
Report
Internet
レガシーコード改善勉強会(2014/9/27@ヤフーさん)の講演資料です。
Akira Hirasawa
Follow
Software Developler at UL Systems. Inc.
Recommended
MQTTとAMQPと.NET
terurou
39.8K views
•
41 slides
マイクロにしすぎた結果がこれだよ!
mosa siru
132.1K views
•
32 slides
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
147.1K views
•
45 slides
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
6.5K views
•
42 slides
Javaのログ出力: 道具と考え方
Taku Miyakawa
73.7K views
•
67 slides
例外設計における大罪
Takuto Wada
67.9K views
•
37 slides
More Related Content
What's hot
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
21K views
•
91 slides
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
2.9K views
•
30 slides
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
8.1K views
•
55 slides
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
NTT DATA Technology & Innovation
5.7K views
•
47 slides
MySQLアーキテクチャ図解講座
Mikiya Okuno
26K views
•
34 slides
Akkaで分散システム入門
Shingo Omura
6.5K views
•
39 slides
What's hot
(20)
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
•
21K views
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
•
2.9K views
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
•
8.1K views
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
NTT DATA Technology & Innovation
•
5.7K views
MySQLアーキテクチャ図解講座
Mikiya Okuno
•
26K views
Akkaで分散システム入門
Shingo Omura
•
6.5K views
Akkaとは。アクターモデル とは。
Kenjiro Kubota
•
7.7K views
UMLモデルを使った自動生成
Norihito Ohshima
•
4.4K views
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
•
17.3K views
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
•
5.7K views
TLS, HTTP/2演習
shigeki_ohtsu
•
12.9K views
RDF Semantic Graph「RDF 超入門」
オラクルエンジニア通信
•
9.9K views
MySQL 5.7にやられないためにおぼえておいてほしいこと
yoku0825
•
174.5K views
シリコンバレーの「何が」凄いのか
Atsushi Nakada
•
183.4K views
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
•
56.2K views
SpringBootTest入門
Yahoo!デベロッパーネットワーク
•
12.9K views
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
NTT Communications Technology Development
•
1.3K views
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
•
29.6K views
Serverless時代のJavaについて
Amazon Web Services Japan
•
12.9K views
AWSのログ管理ベストプラクティス
Akihiro Kuwano
•
76.7K views
Viewers also liked
レガシーコードとの付き合い方とテストでの話
H Iseri
27.2K views
•
33 slides
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
20.5K views
•
63 slides
Nyandoc: Scaladoc/Javadoc to markdown converter
tod esking
14.6K views
•
9 slides
「レガシーコード」とはいったい?
Hiroyuki Ohnaka
16.4K views
•
59 slides
精神論によるいきいきとした組織づくりのご提案
tod esking
3K views
•
15 slides
貧者のための入力デバイス
tod esking
4.2K views
•
27 slides
Viewers also liked
(8)
レガシーコードとの付き合い方とテストでの話
H Iseri
•
27.2K views
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
•
20.5K views
Nyandoc: Scaladoc/Javadoc to markdown converter
tod esking
•
14.6K views
「レガシーコード」とはいったい?
Hiroyuki Ohnaka
•
16.4K views
精神論によるいきいきとした組織づくりのご提案
tod esking
•
3K views
貧者のための入力デバイス
tod esking
•
4.2K views
概観テキストマイニング
tod esking
•
4.6K views
仕様変更で死なないためのユニットテスト
tod esking
•
2K views
Similar to レガシーコード改善のススメ
OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)
Satoshi Konno
2.1K views
•
69 slides
モダンアジャイル - Agile Japan 2017 地方サテライト版 #agilejapan
満徳 関
2.7K views
•
47 slides
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
David Buck
153 views
•
71 slides
Ulsアジャイル推進室 エンタープライズアジャイルがやってくる! 20160312
Shozaburo Yoshihara
2K views
•
22 slides
CNNチュートリアル
Ikuro Sato
37.8K views
•
35 slides
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
心 谷本
24.7K views
•
76 slides
Similar to レガシーコード改善のススメ
(20)
OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)
Satoshi Konno
•
2.1K views
モダンアジャイル - Agile Japan 2017 地方サテライト版 #agilejapan
満徳 関
•
2.7K views
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
David Buck
•
153 views
Ulsアジャイル推進室 エンタープライズアジャイルがやってくる! 20160312
Shozaburo Yoshihara
•
2K views
CNNチュートリアル
Ikuro Sato
•
37.8K views
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
心 谷本
•
24.7K views
[網元] WordPress 高速化チューニング AMI
Hiromichi Koga
•
1.8K views
スマートなシステム、スマートなディペンダビリティ保証-次世代システムを頼れるものへ
Fuyuki Ishikawa
•
416 views
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
•
85.9K views
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
智治 長沢
•
600 views
Androidテスティング実践2 システムテスト編
株式会社 NTTテクノクロス
•
3.6K views
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
Yuki Tagami
•
2.8K views
DBTS2015 Tokyo DBAが知っておくべき最新テクノロジー
Masaya Ishikawa
•
10.8K views
July techfesta2014 f30
Motoki Kakinuma
•
3.1K views
エンタープライズへのアジャイル開発の導入事例
Shozaburo Yoshihara
•
4.1K views
Coldfusionを活かすシステム企画をリーンスタートアップに学ぶ
masashi takehara
•
1.8K views
[db tech showcase Tokyo 2015] C17:MySQL Cluster ユーザー事例紹介~JR東日本情報システム様における導入事例...
Insight Technology, Inc.
•
9.7K views
クラウドファースト時代のAWS活用事例と今後の展望 - AWS Cloud Storage & DB Day 2014
Takayuki Enomoto
•
2.7K views
Androidテスティング実践3 ユニットテスト・CI編
株式会社 NTTテクノクロス
•
4.1K views
モデリングと対話で実践!ちょうどいいシステムズエンジニアリング_サービス紹介_概要版.pdf
levii3
•
18 views
レガシーコード改善のススメ
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