“ มันทำงานเมื่อวานนี้ฉันสาบาน!” คุณจะทำอย่างไร [ปิด]


59

เมื่อคุณมาถึงในตอนเช้าคุณจะพบว่าซอฟต์แวร์ของคุณไม่ทำงานอีกต่อไปแม้ว่าจะเป็นตอนที่คุณออกจากตอนเย็นเมื่อวานนี้ก็ตาม

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


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

1
ดีที่ไม่ได้อยู่ในกองล้นจึงเป็นคำถามทั่วไปมากขึ้น ส่วนโทษเป็นบิตของเรื่องตลก :)
Nikko

28
@Nikko - มันไม่ทำงานเมื่อวานนี้เช่นกัน นั่นคือสิ่งที่เกิดขึ้นมากในการพัฒนาซอฟแวร์ :)
Joris Timmermans

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

18
มันเกี่ยวกับ DateTime.Now () ???
ราวุ ธ Positwinyu

คำตอบ:


96

ผู้ต้องสงสัยตามปกติคือ:

  • คุณคิดว่ามันทำงานเมื่อวานนี้ แต่หลังจากทำงานเต็มวันคุณตาบอดเกินไปที่จะรู้ว่ามันไม่ทำงาน

  • เช้านี้คุณไม่สามารถอ้างถึงสิ่งที่อยู่ในหน่วยความจำแคช IDE เมื่อวานนี้

  • เวิร์กสเตชันได้รีบูตเมื่อคืนที่ผ่านมาหรือการดำเนินการบำรุงรักษาทุกคืนเพื่อเคลียร์ไดเร็กทอรี / tmp

  • บางสิ่งมีการเปลี่ยนแปลงในฐานรหัส: ตรวจสอบว่ามีใครบางคน (อาจเป็นตัวคุณเอง) ยอมรับการเปลี่ยนแปลงระหว่างการคอมไพล์ครั้งล่าสุดของคุณเมื่อวานกับคอมไพล์ครั้งล่าสุดของวันนี้

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

  • มีการเปลี่ยนแปลงบางอย่างในสภาพแวดล้อมการทดสอบ: เวอร์ชันใหม่ของเครื่องเสมือน, stub ที่ได้รับการแก้ไข, การเปลี่ยนแปลงในเซิร์ฟเวอร์ฐานข้อมูลระยะไกล ...

  • บางสิ่งมีการเปลี่ยนแปลงในคอมไพล์เชน: การเปลี่ยนแปลงใน Makefiles, IDE เวอร์ชั่นใหม่, คอมไพเลอร์, ไลบรารีมาตรฐาน ...


82
คุณลืม "การแทรกแซงจากสวรรค์" และ "อนุภาคพลังงานสูงผ่านเซิร์ฟเวอร์และจัดเรียงบิตแบบสุ่ม" และการปะทุจากแสงอาทิตย์
Kheldar

17
คุณลืม "คุณกำลังใช้ <แทรกภาษาที่คุณชอบน้อยที่สุดที่นี่> ซึ่งไม่น่าเชื่อถืออย่างแน่นอน
กำหนดค่า

4
@Keldar - อย่าลืมสไปรต์ที่เป็นอันตราย gremlins และคณะ
5arx

5
@configurator: ที่ว่าทำไมคุณควรเสมอเขียนภาษาของคุณเอง ถาม Spolsky เกี่ยวกับวาซาบิ! ตรวจสอบว่า Atwood อยู่รอบ ๆ และวิ่งไป
Kheldar

13
ข้อผิดพลาดคลาสสิกอื่นคือการเปลี่ยนแปลงวันที่ นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งสำหรับวันที่ "จำกัด " (วันแรกหรือวันสุดท้ายของเดือน / สัปดาห์ที่ 29 กุมภาพันธ์ ฯลฯ )
Brann

49

1) ถ้ามันไม่ทำงานวันนี้มันก็ไม่ทำงานเหมือนเมื่อวาน

คุณคิดว่ามันใช้งานได้ แต่ก็ไม่เป็นเช่นนั้น

2) มีปัญหาและจะต้องได้รับการแก้ไข

อย่าคิดว่าใครเป็นผู้รับผิดชอบเรื่องนี้หรือกล่าวโทษผู้อื่น

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

เพื่อหลีกเลี่ยงสถานการณ์นี้คุณต้องทำการทดสอบและแก้ไขจุดบกพร่องที่เหมาะสม

กำหนด "ทำงาน" และทดสอบขอบเขตของรูทีนโค้ดของคุณ

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

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


7
ฉันต้องการให้สอง upvotes - หนึ่งสำหรับ "ถ้ามันไม่ทำงานวันนี้ก็ไม่ได้ทำงานเมื่อวานนี้" และสำหรับ "มีปัญหาและจะต้องแก้ไข" ทั้งสองเป็นแนวคิดหลักที่หลายคนลืมไป
MattBelanger

2
"ถ้ามันไม่ทำงานวันนี้มันก็ไม่ทำงานเหมือนเมื่อวาน" -> สิ่งนี้เกิดขึ้นกับฉันเมื่อวานนี้เมื่อทำการเข้ารหัสส่วนหน้าที่อาศัยคุกกี้ ทำได้ดีมากเมื่อตั้งค่าคุกกี้แล้ว พบว่ามันไม่ได้ถูกสร้างอย่างถูกต้องอีกต่อไปในวันถัดไปเมื่อมันหมดอายุและพยายามที่จะสร้างขึ้นใหม่
เกรแฮม

@Graham: ดูที่ "หากไม่มีอะไรเปลี่ยนแปลงระหว่างเมื่อวานและวันนี้ [... ] นั่นหมายความว่าคุณควรทดสอบรหัสของคุณให้ดีขึ้นก่อนที่จะระบุว่ามันใช้งานได้จริง" คุณต้องทดสอบโค้ดของคุณให้ดีขึ้นคิดถึงสิ่งที่ควรเกิดขึ้นคิดถึงสิ่งที่อาจเกิดขึ้น บางทีด้วยความเข้าใจที่ดีขึ้นของปัญหามันจะไม่เกิดขึ้น
Jose Faeti

สำหรับ 1): บางทีการเปลี่ยนแปลงที่เกิดขึ้นอาจอยู่ในห้องสมุดเสริม
phresnel

ไม่จริงอย่างเคร่งครัด ... : PI ทำให้แอปพลิเคชันแตกโดยไม่ตั้งใจโดยการดึงไฟล์แคชบางส่วนไปยังแอปพลิเคชันของฉันซึ่งเป็นวัตถุที่มีการเรียงลำดับผิดอย่างสมบูรณ์ แอพทำงานได้ดีและใช้งานได้ดีเมื่อฉันทำ git pull เพราะไฟล์แคชไม่ทำงานโปรแกรมปรับปรุงและต้องการวัตถุในรูปแบบอื่น คุณยังได้รับ upvote แม้ว่า;)
Laykes

26

การพยายามหาคนผ่านการตำหนินั้นไม่มีความผิดเพี้ยนและไม่สามารถแก้ปัญหาได้ อย่าทำมัน

หากบางสิ่งบางอย่างทำงานเมื่อวานนี้และไม่ได้ผลตอนนี้คุณอาจมีพฤติกรรมที่ไม่แน่นอน (เช่นสภาพการแข่งขัน) และการทำงานเมื่อวานนี้เป็นเพียงแค่โชคดีหรือมีอะไรบางอย่างเปลี่ยนไประหว่างนั้นและตอนนี้และคุณต้องค้นหาว่ามันเป็นอย่างไร คือ.

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

การใช้เครื่องมือวินิจฉัยที่เหมาะสม (ดีบักเกอร์, profiler, เครื่องมือวิเคราะห์เครือข่าย) สามารถสร้างความแตกต่างได้อย่างมาก


นอกจากนี้ยังอาจช่วยให้จดบันทึกเป็นลายลักษณ์อักษรในขณะที่วิเคราะห์ปัญหา
starblue

25

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

เมื่อเวลาผ่านไปฉันได้ตระหนักว่ามันเป็นไปได้ว่าในความเป็นจริงพิกซี่ไม่มีอะไรเกี่ยวข้องกับมันและอาจเป็น "เวลากลับบ้านของฉันที่จะดีพอ" งานสร้างครั้งสุดท้ายไม่ได้รับการทดสอบอย่างละเอียดและใส่ใจว่าบางทีมันสมควร .

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

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


1
นี่เป็นคำตอบที่ถ่อมตนและถ่อมตนซึ่งพวกเราหลายคนควรยอมรับ :) ฉันมักจะพูดคุยสถานการณ์เหล่านี้ถึง "เฮ้โมโมเฮ้แลร์รี่ฉันพยายามคิดและไม่มีอะไรเกิดขึ้น!" ในตอนท้ายของวัน. ฉันยังใช้วิธีการ "ใช้งานได้อย่างรวดเร็วเช็คอินและกลับบ้านก่อนที่คุณจะมีการปรับปรุง" ในตอนท้ายของวันเพื่อหลีกเลี่ยงสถานการณ์เหล่านี้
Jennifer S

3
ที่เดียวที่ฉันทำงานไม่มีใครทำโค้ดในตอนเช้า ปรากฎว่าเมื่อเราบูทเครื่อง Skype ของเราจะคว้าพอร์ตแอปพลิเคชันที่ต้องการใช้เมื่อมันเริ่มขึ้นครั้งแรก
thepeer

บางทีผีตัวน้อยไม่มีอะไรมากไปกว่าตัวแปรที่ไม่มีการกำหนดค่าเริ่มต้น? บางครั้งรุ่นดีบักสามารถทำงานได้เมื่อรุ่นที่วางจำหน่ายล้มเหลว (เกิดปัญหาหรือทำงานแตกต่างกัน)
Jared Updike

20

ใช้การควบคุมเวอร์ชัน ทำ diff หรือใช้ฟังก์ชันการตำหนิ VCS ของคุณ:

  • diff: ทุก VCS แสดงความแตกต่างของ, uhm, เวอร์ชั่นที่แตกต่าง
  • blame: ตัวอย่างเช่น git แสดงให้คุณเห็นทีละบรรทัดที่มีการเปลี่ยนแปลงอะไร

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

นอกจากนั้นให้คอมไพล์ทุกอย่างอีกครั้งตรวจสอบให้แน่ใจว่าได้คอมไพล์ไลบรารีเสริมอีกครั้ง

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

หากไม่มีการเปลี่ยนแปลงเลยถึงเวลาที่จะดูว่ามีอะไรเปลี่ยนแปลงในระบบ เช่นล่าสุดคอมพิวเตอร์ Mac OS ได้อัปเดตเป็น Apache เวอร์ชันใหม่ซึ่งทำให้การกำหนดค่าบางอย่างไม่ถูกต้อง


1
Diff Ftw นั่นคือสิ่งที่ฉันทำอยู่เสมอ
Aditya P

2
@AdityaGameProgrammer: ฉันใช้มันหลายครั้งต่อวันเพื่อดูว่าฉันทำงานอะไรเมื่อวานนี้หรือก่อนที่จะหยุดพัก :)
phresnel

ไม่มีการควบคุมเวอร์ชัน! นั่นเป็นโอกาสที่น่ากลัวอย่างแท้จริง
thepeer

+1 ที่บอกฉันเกี่ยวกับgit blame... ไม่รู้ว่ามันมีอยู่จริง แต่มันคือ FCKING AWESOME
Radu Murzea

11

นี่คือตัวอย่างชีวิตจริงของรหัสที่ "ทำงานเมื่อวาน" และไม่ใช่วันนี้ ... มันมาจากเดือนก่อนหน้านี้

แอปพลิเคชันที่เป็นปัญหาจะดึงข้อมูลจากฐานข้อมูลตามวันที่และพฤติกรรมเริ่มต้นคือการรับข้อมูลสำหรับวันปัจจุบัน สิ่งนี้ทำงานได้ดีในวันที่ 8 สิงหาคม แต่ล้มเหลวในวันที่ 9 มันไม่ได้ถูกทดสอบเร็วกว่านี้ มันจะทำงานด้วยในวันที่ 9 กันยายนและวันที่ 10 ตุลาคม ...

อีกประเด็นคือเราอยู่ในสหราชอาณาจักรฐานข้อมูลที่สงสัยอยู่ในสหรัฐอเมริกา ...

ดังนั้นคำตอบสำหรับคำถามของคุณเกี่ยวกับสิ่งที่ต้องตรวจสอบครั้งแรกคือการตรวจสอบอีกครั้งว่าคุณจัดรูปแบบวันที่ของคุณอย่างไรเพราะถ้าคุณรวมฟิลด์วันและเดือนเข้าด้วยกันมันจะทำงานได้อย่างสมบูรณ์ แต่เพียง 1 วันต่อเดือน :-)


5

แก้ไขข้อบกพร่อง (ตามปกติคุณทำได้) ถ้าคุณพบว่าใครเป็นคนส่งอีเมลสุภาพให้พวกเขารู้ว่าเกิดอะไรขึ้น

coder ทุกคนทำผิดพลาดและถ้าคุณเริ่มโทษมันจะย้อนกลับมาอย่างจริงจังในครั้งต่อไปที่คุณทำสิ่งเดียวกัน (อาจเป็นไปได้ว่าข้อผิดพลาดนี้เป็นของคุณ)

เฉพาะในกรณีที่คุณสงสัยว่าพวกเขาเป็นคนที่ไม่ระมัดระวังอย่างยิ่งถ้าคุณทำเรื่องใหญ่ ๆ


5

... คุณรันการทดสอบการถดถอยและมุ่งเน้นไปที่สิ่งที่ล้มเหลว

จริงๆแล้วสิ่งที่คุณลืมทำเมื่อวานนี้ก่อนออกเดินทางจะเกิดขึ้น

คุณไม่มีอะไรเลยเหรอ? โอเค .. คุณพูดว่าอะไร โทษ ? อืม ... นั่นอาจจะใช้ได้


5

สิ่งแรกที่ต้องทำเมื่อบางสิ่งบางอย่างหยุดทำงานคือถามตัวเอง - มีอะไรที่แตกต่างกันอย่างไร มีการเปลี่ยนแปลงอย่างไร

เมื่อบางสิ่งบางอย่างทำงานเมื่อคืนนี้ แต่ล้มเหลวเมื่อเช้านี้สิ่งหนึ่งที่เห็นได้ชัดคือการเปลี่ยนแปลงคือ - วันที่และเวลา :)

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

หากล้มเหลวคุณควรติดตามคำแนะนำที่ยอดเยี่ยมอื่น ๆ ที่ให้ไว้ที่นี่อย่างแน่นอน


2
ข้อผิดพลาดที่เกี่ยวข้องกับลักษณะเวลาเช่นการเปลี่ยนเป็น / ออกจากการบันทึกเวลากลางวันเป็นรายการโปรด (ในเดือนตุลาคมและมีนาคม) ...
Julia Hayward


4

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

จากนั้นไปคุยกับเขาหรือเธอ


4

มีสาเหตุที่เป็นไปได้สองประการที่ทำให้รหัสของคุณล้มเหลวในวันนี้ แต่ทำงานเมื่อวานนี้

ดูข้อมูล

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

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

ดูสิ่งที่เปลี่ยนไป

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


3

สับไบนารี

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

หากรหัสของคุณถูกห่อหุ้มอย่างดีนี่เป็นเครื่องมือที่ช่วยให้คุณประหยัดเวลาและความเครียด

เมื่อคุณพบรหัสผิดก็มักจะแยกข้อผิดพลาดในหน้าทดสอบของตัวเอง


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

ใช่แน่ใจว่าคุณได้สำรอง!
chim

3

และแน่นอนสิ่งที่สามารถทำได้เพื่อหลีกเลี่ยงการอยู่ในสถานการณ์เช่นนี้?

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

ในทางปฏิบัติทีมส่วนใหญ่ที่ใช้ CI ใช้เซิร์ฟเวอร์ CI (ดู: รายการของ Wikipedia ) โดยปกติแล้ว CI Server จะตั้งค่าเพื่อตรวจสอบที่เก็บ SCM และเริ่มสร้างเมื่อเห็นการเปลี่ยนแปลง เมื่อการสร้างเสร็จสมบูรณ์แล้วมันจะเรียกใช้ชุดการทดสอบอัตโนมัติและโพสต์ผลลัพธ์ผ่านอีเมลและ / หรือหน้าเว็บของการสร้างและการทดสอบพร้อมกับการเปลี่ยนแปลงที่ทำให้เกิดการสร้าง หวังว่าเมื่อบางสิ่งบางอย่างทำลายการสร้างหรือการทดสอบคุณมีการเปลี่ยนแปลงเพียงเล็กน้อยที่จะตรวจสอบดังนั้นจึงได้รับการแก้ไขเร็วขึ้น

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

[ฉันควรทำอย่างไรกับสิ่งที่แตกสลาย]

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


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

3

ปฏิกิริยาตามธรรมชาติของฉันมักจะตำหนิผู้อื่น แต่เมื่อเวลาผ่านไปฉันก็ตระหนักว่ามันมักจะเป็นฉันที่ผิด นอกจากความคิดเห็นที่ยอดเยี่ยมทั้งหมดข้างต้นแล้วสิ่งสำคัญคือคุณต้องบันทึกด้วยตัวคุณเองว่าอะไรคือเหตุผลสุดท้าย ไม่สำคัญว่าคุณจะใช้ Wiki ซึ่งแบ่งปันกับสมาชิกทีมคนอื่น Twiki ส่วนตัว Evernote สมุดบันทึกหรือหน่วยความจำที่ดี สิ่งสำคัญในขณะที่คุณหาคำตอบ (และต้องการกลับไปทำงาน!) คือการบันทึกเหตุผล


2

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

หากคำอธิบายเพียงอย่างเดียวของปัญหาคือ "มันไม่ทำงาน" สิ่งแรกที่คุณต้องทำคือรวบรวมข้อมูลเพิ่มเติมเกี่ยวกับอาการของปัญหา

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

จากนั้นคุณเริ่มวินิจฉัยพวกเขาออก


2

นั่นคือสิ่งที่มักจะเกิดขึ้นเมื่อฉันหยุดพักผ่อน :-)

ฉันจะบอกพวกเขาก่อน:

  • ฉันจะตรวจสอบมันเพื่อดูว่ามีอะไรผิดปกติและอะไรจะเป็นราก

  • ฉันจะแตะต้องฐานใน 30-60 นาทีเมื่อฉันมีโอกาสเห็นสิ่งที่เกิดขึ้น

หลังจากเวลานั้นฉันสามารถประเมินสิ่งที่อาจเกิดขึ้นได้และใช้เวลานานเท่าใดในการแก้ไขหากยังไม่ได้รับการแก้ไขและหากมีข้อมูลที่เราอาจสูญหายไป (ถ้าฉันมีการสำรองข้อมูลที่ดีดังนั้นจึงไม่เกิดขึ้น หวังว่า).


ในส่วนของการตำหนิ:

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

  • ถ้าเขาตั้งใจทำบางสิ่งที่ฉันบอกเขาไม่ให้ (เช่นให้รหัสผ่านรูทของเซิร์ฟเวอร์ที่ใช้งานจริงให้กับคนใหม่และบอกให้เขาทำการแก้ไขโดยตรงโดยไม่ได้ดูแล) (ใช่นั่นเกิดขึ้นแล้ว ... ) จากนั้น ต้องพูดถึงมัน


2

หากวิธีการติดตามบั๊กตามปกติของคุณไม่ทำงานและทุกอย่างเป็นระเบียบทั้งหมดมันยอดเยี่ยมมากที่มีการสำรองข้อมูลที่คุณสามารถกู้คืนได้อย่างง่ายดาย

นี่คือสิ่งที่ฉันเรียกใช้ในพื้นที่โดยอัตโนมัติทุก ๆ ชั่วโมงตั้งแต่ 8 โมงเช้าถึงหกโมงเย็น:

rdiff-backup /path/to/mystuff /path/to/mybackup

ง่ายใช่มั้ย

หากคุณจำเป็นต้องกู้คืนสิ่งใดให้ใช้

rdiff-backup -r 24h /path/to/mybackup/specific/dir /tmp/restored

การสำรองข้อมูล rdiffเก็บเฉพาะไฟล์ที่แตกต่าง คุณสามารถใช้ rdiff-backup บน Linux, mac และ win

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

ตอนนี้ฉันจะไม่แนะนำวิธีนี้เป็นวิธีแก้ไขข้อผิดพลาดปกติ แต่ถ้าทุกอย่างอื่นล้มเหลวมันเป็นทางเลือก


3
การควบคุมเวอร์ชันง่ายขึ้น
thepeer

@thepeer: ตกลงกันอย่างแน่นอน อย่างไรก็ตามมีสิ่งต่าง ๆ ที่ต้านทานการควบคุมแหล่ง (โดยเฉพาะอย่างยิ่งในกำหนดการไมโครยอมรับ) เช่นไฟล์ไบนารีขนาดใหญ่ ฉันมีความสุขที่ฉันสามารถหลีกเลี่ยงโครงการส่วนใหญ่ได้
sehe

@thepeer: ฉันไม่คิดว่าจะมีใครคิดว่านี่เป็นอีกทางเลือกหนึ่งในการควบคุมเวอร์ชัน นั่นเป็นความคิดของฉันเกี่ยวกับความวุ่นวายที่จัดขึ้น :) ด้วยวิธีนี้คุณมีสำเนาของเนื้อหาเหมือนเมื่อวาน ไม่ว่าใครจะทำอะไรกับระบบควบคุมเวอร์ชัน ความมุ่งมั่นครั้งล่าสุดของคุณอาจมากกว่า 2 วันที่ผ่านมา บางโครงการมีไฟล์บางไฟล์ที่ไม่สนใจจากการควบคุมเวอร์ชัน
olafure

@sehe: ด้วยคอมไพล์ที่ฉันใช้อยู่ในปัจจุบันคุณมี repo ส่วนตัวของคุณเองดังนั้นจึงไม่มีข้อแก้ตัวที่จะไม่กระทำในทุกขั้นตอน
thepeer

@olafure: ระบบควบคุมเวอร์ชันที่เหมาะสมใด ๆ ควรอนุญาตให้คุณเช็คเอาต์ / โคลนสถานะสมบูรณ์ของระบบ ณ จุดใดก็ตาม
thepeer

2

ข้อผิดพลาดอาจมีอยู่แล้ว แต่ถูกซ่อนไว้โดยปัจจัยภายนอกหรือปัญหาของระบบที่ลึก

เรื่องนี้เกิดขึ้นกับฉัน ข้อผิดพลาดที่พัฒนาระหว่าง 2 บิวด์ของโครงการของเรา แท้จริงการเปลี่ยนแปลงเพียงอย่างเดียวที่เราทำคือการอัปเดตเป็นงานสร้างล่าสุดของห้องสมุดพื้นฐาน

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

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


1

มันทำงานเมื่อวานนี้เนื่องจากมีการใช้อย่างถูกต้อง

คุณพบว่าคนอื่นใช้สิ่งต่าง ๆ ในลักษณะที่ไม่คิดว่าจะเป็นวิธีที่ดีในการทำสิ่งต่าง ๆ

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

การสำรองข้อมูล!


-2

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.