0Pricing
Ruby Academy · บทเรียน

การทดสอบและการกำหนดเวอร์ชัน

คุณภาพและ semver

การทดสอบและการกำหนดเวอร์ชัน เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน

ทำไมต้องทดสอบเจม

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

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

การเลือกกรอบการทำงาน

ตัวเลือกยอดนิยมมีสองแบบ ได้แก่ Minitest (มาพร้อม Ruby และมีน้ำหนักเบา) และ RSpec (มี DSL มากความสามารถและใช้งานกันอย่างแพร่หลาย) ทั้งสองแบบใช้ได้ดี ให้เลือกหนึ่งแบบแล้วเพิ่มเป็นสิ่งที่ต้องพึ่งพาสำหรับการพัฒนาในไฟล์ข้อกำหนดเจม

ตัวอย่าง Minitest

การทดสอบของ Minitest คือคลาสธรรมดาที่มีเมธอดตรวจยืนยัน นี่คือตัวอย่างที่ทำงานได้ในตัวเอง โดยเรียกใช้ตรรกะของเจมและตรวจสอบผลลัพธ์

require "minitest/autorun"

def greet(name)
  "Hi, " + name
end

class GreetTest < Minitest::Test
  def test_greet
    assert_equal "Hi, Sam", greet("Sam")
  end
end

การตรวจยืนยันที่ใช้บ่อย

การตรวจยืนยันของ Minitest ที่มีประโยชน์:

  • assert_equal expected, actual
  • assert obj และ refute obj
  • assert_nil value
  • assert_raises(Error) { ... }

การทดสอบแต่ละรายการควรตรวจสอบพฤติกรรมที่ชัดเจนเพียงหนึ่งอย่าง

require "minitest/autorun"

class MathTest < Minitest::Test
  def test_addition
    assert_equal 4, 2 + 2
  end

  def test_truth
    refute_nil 5
  end
end

การเรียกใช้และทำการทดสอบโดยอัตโนมัติ

โดยทั่วไปคุณจะเพิ่มงานของ Rake เพื่อให้ rake test เรียกใช้ชุดการทดสอบทั้งหมด จากนั้นการผสานรวมอย่างต่อเนื่องจะเรียกใช้งานเดียวกันทุกครั้งที่ส่งโค้ดขึ้นระบบ โดยใช้ Ruby หลายเวอร์ชันเพื่อค้นหาปัญหาได้ตั้งแต่เนิ่น ๆ

การกำหนดเวอร์ชันตามความหมายคืออะไร

การกำหนดเวอร์ชันตามความหมาย (เซมเวอร์) ให้ความหมายกับหมายเลขเวอร์ชัน MAJOR.MINOR.PATCH:

  • MAJOR: การเปลี่ยนแปลงส่วนติดต่อที่ไม่เข้ากันได้
  • MINOR: ความสามารถใหม่ที่ยังเข้ากันได้กับรุ่นก่อน
  • PATCH: การแก้ไขข้อผิดพลาดที่ยังเข้ากันได้กับรุ่นก่อน

ผู้ใช้พึ่งพาหลักการนี้เพื่ออัปเกรดได้อย่างปลอดภัย

การอ่านเวอร์ชัน

จาก 2.4.1: ส่วนหลักคือ 2 ส่วนรองคือ 4 และส่วนแก้ไขคือ 1 การแยกสตริงจะแสดงส่วนต่าง ๆ เหล่านี้

version = "2.4.1"
major, minor, patch = version.split(".")
puts "Major: " + major
puts "Minor: " + minor
puts "Patch: " + patch

เมื่อใดควรเพิ่มแต่ละส่วน

หลักในการตัดสินใจ:

  • แก้ไขข้อผิดพลาดโดยไม่เปลี่ยนส่วนติดต่อใช่หรือไม่ ให้เพิ่มส่วนแก้ไข
  • เพิ่มความสามารถใหม่โดยโค้ดเดิมยังทำงานได้ใช่หรือไม่ ให้เพิ่มส่วนรองและตั้งค่าส่วนแก้ไขกลับเป็น 0
  • ลบหรือเปลี่ยนพฤติกรรมเดิมใช่หรือไม่ ให้เพิ่มส่วนหลักและตั้งค่าส่วนรองกับส่วนแก้ไขกลับเป็น 0
def bump_minor(version)
  major, minor, _patch = version.split(".").map(&:to_i)
  major.to_s + "." + (minor + 1).to_s + ".0"
end

puts bump_minor("1.3.5")

ข้อจำกัดเวอร์ชัน

ผู้ใช้จะกำหนดเวอร์ชันเจมของคุณด้วยตัวดำเนินการในไฟล์ Gemfile:

  • '~> 1.4' อนุญาตเวอร์ชันตั้งแต่ 1.4 จนถึงก่อน 2.0 (แบบจำกัดช่วง)
  • '>= 1.4' อนุญาตเวอร์ชันที่ใหม่กว่าได้ทุกเวอร์ชัน
  • '= 1.4.2' ล็อกไว้ที่เวอร์ชันที่ระบุอย่างแน่นอน

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

ดูแลบันทึกการเปลี่ยนแปลง

ดูแล CHANGELOG.md โดยระบุสิ่งที่เปลี่ยนแปลงในแต่ละเวอร์ชัน ไฟล์นี้บอกผู้ใช้ว่ามีอะไรใหม่ อะไรใช้ไม่ได้ และต้องย้ายระบบอย่างไร ทุกครั้งที่เพิ่มเวอร์ชันควรเพิ่มรายการลงในบันทึกการเปลี่ยนแปลงด้วย

เวอร์ชันก่อนเผยแพร่

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

version = "2.0.0.beta1"
puts "Pre-release? " + version.include?("beta").to_s

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับการกำหนดเวอร์ชัน

สรุป: การทดสอบและการกำหนดเวอร์ชัน

คุณได้เรียนรู้วิธีรักษาความน่าเชื่อถือของเจม:

  • เขียนการทดสอบด้วย Minitest หรือ RSpec และทำให้เป็นอัตโนมัติด้วย Rake กับการผสานรวมอย่างต่อเนื่อง
  • ปฏิบัติตามเซมเวอร์: MAJOR.MINOR.PATCH
  • เพิ่มส่วนที่ถูกต้องสำหรับการแก้ไข ความสามารถใหม่ หรือการเปลี่ยนแปลงที่ทำให้เข้ากันไม่ได้
  • ใช้ข้อจำกัด ~> และดูแลบันทึกการเปลี่ยนแปลง

ถัดไปเราจะเผยแพร่เจมไปยัง RubyGems

คำถามที่พบบ่อย

บทเรียน “การทดสอบและการกำหนดเวอร์ชัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทดสอบและการกำหนดเวอร์ชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทดสอบและการกำหนดเวอร์ชัน”

คุณภาพและ semver คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การทดสอบและการกำหนดเวอร์ชัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม

ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โครงสร้าง Gem
  2. การเขียนโค้ด
  3. การทดสอบและการกำหนดเวอร์ชัน
  4. การเผยแพร่ไปยัง RubyGems
← กลับไปที่ Ruby Academy