Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LegacySystem.pdf

B6049d83fae261dbba42a27a629704d7?s=47 k-motoyan-diverse
November 27, 2018
1.2k

 LegacySystem.pdf

B6049d83fae261dbba42a27a629704d7?s=128

k-motoyan-diverse

November 27, 2018
Tweet

Transcript

  1. レガシーシステムが あらわれた! diverse.tech #1 ~ レガシーシステムを かたらう よる ~

  2. これは レガシーな プログラムを かいぜんしていくための はじめの いっぽをふみだす おはなしです。

  3. アバウト ミー •かぶしきがいしゃ Diverse •にゅうしゃ 3かげつめの かけだし サーバーサイドエンジニア •Github •https://github.com/k-motoyan

  4. それは あるひの できごとでした…

  5. 「この むかしから ある システムに  あたらしく きのうを ついかしたいんだ。」

  6. 「この むかしから ある システムに  あたらしく きのうを ついかしたいんだ。」 はい   いいえ

  7. 「この むかしから ある システムに  あたらしく きのうを ついかしたいんだ。」 はい → いいえ

  8. 「げんじつ からは にげられない!」

  9. 「どうする?」 コードを みる   しようを かくにんする

  10. 「どうする?」 コードを みる → しようを かくにんする

  11. 「しようを しっているひとは  もういないよ。」

  12. 「かいはつチームの めのまえが  まっくらになった。」

  13. None
  14. 「どうする?」 コードを みる   しようを かくにんする

  15. 「どうする?」 → コードを みる   しようを かくにんする

  16. class UserController < ApplicationController def index @user = User.find_by!(id: params[:id],

    status: :active) if !@user.is_debug_user? AccessLog.create user_id: @user.id, user_name: @user.name, access_page: "user_index" end begin @user.friends.each do |friend| if !friend.enabled_friend_access_notification @notification = Notification.create user_id: @friend.id friend_id: @user.id message: "#{@user.name}͕ϚΠϖʔδʹΞΫηε͠·ͨ͠" end PushService.send(@notification) end rescue => e @error = ErrorLog.create message: "ϑϨϯυͷ௨஌ʹࣦഊ͠·ͨ͠" redirect_to error_page_path(@error) end case @user.score when 0..10 render :score1_user when 11..30 render :score2_user when 31..50 render :score3_user when 51..70 render :score4_user when 81..100 render :score5_user end end end
  17. class UserController < ApplicationController def index @user = User.find_by!(id: params[:id],

    status: :active) if !@user.is_debug_user? AccessLog.create user_id: @user.id, user_name: @user.name, access_page: "user_index" end begin @user.friends.each do |friend| if !friend.enabled_friend_access_notification @notification = Notification.create user_id: @friend.id friend_id: @user.id message: "#{@user.name}͕ϚΠϖʔδʹΞΫηε͠·ͨ͠" end PushService.send(@notification) end rescue => e @error = ErrorLog.create message: "ϑϨϯυͷ௨஌ʹࣦഊ͠·ͨ͠" redirect_to error_page_path(@error) end case @user.score when 0..10 render :score1_user when 11..30 render :score2_user when 31..50 render :score3_user when 51..70 render :score4_user when 81..100 render :score5_user end end end これは かくうの ソースコードです
  18. 「さわるだけで デグレードしそうな  ソースコードだ。」

  19. 「どうする?」 はらをくくって きのうを ついかする   テストを かく

  20. 「どうする?」 はらをくくって きのうを ついかする → テストを かく

  21. 「どの テストを かく?」 ユニット テスト   しようか テスト

  22. 「どの テストを かく?」 → ユニット テスト   しようか テスト

  23. class UserController < ApplicationController def index @user = User.find_by!(id: params[:id],

    status: :active) if !@user.is_debug_user? AccessLog.create user_id: @user.id, user_name: @user.name, access_page: "user_index" end begin @user.friends.each do |friend| if !friend.enabled_friend_access_notification @notification = Notification.create user_id: @friend.id friend_id: @user.id message: "#{@user.name}͕ϚΠϖʔδʹΞΫηε͠·ͨ͠" end PushService.send(@notification) end rescue => e @error = ErrorLog.create message: "ϑϨϯυͷ௨஌ʹࣦഊ͠·ͨ͠" redirect_to error_page_path(@error) end case @user.score when 0..10 render :score1_user when 11..30 render :score2_user when 31..50 render :score3_user when 51..70 render :score4_user when 81..100 render :score5_user end end end
  24. class UserController < ApplicationController def index @user = User.find_by!(id: params[:id],

    status: :active) if !@user.is_debug_user? AccessLog.create user_id: @user.id, user_name: @user.name, access_page: "user_index" end begin @user.friends.each do |friend| if !friend.enabled_friend_access_notification @notification = Notification.create user_id: @friend.id friend_id: @user.id message: "#{@user.name}͕ϚΠϖʔδʹΞΫηε͠·ͨ͠" end PushService.send(@notification) end rescue => e @error = ErrorLog.create message: "ϑϨϯυͷ௨஌ʹࣦഊ͠·ͨ͠" redirect_to error_page_path(@error) end case @user.score when 0..10 render :score1_user when 11..30 render :score2_user when 31..50 render :score3_user when 51..70 render :score4_user when 81..100 render :score5_user end end end
  25. class UserController < ApplicationController def index @user = User.find_by!(id: params[:id],

    status: :active) if !@user.is_debug_user? AccessLog.create user_id: @user.id, user_name: @user.name, access_page: "user_index" end begin @user.friends.each do |friend| if !friend.enabled_friend_access_notification @notification = Notification.create user_id: @friend.id friend_id: @user.id message: "#{@user.name}͕ϚΠϖʔδʹΞΫηε͠·ͨ͠" end PushService.send(@notification) end rescue => e @error = ErrorLog.create message: "ϑϨϯυͷ௨஌ʹࣦഊ͠·ͨ͠" redirect_to error_page_path(@error) end case @user.score when 0..10 render :score1_user when 11..30 render :score2_user when 31..50 render :score3_user when 51..70 render :score4_user when 81..100 render :score5_user end end end
  26. 「いぞんどの たかい  コードが うめこまれていて  ユニットテストを かくことが むずかしい。」

  27. 「どの テストを かく?」 ユニット テスト   しようか テスト

  28. 「どの テストを かく?」 ユニット テスト → しようか テスト

  29. ʊਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͠Α͏͔ɹςετɹʻ ʉ:?:?:?:?:?:?:?:?:ʉ

  30. ࢓༷Խςετ DIBSBDUFSJ[BUJPOUFTU ࢓༷Խςετͱ͸ɺίʔυͷݱࡏͷৼΔ෣͍Λ֬ೝ͢ΔͨΊ ͷςετͰ͢ɻ ݱࡏͷৼΔ෣͍Λςετͱͯ͠ॻ͖ى͜͢͜ͱͰɺͦͷίʔ υʹରͯ͠मਖ਼ΛՃ͑ͨ࠶ʹ൐͏ΤϯόάɾσάϨʔυΛ཈ ੍͢ΔޮՌ͕͋Γ·͢ɻ ͋͘·Ͱ΋ݱࡏͷৼΔ෣͍Λ֬ೝ͢ΔͨΊͷςετͰ͋Γɺ ࢓༷͕੔උ͞ΕΔλΠϛϯάͰ࢓༷Խςετ͸ࣺͯΔ͔मਖ਼ ͢Δඞཁ͕ग़ͯ͘Δɻ

  31. class UserController < ApplicationController def index @user = User.find_by!(id: params[:id],

    status: :active) if !@user.is_debug_user? AccessLog.create user_id: @user.id, user_name: @user.name, access_page: "user_index" end begin @user.friends.each do |friend| if !friend.enabled_friend_access_notification @notification = Notification.create user_id: @friend.id friend_id: @user.id message: "#{@user.name}͕ϚΠϖʔδʹΞΫηε͠·ͨ͠" end PushService.send(@notification) end rescue => e @error = ErrorLog.create message: "ϑϨϯυͷ௨஌ʹࣦഊ͠·ͨ͠" redirect_to error_page_path(@error) end case @user.score when 0..10 render :score1_user when 11..30 render :score2_user when 31..50 render :score3_user when 51..70 render :score4_user when 81..100 render :score5_user end end end
  32. class UserController < ApplicationController def index @user = User.find_by!(id: params[:id],

    status: :active) if !@user.is_debug_user? AccessLog.create user_id: @user.id, user_name: @user.name, access_page: "user_index" end begin @user.friends.each do |friend| if !friend.enabled_friend_access_notification @notification = Notification.create user_id: @friend.id friend_id: @user.id message: "#{@user.name}͕ϚΠϖʔδʹΞΫηε͠·ͨ͠" end PushService.send(@notification) end rescue => e @error = ErrorLog.create message: "ϑϨϯυͷ௨஌ʹࣦഊ͠·ͨ͠" redirect_to error_page_path(@error) end case @user.score when 0..10 render :score1_user when 11..30 render :score2_user when 31..50 render :score3_user when 51..70 render :score4_user when 81..100 render :score5_user end end end
  33. class UserController < ApplicationController def index @user = User.find_by!(id: params[:id],

    status: :active) if !@user.is_debug_user? AccessLog.create user_id: @user.id, user_name: @user.name, access_page: "user_index" end begin @user.friends.each do |friend| if !friend.enabled_friend_access_notification @notification = Notification.create user_id: @friend.id friend_id: @user.id message: "#{@user.name}͕ϚΠϖʔδʹΞΫηε͠·ͨ͠" end PushService.send(@notification) end rescue => e @error = ErrorLog.create message: "ϑϨϯυͷ௨஌ʹࣦഊ͠·ͨ͠" redirect_to error_page_path(@error) end case @user.score when 0..10 render :score1_user when 11..30 render :score2_user when 31..50 render :score3_user when 51..70 render :score4_user when 81..100 render :score5_user end end end
  34. class UserController < ApplicationController def index @user = User.find_by!(id: params[:id],

    status: :active) if !@user.is_debug_user? AccessLog.create user_id: @user.id, user_name: @user.name, access_page: "user_index" end begin @user.friends.each do |friend| if !friend.enabled_friend_access_notification @notification = Notification.create user_id: @friend.id friend_id: @user.id message: "#{@user.name}͕ϚΠϖʔδʹΞΫηε͠·ͨ͠" end PushService.send(@notification) end rescue => e @error = ErrorLog.create message: "ϑϨϯυͷ௨஌ʹࣦഊ͠·ͨ͠" redirect_to error_page_path(@error) end case @user.score when 0..10 render :score1_user when 11..30 render :score2_user when 31..50 render :score3_user when 51..70 render :score4_user when 81..100 render :score5_user end end end 71 から 80 のケースがない!?
  35. 「バグなのか しようなのか わからない  コードに しようか テストを かいた。」

  36. 「こうかは バツグンだ!」

  37. 「かいはつチームは しようか テスト で、  きのうついかの かいはつが  おこなえるようになった!!」

  38. こうして むかしからある システムに きのうを ついかする おしごとを こなすことが できました。

  39. しかし むかしからある、 レガシーシステムがもつ もんだいは これだけでは ありません。

  40. かいはつチームの たたかいは  まだまだ つづく…

  41. さんこう ぶんけん ΫϦεɾόʔνϟϧʢஶʣɹ٢઒ɹ๜෉ʢ຋༁ʣ ʰϨΨγʔιϑτ΢ΣΞվળΨΠυʱɹᠳӭࣾ

  42. Special Thanks υοτ෩ϑΥϯτ SDFɿIUUQTXXXIPHFSBDPNQDCGPOU ձ৔ઃӦΛͯ͘͠Εͨ%JWFSTFͷํʑ ͦͯ͠ɺࠓ೔͝དྷ৔௖͍ͨօ༷