วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

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

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

7
มี "ค่าเวลา" คงที่หรือไม่?
สำหรับบางระบบจะใช้ค่าเวลา 9999-12-31 เป็น "จุดสิ้นสุดเวลา" เป็นเวลาสิ้นสุดของเวลาที่คอมพิวเตอร์สามารถคำนวณได้ แต่ถ้ามันเปลี่ยนไปล่ะ? การกำหนดเวลานี้เป็นตัวแปรบิวอินจะดีกว่าหรือไม่ ใน C และภาษาการเขียนโปรแกรมอื่น ๆ มักจะมีตัวแปรเช่นMAX_INTหรือคล้ายกันเพื่อให้ได้ค่ามากที่สุดที่เป็นจำนวนเต็ม เหตุใดจึงไม่มีฟังก์ชั่นที่คล้ายกันสำหรับMAX_TIMEเช่นตั้งค่าตัวแปรเป็น "หมดเวลา" ซึ่งสำหรับหลาย ๆ ระบบมักจะเป็น 9999-12-31 เพื่อหลีกเลี่ยงปัญหาการเข้ารหัสผิดปี (9999) ระบบเหล่านี้สามารถแนะนำตัวแปรสำหรับ "หมดเวลา" หรือไม่? ** ตัวอย่างจริง ** End of validity date: 31/12/9999.(เอกสารอย่างเป็นทางการมีการระบุไว้เช่นนี้) Blogger ต้องการเขียนหน้าเว็บที่อยู่ด้านบนสุดเสมอหน้าต้อนรับ ดังนั้นจึงมีการกำหนดวันที่ในอนาคตให้มากที่สุด: 3000? ใช่หน้าต้อนรับที่คุณกำลังเผชิญถูกโพสต์เมื่อวันที่ 1 มกราคม 3000 ดังนั้นหน้านี้จะถูกเก็บไว้ที่ด้านบนของบล็อกตลอดไป =) มันโพสต์จริง ๆ แล้วในวันที่ 31 สิงหาคม 2550

3
วิธีการจัดการ 2 DAO วิธีในการทำธุรกรรมเดียว?
ในการสัมภาษณ์มีคนถามฉัน: เราจะจัดการวิธีการทำธุรกรรม / dao 2 วิธีในการทำธุรกรรมเดียวได้อย่างไร ความสามารถที่ต้องการ: หากทุกคนล้มเหลวเราจำเป็นต้องย้อนกลับทั้งสองวิธี ทั้งสองวิธีสามารถเรียกแยกแนบกับธุรกรรมเดียว การจัดการควรอยู่ในชั้น DAO ไม่ใช่ในชั้นบริการ ฉันคิดว่า: คำถามเกี่ยวข้องกับการจัดการธุรกรรมในฤดูใบไม้ผลิ

2
การออกแบบ API ไลบรารี C ++
ฉันกำลังมองหาแหล่งข้อมูลที่ดีสำหรับการเรียนรู้เกี่ยวกับการออกแบบ API ที่ดีสำหรับไลบรารี C ++, การดูออบเจกต์ร่วม / dll เป็นต้นมีทรัพยากรมากมายในการเขียน API ที่ดี, คลาสที่ดี, เทมเพลตและอื่น ๆ ในระดับซอร์ส วางสิ่งต่าง ๆ เข้าด้วยกันใน libs และ executables ที่ใช้ร่วมกัน หนังสือเช่นการออกแบบซอฟต์แวร์ C ++ ขนาดใหญ่โดย John Lakos มีความน่าสนใจ แต่ล้าสมัยอย่างมาก สิ่งที่ฉันกำลังมองหาคือคำแนะนำเช่นในการจัดการแม่แบบ ด้วยเทมเพลตใน API ของฉันฉันมักจะจบลงด้วยรหัสห้องสมุดในแฟ้มที่ปฏิบัติการได้ของฉัน (หรือไลบรารีอื่น ๆ ) ดังนั้นถ้าฉันแก้ไขข้อบกพร่องที่นั่นฉันไม่สามารถเปิดไลบรารีใหม่ได้ แต่ต้องคอมไพล์ใหม่และแจกจ่ายลูกค้าทั้งหมดของรหัสนั้น (และใช่ฉันรู้วิธีแก้ปัญหาบางอย่างเช่นพยายามสร้างอินสแตนซ์ที่พบบ่อยที่สุดในห้องสมุดเป็นต้น) ฉันกำลังมองหาคำเตือนและข้อควรระวังอื่น ๆ เพื่อรักษาความเข้ากันได้ของไบนารีในขณะที่ทำงานกับไลบรารี C ++ มีเว็บไซต์หรือหนังสือที่ดีในเรื่องดังกล่าวหรือไม่?

2
การฉีดพึ่งพากับโซลูชัน n-tier Entity Framework
ขณะนี้ฉันกำลังออกแบบโซลูชัน n-tier ซึ่งใช้ Entity Framework 5 (.net 4) เป็นกลยุทธ์การเข้าถึงข้อมูล แต่ฉันกังวลเกี่ยวกับวิธีรวมการฉีดพึ่งพาเพื่อให้สามารถทดสอบ / ยืดหยุ่นได้ เค้าโครงโซลูชันปัจจุบันของฉันมีดังนี้ (โซลูชันของฉันชื่อ Alcatraz): Alcatraz.WebUI : การ asp.net เว็บฟอร์มโครงการส่วนติดต่อผู้ใช้ปลายด้านหน้าอ้างอิงโครงการAlcatraz.BusinessและAlcatraz.Data.Models Alcatraz.Business : โครงการห้องสมุดระดับมีตรรกะทางธุรกิจโครงการอ้างอิงAlcatraz.Data.Access , Alcatraz.Data.Models Alcatraz.Data.Access : ห้องสมุดชั้นโครงการบ้านAlcatrazModel.edmxและAlcatrazEntitiesDbContext อ้างอิงโครงการAlcatraz.Data.Models Alcatraz.Data.Models : โครงการห้องสมุดคลาสมี POCO สำหรับรุ่น Alcatraz ไม่มีการอ้างอิง วิสัยทัศน์ของฉันสำหรับวิธีการแก้ปัญหานี้จะทำงานเป็น web-UI จะยกตัวอย่างพื้นที่เก็บข้อมูลภายในห้องสมุดธุรกิจที่เก็บนี้จะมีการพึ่งพา (ผ่านตัวสร้าง) ของสตริงการเชื่อมต่อ (ไม่ใช่AlcatrazEntitiesอินสแตนซ์) web-ui จะรู้จักสตริงการเชื่อมต่อฐานข้อมูล แต่ไม่ใช่ว่าเป็นสตริงการเชื่อมต่อของเฟรมเวิร์กเอนทิตี ในโครงการธุรกิจ: public class InmateRepository : …

5
ฉันจะสร้าง jtree ที่ไม่แน่นอนและหลากหลายได้อย่างไรกับโหนดหมวดหมู่ตามอำเภอใจ / ทั่วไป?
โปรดทราบ: ฉันไม่ต้องการความช่วยเหลือในการเขียนโปรแกรมที่นี่ฉันเปิดProgrammersเพื่อเหตุผล ฉันต้องการพัฒนาทักษะการวางแผนโปรแกรม / การเขียนของฉันไม่ใช่แค่เข้าใจ Javaเท่านั้น ฉันพยายามที่จะคิดออกว่าจะทำให้ต้นไม้ที่มีระบบหมวดหมู่โดยพลการบนพื้นฐานของทักษะที่ระบุไว้สำหรับเกมสวมบทบาทนี้ที่นี่ ความพยายามครั้งก่อนของฉันมีบูลว่าทักษะนั้นเป็นหมวดหมู่หรือไม่ พยายามรหัสรอบที่ยุ่ง การวาดต้นไม้ของฉันฉันสังเกตเห็นว่า 'ใบไม้' ของฉันเป็นทักษะเท่านั้น สิ่งที่ฉันตามมาคือวิธีในการสร้างทรีที่พยายามแยกโมเดลและมุมมองและอนุญาตให้เพิ่มโหนดย่อยประเภทลูก (โดยมีวิธีการแก้ไข / เรนเดอร์แยกต่างหาก) ให้กับผู้ปกครองโดยพลการ NB ซื้อทุกอย่างที่นี่เป็นทักษะแม้ในที่ที่ดูเหมือนว่าเป็นทรัพย์สิน ผู้ใช้จะเห็นว่านี่เป็นทักษะการซื้อ (ซึ่งพวกเขาทำบนกระดาษ ATM) ดังนั้นจึงควรแสดงเช่นนี้ทั้งหมดในหน้าเดียวกัน คำอธิบายของต้นไม้:ต้นไม้ 'เกิด' พร้อมชุดหมวดหมู่ระดับสูงที่มีการเข้ารหัสอย่างหนัก ( อาวุธ, ร่างกายและจิตใจ, การแพทย์และอื่น ๆ ) จากนี้ผู้ใช้จะต้องสามารถเพิ่มทักษะ ในที่สุดพวกเขาต้องการเพิ่มทักษะ 'ความเชี่ยวชาญพิเศษด้วยดาบ' ( ไม่ใช่ไอเท็ม) เป็นต้น จะทำอย่างไรเพื่อให้คุณนึกคิดต้องการคลิก 'เพิ่ม' กับWeaponsที่เลือกแล้วเลือกOne-handedจากโหนด ComboBox ที่ปรากฏในเด็กนั้นแล้วคลิกเพิ่มอีกครั้งและใส่ชื่อในช่องข้อความในว่าเด็กโหนดที่ปรากฏ จากนั้นคลิกเพิ่มอีกครั้งเพื่อเพิ่ม / ระบุ 'ระดับ' หรือ 'ระดับ' สำหรับลีฟนั้น …

12
ใช้ XML เป็นที่เก็บข้อมูล [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันคิดเกี่ยวกับรูปแบบ XML และคำพูดต่อไปนี้: “ XML ไม่ใช่ฐานข้อมูล มันไม่เคยตั้งใจจะเป็นฐานข้อมูล มันจะไม่เป็นฐานข้อมูล ฐานข้อมูลเชิงสัมพันธ์เป็นเทคโนโลยีที่ได้รับการพิสูจน์แล้วพร้อมด้วยประสบการณ์การใช้งานมานานกว่า 20 ปี พวกเขาเป็นของแข็งมั่นคงผลิตภัณฑ์ที่มีประโยชน์ พวกเขาจะไม่หายไป XML เป็นเทคโนโลยีที่มีประโยชน์มากสำหรับการย้ายข้อมูลระหว่างฐานข้อมูลที่แตกต่างกันหรือระหว่างฐานข้อมูลและโปรแกรมอื่น ๆ อย่างไรก็ตามมันไม่ได้เป็นฐานข้อมูล อย่าใช้อย่างเดียว "- XML ที่มีประสิทธิภาพ: 50 วิธีพิเศษในการปรับปรุง XML ของคุณโดยElliotte Rusty Harold (หน้า 230, ตอนที่ 4, รายการ 41, วรรคสอง) สิ่งนี้ดูเหมือนจะเน้นว่า XML ไม่ควรใช้สำหรับการจัดเก็บข้อมูลและควรใช้สำหรับโปรแกรมเพื่อการทำงานร่วมกันของโปรแกรมเท่านั้น โดยส่วนตัวแล้วฉันไม่เห็นด้วยและapp.configไฟล์ของ. NET ที่ใช้ในการจัดเก็บการตั้งค่าของโปรแกรมเป็นตัวอย่างของการจัดเก็บข้อมูลในไฟล์ XML อย่างไรก็ตามสำหรับฐานข้อมูลมากกว่าการกำหนดค่า ฯลฯ …

8
การเรียน makefiles มีความสำคัญแค่ไหน? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันทำงานใน c ++ ส่วนใหญ่เป็นงานอดิเรก (ฉันยังเรียนหนังสืออยู่และไม่มีงานจริง) IDEs สร้าง makefile ให้ฉันและฉันก็สงสัยว่ามันคุ้มค่าที่จะเรียนรู้วิธีทำให้มันเป็นตัวของตัวเองหรือเปล่า โดย "การเรียนรู้ที่คุ้มค่า" ฉันหมายถึงฉันควรวางทุกอย่างและเรียนรู้วิธีการเขียนก่อนที่จะเรียนรู้ c ++ ต่อไปหรือไม่ การเรียนรู้พวกเขาจะจำเป็นจริงๆหรือ? ถ้าเป็นเช่นนั้นฉันควรเรียนรู้เกี่ยวกับพวกเขา (ไวยากรณ์ทั่วไปและความเข้าใจวิธีการทำงาน ฯลฯ ) หรือเรียนรู้วิธีการเขียนพวกเขาจริง ๆ ?
12 java  learning  c++  syntax  make 

1
Git เวิร์กโฟลว์ / การปฏิบัติสำหรับโครงการขนาดเล็ก (ผังใน png)
ฉันกำลังพยายามหาเวิร์กโฟลว์ส่วนตัว ฉันได้รวบรวมผังงานเกี่ยวกับอายุการใช้งานสมมุติของการวางจำหน่าย: นักพัฒนารายหนึ่งผลักดันให้ repo สาธารณะ Github + เพื่อนช่วยด้วยคุณสมบัติบางอย่างและแก้ไขข้อบกพร่อง นี่เป็นวิธีการที่สมเหตุสมผลในการควบคุมเวอร์ชันหรือไม่? แนวคิดหลักคือการรักษาความเป็นระเบียบเรียบร้อยสาธารณะ: การเปิดตัวใหม่แต่ละครั้งจะดำเนินการในสาขาของตนเองจนกว่าจะถูกแท็กในสาขาหลักเมื่อเสร็จสิ้น งานทั้งหมดจะทำในสาขา "คุณสมบัติ" หรือ "โปรแกรมแก้ไขด่วน" ไม่เคยอยู่ในสาขาที่วางจำหน่ายจริงเพื่อป้องกันความผิดปกติ การรวมสาขาในระดับที่สูงกว่านั้นจะถูกรีบูทหรือบีบอัดเสมอ (เพื่อหลีกเลี่ยงความยุ่งเหยิง) ถ้าเกินความจริงฉันก็ไม่รังเกียจเพราะประเด็นทั้งหมดสำหรับฉันคือการเรียนรู้ทักษะที่ฉันอาจต้องการสำหรับโครงการขนาดใหญ่ ปัญหาเดียวก็คือถ้าฉันทำบางสิ่งผิดปกติหรือไม่จำเป็น แก้ไข 2:แก้ไขความคิดที่ไม่ดีในผังงานดั้งเดิมและทำให้การนำทางง่ายขึ้นเล็กน้อย

3
อะไรที่ทำให้สถาปนิก / ผู้จัดการ / นักพัฒนาลีดดีขึ้น?
ฉันเป็นผู้พัฒนานำสำหรับ บริษัท ซอฟต์แวร์ขนาดเล็ก ในช่วงสองปีที่ผ่านมาทีมของฉันเติบโตจากนักพัฒนาซอฟต์แวร์คนหนึ่ง (ฉัน) ไปยังกลุ่มประมาณเก้าคน พวกเราส่วนใหญ่มีความสามารถมากวิศวกรอาวุโส (มีประสบการณ์มากกว่า 20 ปีในการสร้างซอฟต์แวร์ต่อคน) ดังนั้นจึงจำเป็นต้องมีการถือครองมือน้อยมาก เราใช้ Scrum เพื่อจัดการความพยายามของเราและเรามักจะทำสิ่งต่าง ๆ ได้อย่างรวดเร็วโดยมีข้อกำหนดขั้นต่ำเป็นลายลักษณ์อักษร เมื่อทีมเติบโตขึ้นฉันได้มาถึงจุดที่ยากสำหรับฉันที่จะดูแลการกำกับดูแลด้านเทคนิคทั่วทั้งโครงการในขณะที่ยังเขียนรหัสใหม่จำนวนมากด้วยตัวเองดังนั้นถึงเวลาแล้วที่ฉันจะต้องปรับบทบาทของฉัน ฉันจะทำให้ตัวเองมีประโยชน์มากที่สุดกับทีมได้อย่างไรเมื่อฉันไม่ได้ใช้เวลาส่วนใหญ่ในการพัฒนาอีกต่อไป? เป้าหมายของฉันคือให้กลุ่มของฉันเติบโตต่อไป (เช่นเพิ่มความเร็วในการต่อสู้) โดยการเพิ่มนักพัฒนามากขึ้นดังนั้นฉันจึงไม่ต้องการกลายเป็น "ตำรวจสถาปัตยกรรม" ที่กำหนดความต้องการของฉันให้กับทีม กล่าวอีกนัยหนึ่งฉันต้องการเป็นคนที่ช่วยให้สิ่งต่าง ๆ ทำงานได้ดีขึ้น / ราบรื่นขึ้นแทนที่จะเป็นคนที่ทำให้สิ่งต่าง ๆ ช้าลงโดยการเพิ่มชั้นของระบบราชการที่ไม่จำเป็น อย่างไรก็ตามหนึ่งในความเสี่ยงหลักของเราคือสิ่งต่าง ๆ จะแยกออกจากการควบคุมหากเราเพิ่มผู้คนมากขึ้นโดยไม่มีโครงสร้างเพียงพอที่จะทำให้เราทุกคนอยู่ในหน้าเดียวกัน วิธีที่ดีที่สุดในการบรรลุเป้าหมายของฉันคืออะไร

4
การเขียนโปรแกรมเชิงวัตถุ: getters / setters หรือชื่อตรรกะ
ฉันกำลังคิดเกี่ยวกับส่วนต่อประสานกับชั้นเรียนที่ฉันกำลังเขียน คลาสนี้มีสไตล์สำหรับตัวละครตัวอย่างเช่นตัวละครเป็นตัวหนาตัวเอียงขีดเส้นใต้และอื่น ๆ ฉันได้ถกเถียงกับตัวเองเป็นเวลาสองวันว่าฉันควรใช้ getters / setters หรือชื่อโลจิคัลสำหรับวิธีที่เปลี่ยนค่าเป็น สไตล์เหล่านี้ ในขณะที่ฉันมักจะชอบชื่อแบบลอจิคัลมันหมายถึงการเขียนรหัสที่ไม่มีประสิทธิภาพและไม่เป็นแบบลอจิคัล ให้ฉันยกตัวอย่างให้คุณ ฉันมีชั้นเรียนCharacterStylesที่มีตัวแปรสมาชิกbold, italic, underline(และอื่น ๆ บางอย่าง แต่ฉันจะปล่อยให้พวกเขาออกไปให้มันง่าย) วิธีที่ง่ายที่สุดที่จะช่วยให้ส่วนอื่น ๆ ของโปรแกรมที่จะเข้าถึงตัวแปรเหล่านี้จะเขียนวิธีการ getter / หมาเพื่อให้คุณสามารถทำและstyles.setBold(true)styles.setItalic(false) แต่ฉันไม่ชอบสิ่งนี้ ไม่เพียงเพราะผู้คนจำนวนมากพูดว่าผู้ได้รับ / setters ทำลายการห่อหุ้ม (มันเลวร้ายจริงๆเหรอ?) แต่ส่วนใหญ่เป็นเพราะมันไม่สมเหตุสมผล ฉันคาดหวังที่จะจัดสไตล์ตัวละครผ่านวิธีการหนึ่งstyles.format("bold", true)หรือบางอย่างเช่นนั้น แต่ไม่ผ่านวิธีเหล่านี้ทั้งหมด แม้ว่าจะมีปัญหาหนึ่งข้อ เนื่องจากคุณไม่สามารถเข้าถึงตัวแปรสมาชิกวัตถุโดยเนื้อหาของสตริงใน C ++ ฉันจะต้องเขียนคอนเทนเนอร์ if-statement / switch ขนาดใหญ่สำหรับสไตล์ทั้งหมดหรือฉันจะต้องเก็บสไตล์ไว้ในอาเรย์แบบเชื่อมโยง ( แผนที่). ฉันไม่สามารถเข้าใจได้ว่าวิธีที่ดีที่สุดคืออะไร ช่วงเวลาหนึ่งฉันคิดว่าฉันควรเขียนตัวรับสัญญาณ / ผู้ตั้งค่าและช่วงเวลาถัดไปที่ฉันเอนตัวไปทางอื่น คำถามของฉันคือคุณจะทำอย่างไร แล้วทำไมคุณถึงทำอย่างนั้น?

3
มีทฤษฎีหรือหนังสือเกี่ยวกับวิธีแก้จุดบกพร่อง "โดยทั่วไป" หรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันอ่านและศึกษาวิทยาการคอมพิวเตอร์และวิศวกรรมจำนวนมากและฉันแทบจะไม่เคยเห็นหนังสือเกี่ยวกับการดีบั๊กหรือทฤษฎีว่าจะดีบั๊กอย่างไร (แม้ว่าฉันจะพัฒนาทฤษฎีการดีบักของตัวเอง) มีการดีบักทฤษฎีและ / หรือหนังสือหรือไม่ ทำไม / ทำไมไม่ ฉันสามารถอ่านวิธีการดีบักโดยใช้ gdb และข้อมูลที่มีประโยชน์ที่สุดเกี่ยวกับการพัฒนาที่ฉันได้รับจากการอ่านวิธีใช้ gdb
12 debugging 

6
การดีบัก: ทำความเข้าใจรายละเอียดเกี่ยวกับสาเหตุที่การแก้ไขบางอย่างทำงาน [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เมื่อทำการดีบักบางครั้งฉันพบว่าฉันทำการเปลี่ยนแปลงบางอย่างและฉันไม่แน่ใจ 100% ว่าทำไมการเปลี่ยนแปลงเหล่านั้นจึงแก้ไขข้อผิดพลาดบางอย่างในโปรแกรม จำเป็นหรือไม่ที่จะต้องเข้าใจทุกรายละเอียดว่าทำไมข้อผิดพลาดบางอย่างจึงเกิดขึ้นและทำไมการเปลี่ยนแปลงบางอย่างจึงกำจัดข้อผิดพลาดเหล่านั้นออกไป หรือเป็นเรื่องปกติในหมู่นักพัฒนาเพื่อให้โปรแกรมทำงานโดยไม่ทราบรายละเอียดเกี่ยวกับสาเหตุที่โปรแกรมแก้ไขทำงานจริงหรือ
12 skills  debugging  bug 

1
ฉันพูดถูกเกี่ยวกับความแตกต่างระหว่างอัลกอริทึม Floyd-Warshall, Dijkstra และ Bellman-Ford หรือไม่?
ฉันกำลังศึกษาทั้งสามและฉันได้ระบุข้อสรุปจากพวกเขาด้านล่าง มีใครบอกฉันได้ไหมว่าฉันเข้าใจถูกต้องเพียงพอหรือไม่ ขอบคุณ. อัลกอริทึมของ Dijkstra จะใช้เมื่อคุณมีแหล่งเดียวและคุณต้องการทราบเส้นทางที่เล็กที่สุดจากโหนดหนึ่งไปยังอีกโหนดหนึ่ง แต่ล้มเหลวในกรณีเช่นนี้ อัลกอริทึมของ Floyd-Warshall ใช้เมื่อทุกโหนดใด ๆ สามารถเป็นต้นทางดังนั้นคุณต้องการให้ระยะทางที่สั้นที่สุดในการเข้าถึงโหนดปลายทางใด ๆ จากโหนดต้นทางใด ๆ สิ่งนี้จะล้มเหลวก็ต่อเมื่อมีรอบการลบเท่านั้น (นี่คือสิ่งที่สำคัญที่สุดฉันหมายถึงนี่คือสิ่งที่ฉันแน่ใจน้อยที่สุดเกี่ยวกับ :) 3.Bellman-Ford ใช้เหมือนของ Dijkstra เมื่อมีเพียงแหล่งเดียว สิ่งนี้สามารถรองรับน้ำหนักเชิงลบและการทำงานของมันเหมือนกับของ Floyd-Warshall ยกเว้นแหล่งเดียวใช่ไหม หากคุณต้องการดูอัลกอริธึมที่เกี่ยวข้องคือ (มารยาท Wikipedia): ยามฟอร์ด: procedure BellmanFord(list vertices, list edges, vertex source) // This implementation takes in a graph, represented as lists of vertices // and …

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