Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

การปรับโครงสร้าง Ruby ที่สำคัญบนโค้ด Rails ใหม่กับนักวิทยาศาสตร์:แนวทางที่ได้รับการพิสูจน์แล้ว

ขอให้วิศวกรซอฟต์แวร์ตรวจสอบส่วนสำคัญของโค้ดการผลิต และพวกเขาจะชี้ให้เห็นสามสิ่งที่จำเป็นต้องได้รับการปรับโครงสร้างใหม่อย่างหลีกเลี่ยงไม่ได้ แล้วเหตุใดโค้ดที่แย่ เปราะ หรือเข้าใจผิดจำนวนมากจึงยังคงทำงานอยู่ในการใช้งานจริง

คำตอบนั้นง่ายมาก:วิศวกรกลัวที่จะสัมผัสมัน งานการปรับโครงสร้างใหม่จะได้รับการระบุและเพิ่มลงใน Backlog แต่ไม่ค่อยได้เข้าสู่ Sprint ปัจจุบัน

มีเหตุผลหลายประการสำหรับเรื่องนี้ รหัสอาจถูกเขียนโดยวิศวกรที่ออกจากทีมเมื่อหลายปีก่อน และไม่มีใครเข้าใจรหัสนี้อย่างถ่องแท้ ในกรณีอื่นๆ ความสามารถมีความสำคัญต่อธุรกิจ ไม่มีใครอยากรับผิดชอบต่อการหยุดทำงานที่อาจเกิดขึ้นหรือการสูญเสียรายได้

ในโพสต์นี้ เราจะตรวจสอบว่าคุณสามารถใช้ Scientist เพื่อโยกย้าย ปรับโครงสร้าง และเปลี่ยนแปลงโค้ดการผลิต Ruby ที่สำคัญได้อย่างมั่นใจได้อย่างไร

แต่ก่อนอื่น คุณอาจถามว่า เราใช้การทดสอบเพื่อขุดปัญหาโค้ดไม่ได้หรือ

นี่คือสิ่งที่การทดสอบ Rails มีไว้เพื่อใช่ไหม

ใช่และไม่ใช่ มักจะเป็นเรื่องยากที่จะได้รับความมั่นใจอย่างสมบูรณ์ในการเปลี่ยนแปลงโค้ดก่อนที่จะปรับใช้ ผ่านการทดสอบตัวเครื่องและระบบ ไปได้ดีใช่ไหม

ความจริงก็คือว่าไม่มีอะไรมาทดแทนโลกแห่งความเป็นจริงได้ เช่น การผลิต จะเกิดอะไรขึ้นหากคุณภาพของข้อมูลไม่ดีหรือการทดสอบหายไป คุณจะรู้ได้อย่างไรว่าซอฟต์แวร์ใหม่จะทำงานได้ดีพอที่จะรองรับปริมาณงานการผลิตหรือไม่

บางครั้งทีมงานที่ให้บริการสาธารณะพบว่าจำเป็นต้องจัดการกับปัญหา "ความเข้ากันได้ของข้อบกพร่อง" เมื่อมีข้อบกพร่องในการผลิตมาระยะหนึ่งแล้ว ไคลเอนต์อาจเขียนโค้ดในลักษณะที่ขึ้นอยู่กับพฤติกรรมที่ไม่ถูกต้องที่สอดคล้องกัน ลูกค้ามักใช้ซอฟต์แวร์ในลักษณะที่ไม่คาดคิด

สังเกตการเปลี่ยนแปลงการผลิตใน Ruby และ Rails กับนักวิทยาศาสตร์

หากการผลิตเป็นสถานที่ที่ดีที่สุดในการได้รับความมั่นใจในการเปลี่ยนแปลง ให้พิจารณาสังเกตว่าโค้ดทำงานอย่างไร สิ่งนี้อาจฟังดูน่ากลัวในตอนแรก เนื่องจากแนวคิดในการ "ทดสอบในการใช้งานจริง" ขัดแย้งกับแนวปฏิบัติด้านวิศวกรรมซอฟต์แวร์แบบคลาสสิก

อย่างไรก็ตาม ข่าวดีก็คือว่า การทำดังกล่าวใน Ruby และ Rails นั้นทำได้ง่ายและปลอดภัยโดยใช้อัญมณีนักวิทยาศาสตร์ ชื่อของนักวิทยาศาสตร์นั้นขึ้นอยู่กับวิธีการทางวิทยาศาสตร์ในการทำการทดลองเพื่อตรวจสอบสมมติฐานที่กำหนด ในกรณีนี้ สมมติฐานของเราคือโค้ดใหม่ใช้งานได้

เหตุผลที่เราใช้วิธีการนี้ได้อย่างปลอดภัยนั้นเกิดจากการที่การทดลองยังคงใช้ผลลัพธ์ของโค้ดที่มีอยู่ รหัสใหม่ได้รับการประเมินเพื่อวัตถุประสงค์ในการสังเกตและการเปรียบเทียบเท่านั้น ทั้งเพื่อความถูกต้องและประสิทธิภาพ เราบรรเทาความกังวลเกี่ยวกับความครอบคลุมของการทดสอบที่กล่าวถึงก่อนหน้านี้โดยการประเมินประสิทธิภาพโดยใช้ข้อมูลและพารามิเตอร์ในโลกแห่งความเป็นจริง โดยทั่วไปแล้ว การทดลองจะประเมินอัตราตัวอย่างที่เลือกของคำขอเพื่อลดผลกระทบต่อการผลิต อย่างไรก็ตาม คุณสามารถประเมินทุกคำขอได้หากต้องการ

ตอนนี้เรามาดูกันคร่าวๆ ว่านักวิทยาศาสตร์ทำงานอย่างไรในสาขาหนึ่งโดยวิธีนามธรรม

สาขาตามรูปแบบนามธรรมในนักวิทยาศาสตร์ของ Ruby

แนวทางของนักวิทยาศาสตร์เริ่มต้นด้วยรูปแบบ Branch by Abstraction ที่ Martin Fowler บรรยายว่าเป็น "การเปลี่ยนแปลงครั้งใหญ่ต่อระบบซอฟต์แวร์อย่างค่อยเป็นค่อยไป"

เราแนะนำเลเยอร์นามธรรมเพื่อแยกโค้ดที่กำลังอัปเดต เลเยอร์นี้ตัดสินใจว่าจะใช้การดำเนินการใดเพื่อให้การทดสอบโปร่งใสกับส่วนที่เหลือของระบบ เทคนิคนี้เกี่ยวข้องกับการใช้แฟล็กคุณลักษณะที่กำหนดเส้นทางโค้ด

อัญมณีนักวิทยาศาสตร์ซึ่งมีต้นกำเนิดจาก Github นำรูปแบบนี้ไปใช้โดยใช้การทดลอง รหัสที่มีอยู่เรียกว่าตัวควบคุม และการใช้งานใหม่คือตัวเลือก เส้นทางรหัสทั้งสองทำงานตามลำดับแบบสุ่ม แต่จะส่งคืนเฉพาะผลลัพธ์การควบคุมไปยังไคลเอนต์

การใช้นักวิทยาศาสตร์เพื่อปรับโครงสร้างบริการ Ruby

พิจารณาบริการ Ruby ที่ส่งคืนตัวประกอบเฉพาะที่ใหญ่ที่สุดสำหรับจำนวนที่กำหนด สมมติว่าเราได้ระบุการเพิ่มประสิทธิภาพเพื่อตัดชุดผู้สมัครที่จำเป็น ซึ่งจะทำให้บริการเร็วขึ้น

อย่างไรก็ตาม เจ้าของบริการต้องการให้แน่ใจว่าไม่มีข้อบกพร่องเกิดขึ้น พวกเขายังต้องการสังเกตการปรับปรุงประสิทธิภาพด้วย แนะนำรหัสต่อไปนี้ การปรับเปลี่ยนไคลเอนต์เพื่อเรียกใช้เมธอดนี้:

 

ณ จุดนี้ เฉพาะ use นิพจน์ (ควบคุม) ถูกเรียกใช้ เพื่อให้การทดสอบคุ้มค่า ให้กำหนด Experiment ที่กำหนดเอง คลาสเพื่อเปิดใช้งาน (100% ของเวลาด้านล่าง) และเผยแพร่ผลลัพธ์ (ในกรณีนี้ เพียงบันทึก) นักวิทยาศาสตร์สร้างข้อมูลที่ยอดเยี่ยมแต่ไม่ได้ทำอะไรกับมันตามค่าเริ่มต้น ส่วนนั้นขึ้นอยู่กับคุณ

 

ผลลัพธ์ของการทดสอบจะถูกบันทึก และเราสามารถปรับปรุงเมื่อเวลาผ่านไปตามความคิดเห็นที่ได้รับ เมื่อโค้ดใหม่ตรงตามข้อกำหนดและมีความมั่นใจในระดับสูง ให้ตัดส่วนการใช้งานใหม่ให้สำเร็จโดยเพียงแค่แทนที่โค้ดวิทยาศาสตร์ด้วยการมอบหมายสิทธิ์ให้กับการใช้งานใหม่

LabTech ทำให้การทดลองของนักวิทยาศาสตร์ง่ายขึ้นใน Ruby on Rails

คุณสามารถใช้ LabTech gem ในแอปพลิเคชัน Rails ของคุณเพื่อกำหนดค่านักวิทยาศาสตร์และจัดการผลลัพธ์ได้อย่างง่ายดาย

แอปพลิเคชันที่ใช้ AppSignal สามารถใช้ Appsignal.instrument เครื่องมือช่วยแบบกำหนดเองเพื่อติดตามว่ากิจกรรมของนักวิทยาศาสตร์ใช้เวลานานเท่าใดจึงจะเสร็จสิ้น ล้อมรอบบล็อกโค้ดการทดสอบต่างๆ เพื่อดูเหตุการณ์ปรากฏในไทม์ไลน์ประสิทธิภาพ

ตอนนี้ กลับไปที่ LabTech — หน้าเว็บด้านล่างเพียงยอมรับตัวเลขที่จะแยกตัวประกอบ

การปรับโครงสร้าง Ruby ที่สำคัญบนโค้ด Rails ใหม่กับนักวิทยาศาสตร์:แนวทางที่ได้รับการพิสูจน์แล้ว

การเริ่มต้นใช้งานนั้นง่ายดายหากคุณสามารถเข้าถึงคอนโซลได้ ขั้นแรก เพิ่ม LabTech gem ลงใน Gemfile ของคุณแล้วรัน bundle install .

 

ตารางจะจัดเก็บผลลัพธ์และการกำหนดค่าการทดลอง ดังนั้นให้ดำเนินการย้ายฐานข้อมูล

 

เลเยอร์นามธรรมจะเหมือนกัน ยกเว้นว่าจะใช้โมดูล LabTech รหัสเต็มมีอยู่ใน GitHub

 

ณ จุดนี้ การทดลองถูกปิดใช้งาน ดังนั้นให้ใช้คอนโซลเพื่อเปิดใช้งานในทุกกรณีหรือเป็นเปอร์เซ็นต์ของเวลา

 

ขณะนี้เราทำการทดสอบได้แล้ว และการทดสอบจะได้รับการประเมิน สำหรับการดูผลลัพธ์ที่เป็นข้อความ ให้ใช้คำสั่งอย่างใดอย่างหนึ่งต่อไปนี้จากคอนโซล Rails

 

หลังจากดำเนินการสำเร็จไม่กี่ครั้งและเกิดข้อผิดพลาดขึ้นหนึ่งครั้ง ต่อไปนี้คือตัวอย่างลักษณะของสรุปผลลัพธ์ มีภาพรวมของความสำเร็จและความล้มเหลว รวมถึงแผนภูมิ ASCII ที่แสดงความแตกต่างของประสิทธิภาพ

 

Blazer gem เป็นวิธีที่ดีในการวิเคราะห์ผลลัพธ์ได้อย่างง่ายดาย ติดตั้งง่ายและอนุญาตให้เรียกใช้คำสั่ง SQL กับตารางได้ ข้อความค้นหาที่นี่แสดงให้เห็นว่าการใช้งานของผู้สมัครนั้นเร็วกว่าต้นฉบับอย่างมาก

การปรับโครงสร้าง Ruby ที่สำคัญบนโค้ด Rails ใหม่กับนักวิทยาศาสตร์:แนวทางที่ได้รับการพิสูจน์แล้ว

ในตัวอย่างบริการการแยกตัวประกอบเฉพาะ การเร่งความเร็วในการใช้งานที่ได้รับการปรับปรุงนั้นมาจากการศึกษาพฤติกรรมที่ขจัดปัจจัยที่เป็นไปได้บางประการที่ต้องพิจารณา เมื่อเราพิจารณาตัวเลขที่สูงกว่าและหาตัวประกอบเฉพาะ เราสามารถหยุดค้นหาได้หลังจากที่เราได้ตัวเลขเป้าหมายหารด้วยตัวประกอบนั้นแล้ว เส้นทางโค้ดใหม่จะเพิ่มคำสั่งเดียวเท่านั้นเพื่อให้บรรลุผลนี้

นอกจากนี้เรายังสามารถเห็นการลดเวลาในการดำเนินการโดยใช้แบบสอบถาม Blazer เทียบกับตาราง LabTech

การปรับโครงสร้าง Ruby ที่สำคัญบนโค้ด Rails ใหม่กับนักวิทยาศาสตร์:แนวทางที่ได้รับการพิสูจน์แล้ว

กรณีการใช้งานและข้อจำกัดของนักวิทยาศาสตร์

กรณีการใช้งานที่เหมาะสมที่สุดสำหรับนักวิทยาศาสตร์ ได้แก่ การค้นหา การคำนวณ และโค้ดที่ไม่มีผลข้างเคียง โค้ดที่มีการอัพเดตธุรกรรมหรือการบูรณาการภายนอก เช่น อีเมลไม่เข้ากับโมเดลอย่างสมบูรณ์ เนื่องจากความสามารถถูกรันสองครั้ง (ทั้งการใช้งานเก่าและใหม่)

นี่ไม่ใช่ข้อจำกัดเล็กๆ น้อยๆ เนื่องจากจะขจัดกรณีการใช้งานหลายประการ อย่างไรก็ตาม มีวิธีแก้ไขชั่วคราวหากการทดสอบมีความสำคัญต่อความสำเร็จของคุณ พิจารณาว่าผลข้างเคียงมีความเกี่ยวข้องหรือว่าปัญหาที่ซ้ำซ้อนหรือไม่ ตัวอย่างเช่น ในบางกรณีอาจมีการส่งอีเมลสองฉบับในระหว่างการประเมินหรือไม่ อีกทางเลือกหนึ่งคือให้โค้ดใหม่กำหนดผลลัพธ์แต่ไม่ต้องคงอยู่ วิธีนี้จะช่วยป้องกันการเปรียบเทียบประสิทธิภาพที่มีความหมาย อย่างไรก็ตาม มันจะช่วยให้คุณสามารถตรวจสอบความถูกต้องได้

ข้อจำกัดอื่นๆ เกิดจากการที่นักวิทยาศาสตร์ให้ความสำคัญกับค่าที่ส่งคืน ในบางกรณี ผลลัพธ์ที่ถูกต้องอาจแสดงความแตกต่างเมื่อเวลาผ่านไป ไม่ว่าจะเป็นเพียงการประทับเวลาในการตอบสนองหรือปัจจัยบางอย่างอาจแตกต่างกันไป ในหลายกรณี เราสามารถเขียนตรรกะการเปรียบเทียบที่กำหนดเองในการทดสอบเพื่อตรวจสอบความถูกต้องมากกว่าการเปรียบเทียบสตริงพื้นฐาน

สุดท้ายนี้ ข้อจำกัดของ LabTech ก็คือยังไม่ได้ถูกย้ายไปยัง Rails 7 ณ เวลาที่เขียน

แนวทางปฏิบัติที่ดีที่สุดสำหรับการทดลองของนักวิทยาศาสตร์ที่มีประสิทธิภาพใน Rails

พิจารณารายการเหล่านี้เมื่อดำเนินการทดสอบของคุณ:

  • ในโครงการ Rails นักวิทยาศาสตร์สามารถกำหนดค่าในเครื่องมือเริ่มต้นหรือ wrapper เช่น Rails LabTech gem แอปพลิเคชัน Rails ส่วนใหญ่มีฐานข้อมูลอยู่แล้ว ดังนั้น LabTech จึงใช้ประโยชน์จาก ActiveRecord เพื่อจัดเก็บผลลัพธ์
  • เพื่อหลีกเลี่ยงการชะลอการพัฒนาและการทดสอบ ให้เปิดใช้การทดสอบเฉพาะในสภาพแวดล้อมชั่วคราวและการใช้งานจริงเท่านั้น
  • เพื่อลดผลกระทบที่อาจเกิดขึ้นกับการใช้งานจริง ให้ทำการทดสอบตามเปอร์เซ็นต์ของคำขอเท่านั้น LabTech รองรับสิ่งนี้ทันทีเป็นพารามิเตอร์ทางเลือกเมื่อคุณเปิดใช้งานการทดสอบ (ในตอนแรกจะถูกปิดใช้งานโดยค่าเริ่มต้น) การใช้นักวิทยาศาสตร์ล้วนๆ ทำให้ตรรกะนี้เขียนโค้ดได้ง่ายใน enabled? ของการทดลอง วิธีการ.
  • ตรรกะบางอย่างต้องใช้ทรัพยากรมาก ดังนั้นอัตราการสุ่มตัวอย่างต่ำอาจเป็นจุดเริ่มต้นที่ดี เมื่อคุณมั่นใจในผลลัพธ์แล้ว ให้เพิ่มเปอร์เซ็นต์คำขอที่ได้รับการประเมิน
  • คุณสามารถเพิ่มแอตทริบิวต์บริบทเพื่อให้ได้ประโยชน์สูงสุดจากผลลัพธ์ของคุณ บริบทการทดสอบสามารถตั้งค่าเป็นแฮชที่คีย์สัญลักษณ์ของข้อมูลที่เผยแพร่แล้วในผลลัพธ์ที่เผยแพร่ เช่น:
 

สรุป:สังเกตและติดตามแอป Ruby ของคุณกับนักวิทยาศาสตร์

ในโพสต์นี้ เราได้สำรวจวิธีการใช้อัญมณีนักวิทยาศาสตร์เพื่อเปลี่ยนแปลง โยกย้าย และปรับโครงสร้างโค้ด Ruby ในการใช้งานจริง

เราตรวจสอบต้นกำเนิดของนักวิทยาศาสตร์ในสาขาด้วยรูปแบบนามธรรม จากนั้นจึงดำดิ่งลงสู่การปรับโครงสร้างใหม่ ต่อไป เราได้เห็นว่า LabTech สามารถช่วยรวบรวมผลลัพธ์และโครงร่างนักวิทยาศาสตร์ของคุณได้อย่างไร

จากนั้น เราได้กล่าวถึงข้อจำกัดบางประการของนักวิทยาศาสตร์ ก่อนที่จะสรุปแนวทางปฏิบัติที่ดีที่สุดบางประการในที่สุด

คุณต้องสังเกตและติดตามสิ่งที่เกิดขึ้นในระบบของคุณ รวมนักวิทยาศาสตร์เข้ากับกระบวนการพัฒนาของคุณเพื่อทำการเปลี่ยนแปลงที่สำคัญในโค้ด Ruby ของคุณด้วยความมั่นใจมากขึ้น

ขอให้สนุกกับการเขียนโค้ด!

ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! การปรับโครงสร้าง Ruby ที่สำคัญบนโค้ด Rails ใหม่กับนักวิทยาศาสตร์:แนวทางที่ได้รับการพิสูจน์แล้ว

ดาร์เรน บรอมเมอร์

ดาร์เรนสนุกกับการสร้างแรงบันดาลใจผ่านคำเขียนและทำให้สิ่งที่ซับซ้อนเข้าใจง่าย ความสนใจของเขารวมถึงวิทยาศาสตร์และฟิสิกส์ และมีคณิตศาสตร์เพียงพอที่จะเข้าใจทั้งสองอย่าง เขาสร้างโซลูชันเนื้อหาและเทคโนโลยีคุณภาพสูง และทวีตเกี่ยวกับเนื้อหาดังกล่าวเป็นครั้งคราว

บทความทั้งหมดโดย Darren Broemmer