5 ขั้นตอนสู่อัตโนมัติงานในสายซอฟต์แวร์

Taskee และประสิทธิภาพ
3 เวลาที่ใช้ในการอ่าน
161 การดู
0
Alena Shelyakina profile icon
Alena Shelyakina

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

ประเด็นสำคัญ

ไอคอนประเด็นสำคัญ

การ ใช้แนวทางที่เป็นระบบในการเลือก และนำระบบอัตโนมัติมาใช้เป็นสิ่งสำคัญ

ระบบอัตโนมัติช่วยปลดปล่อยเวลา สำหรับงานเชิงสร้างสรรค์และ ปรับปรุงคุณภาพ

การ บำรุงรักษา และ การปรับปรุง อย่างต่อเนื่องของระบบอัตโนมัติช่วยประกันความสำเร็จในระยะยาว

ทำไมต้องใช้ระบบอัตโนมัติ?

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

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

1. ระบุงานประจำ

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

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

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

2. จัดลำดับความสำคัญของงาน

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

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

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

3. เครื่องมือ

การเลือกเครื่องมือขึ้นอยู่กับประเภทของงาน เทคโนโลยีสแต็ก และระดับความซับซ้อนของระบบอัตโนมัติที่ต้องการ หมวดหมู่หลักและตัวเลือกตัวแทน:

  • ภาษาสคริปต์: Python, Bash, PowerShell อเนกประสงค์และใช้ได้กับงานระบบอัตโนมัติที่หลากหลาย — การประมวลผลไฟล์ การโต้ตอบกับ API การแยกวิเคราะห์ล็อก การสร้างโค้ด และการจัดการข้อมูล
  • ระบบ CI/CD: Jenkins, GitLab CI/CD, GitHub Actions, CircleCI แพลตฟอร์มเหล่านี้เป็นมาตรฐานสำหรับการทำให้ไปป์ไลน์การบิลด์ การทดสอบ และการปรับใช้เป็นอัตโนมัติที่ทริกเกอร์โดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงในที่เก็บ
  • เครื่องมือจัดการการกำหนดค่า: Ansible, Chef, Puppet ใช้สำหรับการทำให้การตั้งค่าเซิร์ฟเวอร์และการปรับใช้แอปพลิเคชันเป็นอัตโนมัติ ประกันความสอดคล้องระหว่างสภาพแวดล้อมการพัฒนาและการผลิต
  • เครื่องมือทดสอบ: Selenium (ทดสอบเว็บ), JUnit/NUnit (ทดสอบยูนิต), Postman (ทดสอบ API) การทดสอบอัตโนมัติช่วยลดเวลาที่ใช้ในการตรวจสอบฟังก์ชันและการทดสอบการถดถอย — หนึ่งในหมวดหมู่ระบบอัตโนมัติที่มี ROI สูงสุดในการพัฒนาซอฟต์แวร์
  • เครื่องมือ linting และจัดรูปแบบโค้ด: ESLint, Prettier, Black เครื่องมือเหล่านี้บังคับใช้มาตรฐานโค้ดโดยอัตโนมัติ ขจัดการแก้ไขสไตล์ด้วยตนเองและภาระงานการตรวจสอบที่เกี่ยวข้อง
  • เครื่องจัดตารางเวลางาน: Cron (Linux), Task Scheduler (Windows) ช่วยให้สามารถเรียกใช้สคริปต์และโปรแกรมตามตารางเวลาที่กำหนดโดยไม่ต้องทริกเกอร์ด้วยตนเอง

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

4. นำระบบอัตโนมัติมาใช้

การดำเนินการเป็นไปตามความก้าวหน้าที่มีโครงสร้าง: ต้นแบบ ทดสอบ บูรณาการ บันทึก ฝึกอบรม

  1. สร้างโซลูชันขั้นต่ำที่ใช้งานได้: สร้างโซลูชันที่ดำเนินการเฉพาะฟังก์ชันที่จำเป็น — สคริปต์พื้นฐานสำหรับระบบอัตโนมัติแบบสคริปต์ ไปป์ไลน์พื้นฐานสำหรับ CI/CD การจำกัดขอบเขตในขั้นตอนนี้ป้องกันการออกแบบมากเกินไปที่ทำให้การปรับใช้ล่าช้า
  2. ทดสอบอย่างละเอียด: ก่อนที่จะรวมเข้ากับกระบวนการทำงานหลัก ตรวจสอบการทำงานที่ถูกต้องในหลายสถานการณ์ การเปลี่ยนแปลงอินพุต และกรณีขอบ ปัญหาที่ระบุในขั้นตอนนี้ถูกกว่ามากในการแก้ไขกว่าปัญหาที่ค้นพบหลังการรวม
  3. รวมเข้ากับกระบวนการทำงาน: เพิ่มสคริปต์ในการควบคุมเวอร์ชันและประกันการเข้าถึงสำหรับสมาชิกในทีมที่เกี่ยวข้องทั้งหมด สำหรับไปป์ไลน์ CI/CD ยืนยันการรวมกับที่เก็บและตรวจสอบเงื่อนไขทริกเกอร์
  4. บันทึก: บันทึกวิธีการทำงานของกระบวนการอัตโนมัติ พารามิเตอร์ที่ยอมรับ ผลลัพธ์ที่ผลิต และวิธีการบำรุงรักษา คุณภาพของเอกสารส่งผลโดยตรงต่อภาระการบำรุงรักษาและเวลาในการต้อนรับสำหรับสมาชิกในทีมใหม่
  5. ฝึกอบรมทีม: ประกันว่าสมาชิกในทีมทุกคนรู้วิธีใช้เครื่องมือหรือกระบวนการอัตโนมัติใหม่ผ่านเซสชั่นสั้นๆ หรือคำแนะนำที่เขียนเป็นขั้นตอน ความกว้างของการยอมรับกำหนดสัดส่วนของการประหยัดเวลาที่อาจเกิดขึ้นซึ่งได้รับการตระหนักจริง

การดำเนินการครั้งแรกแทบไม่สมบูรณ์แบบ การวนซ้ำเป็นที่คาดหวังและควรวางแผนมากกว่าที่จะถือเป็นความล้มเหลว

5. บำรุงรักษา

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

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

ข้อเท็จจริงที่น่าสนใจ ไอคอนข้อเท็จจริงที่น่าสนใจ

ในปี 1947 Grace Hopper พัฒนาคอมไพเลอร์ตัวแรก — โปรแกรมที่แปลโค้ดระดับสูงเป็นภาษาระดับล่างโดยอัตโนมัติ นี่เป็นหนึ่งในระบบอัตโนมัติพื้นฐานในการพัฒนาซอฟต์แวร์ ทำให้กระบวนการเขียนโปรแกรมง่ายขึ้นอย่างมากและสร้างพื้นฐานเชิงแนวคิดสำหรับเครื่องมือพัฒนาอัตโนมัติที่ตามมา

บทความที่เกี่ยวข้อง:

สำหรับแนวทางวิธีการ Agile สำหรับการจัดการโครงการและทีม อ่าน การจัดการโครงการ Agile: การจัดการโครงการที่มีประสิทธิภาพ

สำหรับกรอบที่รวมแนวทางการวางแผน Agile และ Waterfall อ่าน การจัดการโครงการแบบไฮบริด: การรวม Agile และ Waterfall เพื่อความสำเร็จ

สำหรับการประสานงานทีมระยะไกลและการจัดการกระบวนการทำงานแบบเรียลไทม์ อ่าน การจัดการการทำงานระยะไกลแบบเรียลไทม์

บทสรุป

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

การอ่านที่แนะนำ ไอคอนการอ่านที่แนะนำ
DevOps และการเปลี่ยนแปลง IT

"The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win"

การบรรยายเชิงเรื่องเล่าของวิธีที่หลักการ DevOps และระบบอัตโนมัติเปลี่ยนการดำเนินงาน IT และการส่งมอบซอฟต์แวร์ในบริบทองค์กรที่สมจริง

หนังสือเกี่ยวกับการเร่งการเปิดตัวผลิตภัณฑ์

"Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation"

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

หนังสือเกี่ยวกับระบบอัตโนมัติในสาขาต่างๆ

"Automate This: How Algorithms Came to Rule Our World"

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

0 ความคิดเห็น
ความคิดเห็นของคุณ
to
รีเซ็ต
แสดงความคิดเห็น

ใส่ความเห็น

อ่านเพิ่มเติม

ดูโพสต์ทั้งหมด
scroll to up
Back to menu
Back to menu
สำหรับทีม
อุตสาหกรรม
ประเภทบริษัท
การบริหารโครงการ
ติดตามเวลาได้อย่างง่ายดาย ทำงานร่วมกัน และจัดการโครงการ – ทั้งหมดในที่ทำงานเดียว
การพัฒนาผลิตภัณฑ์
ทำให้การจัดการงานง่ายขึ้น ติดตามความคืบหน้า และรักษาการซิงค์ของทีมคุณ
ทีม IT
วางแผน ติดตาม และทำงานร่วมกันได้ง่าย
ทีม ทรัพยากรมนุษย์
จัดการการสรรหา การรับพนักงานใหม่ และการพัฒนาพนักงานได้อย่างง่ายดาย
ทีมการเงิน
จัดเก็บไฟล์ จัดการงาน และดูแลขั้นตอนการทำงานทางการเงิน – โดยไม่มีความวุ่นวายของเครื่องมือที่กระจัดกระจาย
ทีมการตลาด
วางแผน ทำงานร่วมกัน และดำเนินแคมเปญได้อย่างง่ายดายด้วยพื้นที่ทำงานส่วนกลางสำหรับทีมการตลาดของคุณ
ทีมกฎหมาย
จัดเก็บเอกสารทางกฎหมาย กำหนดเวลา และทีมของคุณไว้ในพื้นที่ทำงานที่ปลอดภัย
ทีมออกแบบ
ลดความยุ่งเหยิง เพิ่มความคิดสร้างสรรค์: กระบวนการออกแบบที่ง่ายขึ้น
วิศวกรรม
จากการติดตามการแก้ไขข้อบกพร่องไปจนถึงการวางแผนสปรินต์ รักษาการไหลของงานให้เป็นระเบียบ
ดูโซลูชันทั้งหมด
ทีมบริหาร
ดูว่า Taskee จัดโครงสร้างงานของคุณและช่วยให้ทีมของคุณมีสมาธิได้อย่างไร – โดยไม่มีความวุ่นวายหรือภาระงานที่มากเกินไป
อุตสาหกรรมเทคโนโลยี
การจัดการงานควรส่งเสริมความก้าวหน้าของคุณ ไม่ใช่ทำให้ช้าลง
อุตสาหกรรมสื่อและบันเทิง
จากการพัฒนาถึงการเปิดตัว — เรียนรู้วิธีที่ Taskee ช่วยให้การจัดการโครงการสื่อของคุณง่ายขึ้น
อุตสาหกรรมการศึกษา
ทำให้งานง่ายขึ้น จัดการโครงการ และส่งเสริมการสื่อสารที่ราบรื่นเพื่อผลลัพธ์ที่ดีขึ้นของนักเรียน
การดูแลสุขภาพ
สนับสนุนทีมดูแลของคุณด้วยเครื่องมือที่ไม่เป็นอุปสรรค
การผลิต
ติดตามทุกส่วนที่เคลื่อนไหว
บริการทางกฎหมาย
ปรับเปลี่ยนกระบวนการทางกฎหมายของคุณให้มีประสิทธิภาพ รักษาความปลอดภัยของข้อมูล และเพิ่มประสิทธิภาพของทีม
การปรึกษา
รักษาทุกลูกค้า กำหนดเวลา และผลงานให้สอดคล้องกัน
สินค้าอุปโภคบริโภค
ซิงค์ซัพพลายเชนของคุณโดยไม่ต้องเหนื่อย
ดูโซลูชันทั้งหมด
ธุรกิจขนาดเล็กและขนาดกลาง
กำลังดำเนินธุรกิจอยู่ใช่ไหม? Taskee ช่วยคุณจัดระเบียบคำสั่งซื้อ กำหนดเวลา และการประสานงานทีมได้อย่างง่ายดาย
ทีมระยะไกล
ระยะทางไม่จำเป็นต้องหมายถึงการขาดการเชื่อมต่อ รักษาความสอดคล้องของทีมคุณ
สตาร์ทอัพ
จัดระเบียบ มีสมาธิ และคล่องตัวสำหรับสิ่งที่จะเกิดขึ้นในอนาคต
เอเจนซี่
มั่นใจว่าคุณส่งมอบงานคุณภาพสูงได้ตรงเวลา ทุกครั้ง
ฟรีแลนซ์
ติดตามงาน ทำตามกำหนดเวลา และทำให้ลูกค้าพอใจ
องค์กรไม่แสวงหาผลกำไร
ทำให้กระบวนการทำงานของคุณง่ายขึ้น เข้าถึงผู้คนมากขึ้น และมุ่งเน้นไปที่ภารกิจของคุณ
ผลิตภาพส่วนบุคคล
ใช้ประโยชน์จากการจัดการงานอย่างชาญฉลาดเพื่อเพิ่มผลผลิตให้สูงสุด