ไม่ว่าคุณจะเพิ่มฟังก์ชันการสูญเสีย ปรับปรุงความครอบคลุมของการทดสอบ หรือเขียน RFC สำหรับการเปลี่ยนแปลงการออกแบบครั้งใหญ่ ส่วนนี้ของคู่มือผู้มีส่วนร่วมจะช่วยให้คุณเริ่มต้นได้ ขอบคุณสำหรับการทำงานและความสนใจของคุณในการปรับปรุง TensorFlow
ก่อนที่คุณจะเริ่มต้น
ก่อนที่คุณจะส่งโค้ดต้นฉบับไปยังโปรเจ็กต์ TensorFlow โปรดตรวจสอบไฟล์ CONTRIBUTING.md ใน GitHub repository ของโปรเจ็กต์นั้นก่อน ตัวอย่างเช่น ดูไฟล์ CONTRIBUTING.md ใน repository หลักของ TensorFlow ผู้ร่วมส่งโค้ดทุกคนต้องลงนามในข้อตกลงสิทธิ์การใช้งานของผู้มีส่วนร่วม ( Contributor License Agreement หรือ CLA)
เพื่อหลีกเลี่ยงการทำงานซ้ำซ้อน โปรดตรวจสอบ RFC ปัจจุบัน หรือ ที่เสนอ และติดต่อผู้พัฒนาในฟอรัม TensorFlow ( developers@tensorflow.org ) ก่อนเริ่มทำงานในฟีเจอร์ที่ไม่ซับซ้อน เราค่อนข้างเลือกสรรเมื่อตัดสินใจเพิ่มฟังก์ชันใหม่ และวิธีที่ดีที่สุดในการมีส่วนร่วมและช่วยเหลือโครงการคือการทำงานเกี่ยวกับปัญหาที่ทราบแล้ว
ปัญหาสำหรับผู้ร่วมเขียนบทความรายใหม่
ผู้ร่วมพัฒนาใหม่ควรค้นหาแท็กต่อไปนี้เมื่อค้นหาโครงการที่จะร่วมพัฒนาในโค้ดเบสของ TensorFlow เป็นครั้งแรก เราขอแนะนำอย่างยิ่งให้ผู้ร่วมพัฒนาใหม่เริ่มจากโครงการที่มีหัวข้อ “ปัญหาแรกที่ดี” และ “ยินดีต้อนรับผู้ร่วมพัฒนา” ก่อน เพราะจะช่วยให้ผู้ร่วมพัฒนาคุ้นเคยกับขั้นตอนการทำงานร่วมกัน และช่วยให้นักพัฒนาหลักได้ทำความรู้จักกับผู้ร่วมพัฒนาด้วย
หากคุณสนใจที่จะจัดตั้งทีมเพื่อช่วยแก้ไขปัญหาขนาดใหญ่หรือพัฒนาฟีเจอร์ใหม่ โปรดส่งอีเมลไปที่ กลุ่ม developers@ และตรวจสอบรายการ RFC ปัจจุบันของเรา
การตรวจสอบโค้ด
การเพิ่มฟีเจอร์ใหม่ การแก้ไขข้อผิดพลาด และการเปลี่ยนแปลงอื่นใดในโค้ดจะต้องผ่านการตรวจสอบโค้ดก่อน
การตรวจสอบโค้ดที่ส่งเข้ามาในโปรเจ็กต์ผ่าน Pull Request เป็นส่วนประกอบที่สำคัญอย่างยิ่งในการพัฒนา TensorFlow เราสนับสนุนให้ทุกคนเริ่มตรวจสอบโค้ดที่ส่งโดยนักพัฒนาคนอื่นๆ โดยเฉพาะอย่างยิ่งหากฟีเจอร์นั้นเป็นสิ่งที่คุณมีแนวโน้มที่จะใช้งาน
ต่อไปนี้เป็นคำถามบางส่วนที่ควรพิจารณาในระหว่างกระบวนการตรวจสอบโค้ด:
- เราต้องการฟีเจอร์นี้ใน TensorFlow หรือไม่? มีโอกาสที่จะถูกนำไปใช้หรือไม่? ในฐานะผู้ใช้ TensorFlow คุณชอบการเปลี่ยนแปลงนี้และตั้งใจจะใช้มันหรือไม่? การเปลี่ยนแปลงนี้อยู่ในขอบเขตของ TensorFlow หรือไม่? ค่าใช้จ่ายในการบำรุงรักษาฟีเจอร์ใหม่จะคุ้มค่ากับประโยชน์ที่ได้รับหรือไม่?
- โค้ดสอดคล้องกับ API ของ TensorFlow หรือไม่? ฟังก์ชันสาธารณะ คลาส และพารามิเตอร์ต่างๆ มีชื่อที่เหมาะสมและออกแบบมาอย่างเข้าใจง่ายหรือไม่?
มีเอกสารประกอบหรือไม่? ฟังก์ชันสาธารณะ คลาส พารามิเตอร์ ประเภทการส่งคืน และแอตทริบิวต์ที่จัดเก็บทั้งหมดได้รับการตั้งชื่อตามหลักการของ TensorFlow และมีเอกสารอธิบายอย่างชัดเจนหรือไม่? ฟังก์ชันใหม่ได้รับการอธิบายในเอกสารของ TensorFlow และมีตัวอย่างประกอบทุกครั้งที่เป็นไปได้หรือไม่? เอกสารแสดงผลได้อย่างถูกต้องหรือไม่?
โค้ดนี้อ่านง่ายสำหรับมนุษย์หรือไม่? มีความซ้ำซ้อนน้อยหรือไม่? ควรปรับปรุงชื่อตัวแปรเพื่อให้ชัดเจนหรือสอดคล้องกันหรือไม่? ควรเพิ่มคำอธิบายประกอบหรือไม่? ควรลบคำอธิบายประกอบใดๆ ที่ไม่เป็นประโยชน์หรือไม่จำเป็นออกหรือไม่?
โค้ดนี้มีประสิทธิภาพหรือไม่? สามารถเขียนใหม่ให้ทำงานได้อย่างมีประสิทธิภาพมากขึ้นได้ง่ายๆ หรือไม่?
โค้ดนี้ สามารถใช้งานร่วมกับ TensorFlow เวอร์ชันก่อนหน้าได้ หรือไม่?
โค้ดใหม่นี้จะเพิ่ม การพึ่งพา ไลบรารีอื่นๆ อีกหรือไม่?
ทดสอบและปรับปรุงความครอบคลุมของการทดสอบ
การทดสอบหน่วยที่มีคุณภาพสูงเป็นหัวใจสำคัญของกระบวนการพัฒนา TensorFlow เพื่อจุดประสงค์นี้ เราใช้ Docker image ฟังก์ชันทดสอบได้รับการตั้งชื่ออย่างเหมาะสม และมีหน้าที่ตรวจสอบความถูกต้องของอัลกอริธึม รวมถึงตัวเลือกต่างๆ ของโค้ด
ฟีเจอร์ใหม่และการแก้ไขข้อผิดพลาดทั้งหมด ต้อง มีการทดสอบที่ครอบคลุมอย่างเพียงพอ เรายินดีรับการมีส่วนร่วมในการเพิ่มกรณีทดสอบใหม่หรือปรับปรุงการทดสอบที่มีอยู่ หากคุณพบว่าการทดสอบที่มีอยู่ของเราไม่สมบูรณ์ — แม้ว่าจะไม่ได้ทำให้เกิดข้อผิดพลาดในขณะนี้ก็ตาม — โปรดแจ้งปัญหาและส่งคำขอแก้ไข (pull request) หากเป็นไปได้
สำหรับรายละเอียดเฉพาะของขั้นตอนการทดสอบในแต่ละโปรเจ็กต์ TensorFlow โปรดดูไฟล์ README.md และ CONTRIBUTING.md ในที่เก็บโปรเจ็กต์บน GitHub
ประเด็นที่น่าเป็นห่วงเป็นพิเศษใน การทดสอบที่เพียงพอ ได้แก่ :
- มีการทดสอบ ฟังก์ชันและคลาสสาธารณะทุกตัว หรือไม่?
- มีการทดสอบ ชุดพารามิเตอร์ที่เหมาะสม ค่าของ พารามิเตอร์ ประเภทของค่า และการผสมผสานของค่าต่างๆ หรือไม่?
- การทดสอบเหล่านี้ตรวจสอบแล้วว่า โค้ดถูกต้อง และ ทำงานได้ตรงตามที่เอกสารระบุไว้ หรือไม่?
- หากเป็นการแก้ไขข้อบกพร่อง จะมี การทดสอบที่ไม่ทำให้เกิดการถดถอย รวมอยู่ด้วยหรือไม่
- การทดสอบ ผ่านการสร้างแบบต่อเนื่อง (Continuous Integration Build) หรือไม่?
- การทดสอบ ครอบคลุมโค้ดทุกบรรทัดหรือไม่? ถ้าไม่ การยกเว้นกรณีต่างๆ นั้นสมเหตุสมผลและชัดเจนหรือไม่?
หากคุณพบปัญหาใด ๆ โปรดพิจารณาให้ความช่วยเหลือแก่ผู้มีส่วนร่วมเพื่อให้เข้าใจปัญหาเหล่านั้นและแก้ไขปัญหาเหล่านั้นด้วย
ปรับปรุงข้อความแสดงข้อผิดพลาดหรือบันทึกข้อมูล
เรายินดีรับข้อเสนอแนะที่ช่วยปรับปรุงข้อความแสดงข้อผิดพลาดและการบันทึกข้อมูล
ขั้นตอนการทำงานด้านการมีส่วนร่วม
การร่วมพัฒนาโค้ด ไม่ว่าจะเป็นการแก้ไขข้อผิดพลาด การพัฒนาใหม่ หรือการปรับปรุงการทดสอบ ล้วนใช้เวิร์กโฟลว์ที่เน้น GitHub เป็นหลัก หากต้องการเข้าร่วมการพัฒนา TensorFlow ให้สร้างบัญชี GitHub ก่อน จากนั้น:
คัดลอก (Fork) repository ที่คุณวางแผนจะทำงานด้วย ไปที่หน้า repository ของโปรเจ็กต์แล้วใช้ปุ่ม Fork การทำ เช่นนี้จะสร้างสำเนาของ repository ภายใต้ชื่อผู้ใช้ของคุณ (สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการคัดลอก repository โปรดดู คู่มือนี้ )
โคลน repository ลงมายังระบบคอมพิวเตอร์ของคุณ
$ git clone git@github.com:your-user-name/project-name.gitสร้างสาขาใหม่เพื่อใช้เก็บงานของคุณ
$ git checkout -b new-branch-nameเริ่มเขียนโค้ดใหม่ของคุณ เขียนและรันการทดสอบ
บันทึกการเปลี่ยนแปลงของคุณ
$ git add -A$ git commit -m "commit message here"อัปโหลดการเปลี่ยนแปลงของคุณไปยังที่เก็บ GitHub ของคุณ
$ git push origin branch-nameเปิด Pull Request (PR) ไปที่ repository ต้นฉบับของโปรเจ็กต์บน GitHub จะมีข้อความเกี่ยวกับ branch ที่คุณเพิ่ง push ไป ถามว่าคุณต้องการเปิด pull request หรือไม่ ทำตามขั้นตอน เปรียบเทียบโค้ดระหว่าง repository และส่ง PR ระบบจะส่งอีเมลไปยัง committer คุณอาจต้องการพิจารณาส่งอีเมลไปยัง mailing list เพื่อให้มองเห็นได้ชัดเจนยิ่งขึ้น (สำหรับรายละเอียดเพิ่มเติม โปรดดู คู่มือ GitHub เกี่ยวกับ PR )
ผู้ดูแลระบบและผู้ร่วมพัฒนาท่านอื่นๆ จะ ตรวจสอบ Pull Request ของคุณ โปรดมีส่วนร่วมในการสนทนาและพยายาม ทำการเปลี่ยนแปลงตามที่ร้องขอ เมื่อ Pull Request ได้รับการอนุมัติแล้ว โค้ดจะถูกรวมเข้าด้วยกัน
ก่อนเริ่มทำงานในส่วนต่อไป โปรดตรวจสอบให้แน่ใจว่าที่เก็บข้อมูลในเครื่องของคุณเป็นเวอร์ชันล่าสุดแล้ว
ตั้งค่ารีโมตอัปสตรีม (คุณต้องทำขั้นตอนนี้เพียงครั้งเดียวต่อโปรเจกต์ ไม่จำเป็นต้องทำทุกครั้ง)
$ git remote add upstream git@github.com:tensorflow/project-repo-nameเปลี่ยนไปใช้ master branch ในเครื่อง
$ git checkout masterดึงการเปลี่ยนแปลงจากต้นทางลงมา
$ git pull upstream masterอัปโหลดการเปลี่ยนแปลงไปยังบัญชี GitHub ของคุณ (ไม่บังคับ แต่เป็นวิธีที่ดี)
$ git push origin masterหากคุณกำลังเริ่มต้นงานใหม่ ให้สร้างสาขาใหม่
$ git checkout -b branch-name
แหล่งข้อมูลเพิ่มเติมเกี่ยวกับ git และ GitHub:
รายการตรวจสอบสำหรับผู้มีส่วนร่วม
- โปรดอ่าน หลักเกณฑ์การส่งผลงาน
- โปรดอ่าน ข้อกำหนดและเงื่อนไขการปฏิบัติงาน
- โปรดตรวจสอบให้แน่ใจว่าคุณได้ลงนามใน ข้อตกลงใบอนุญาตผู้มีส่วนร่วม (CLA) แล้ว
- ตรวจสอบว่าการเปลี่ยนแปลงของคุณสอดคล้องกับ แนวทางที่กำหนด หรือไม่
- ตรวจสอบว่าการเปลี่ยนแปลงของคุณสอดคล้องกับ รูปแบบการเขียนโค้ดของ TensorFlow หรือไม่
- เรียกใช้การทดสอบหน่วย