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

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

4
มีเหตุผลในการออกเครื่องหมายความขัดแย้งในรหัสตรวจสอบใน?
พิจารณาเครื่องหมายความขัดแย้ง เช่น: <<<<<<< branch blah blah this ======= blah blah that >>>>>>> HEAD ในกรณีเฉพาะที่กระตุ้นให้ฉันโพสต์คำถามนี้สมาชิกในทีมที่รับผิดชอบเพิ่งจะทำการผสานตั้งแต่ต้นน้ำจนถึงสาขาของเราและในบางกรณีก็ทิ้งสิ่งเหล่านี้ไว้ในความคิดเห็นเป็นเอกสารประกอบสิ่งที่เพิ่งเกิดขึ้น การแก้ไข เขาทิ้งไว้ในสถานะที่รวบรวมการทดสอบผ่านดังนั้นจึงไม่เลวร้ายอย่างที่คุณคิด โดยสัญชาตญาณแม้ว่าฉันจะคัดค้านเรื่องนี้จริง ๆ แต่เป็นมารสนับสนุนให้ตัวเองฉันสามารถดูว่าทำไมเขาอาจทำ: เพราะมันเน้นไปที่นักพัฒนาทีมคนอื่น ๆ สิ่งที่มีการเปลี่ยนแปลงอันเป็นผลมาจากการรวม เพราะผู้ที่มีความเชี่ยวชาญมากขึ้นในส่วนของรหัสสามารถแก้ไขข้อกังวลที่แสดงโดยข้อคิดเห็นเพื่อที่เขาจะได้ไม่ต้องเดา เนื่องจากการรวมอัปสตรีมเป็นความเจ็บปวดที่ถูกต้องและอาจเป็นเรื่องยากที่จะพิสูจน์เวลาในการแก้ไขทุกอย่างให้ดีและสมบูรณ์ดังนั้นการแจ้งเตือน FIXME แบบกึ่งสมบูรณ์จึงมีความจำเป็นดังนั้นทำไมไม่ใช้ความขัดแย้งเดิมเป็นความคิดเห็น การคัดค้านของฉันเป็นสัญชาตญาณ แต่ฉันต้องการที่จะพิสูจน์เหตุผลอย่างมีเหตุผลหรือเห็นตำแหน่งของฉันอย่างชาญฉลาด ทุกคนสามารถให้ฉันตัวอย่างหรือประสบการณ์ที่ผู้คนมีช่วงเวลาที่เลวร้ายกับคนอื่นทำเช่นนี้และ / หรือเหตุผลที่ว่าทำไมมันถึงเป็นการปฏิบัติที่ไม่ดี (หรือคุณสามารถเล่นผู้สนับสนุนของปีศาจและสนับสนุนมัน) ข้อกังวลของฉันเองในทันทีคือมันจะน่ารำคาญถ้าฉันได้แก้ไขไฟล์ใดไฟล์หนึ่งที่เกี่ยวข้องดึงการเปลี่ยนแปลงมีความขัดแย้งจริง แต่ก็ดึงความคิดเห็น ถ้าอย่างนั้นฉันจะมีไฟล์ยุ่งมากแน่นอน โชคดีที่ไม่ได้เกิดขึ้น

7
การใช้งานที่เหมาะสมของคำสั่งเปลี่ยนผ่าน
เมื่อใดที่เหมาะสมที่จะใช้คำสั่ง switch-fall (classic) มีการแนะนำและสนับสนุนการใช้งานดังกล่าวหรือไม่และควรหลีกเลี่ยงค่าใช้จ่ายทั้งหมดหรือไม่?

2
ตกลงไหมที่จะเปลี่ยนค่าประมาณในระหว่างการทำซ้ำ?
เราเริ่มใช้ Agile / Scrum ในทีมนักพัฒนา 4 คน เราทำการประมาณค่าเรื่องราวของเราและสั่งซื้อเรื่องราว Primed ในการค้างสินค้า เราเริ่มต้นด้วยการประมาณตามจุดบนความซับซ้อนจาก 1 ถึง 5 แทนที่จะเป็นปกติ 1,2,3,5,8,13 .... และอื่น ๆ หลังจากทำงานสองสามเรื่องเรารู้สึกว่าบางเรื่องที่ประเมินที่ 4 จุดควรเป็น 2 เท่านั้นในขณะที่อีกเรื่องที่ประมาณ 2 มีความซับซ้อนมากขึ้นและควรได้รับการประเมินเป็น 5 ฉันต้องการ ทราบ: ตกลงไหมที่จะเปลี่ยนการประมาณเรื่องราวของเราในระหว่างการทำซ้ำ? มันโอเคไหมที่จะใช้คะแนนการประเมินปัจจุบันจาก 1 ถึง 5 แทนที่จะเป็นปกติ 1,2,3,5,8,13 .... และอื่น ๆ แม้ว่าโดยส่วนตัวแล้วฉันรู้สึกว่ามันไม่ควรจะเป็นสำหรับทั้งสองกรณี แต่ฉันต้องสำรองตัวเองเพราะความเข้าใจของตัวเองยังไม่ชัดเจน (วัสดุอ้างอิงที่ดีจะดีมาก!)

5
วิธีการสร้างการทดสอบบูรณาการฟรีและปรับขนาดได้ผลข้างเคียง?
ในโครงการปัจจุบันของฉันฉันมีเวลาที่ยากลำบากในการหาวิธีแก้ปัญหาที่ดีในการสร้างการทดสอบการรวมที่ปรับขนาดได้ซึ่งไม่มีผลข้างเคียง การชี้แจงเล็ก ๆ น้อย ๆ เกี่ยวกับคุณสมบัติฟรีผลข้างเคียง: ส่วนใหญ่เกี่ยวกับฐานข้อมูล; ไม่ควรมีการเปลี่ยนแปลงใด ๆ ในฐานข้อมูลหลังจากการทดสอบเสร็จสมบูรณ์ (ควรมีการเก็บรักษาสถานะ) บางทีความสามารถในการปรับขยายและการสงวนรักษาของรัฐไม่ได้มาด้วยกัน แต่ฉันต้องการผลักดันให้เกิดทางออกที่ดีกว่า นี่คือการทดสอบการรวมทั่วไป (การทดสอบเหล่านี้แตะเลเยอร์ฐานข้อมูล): public class OrderTests { List<Order> ordersToDelete = new ArrayList<Order>(); public testOrderCreation() { Order order = new Order(); assertTrue(order.save()); orderToDelete.add(order); } public testOrderComparison() { Order order = new Order(); Order order2 = new Order(); assertFalse(order.isEqual(order2); orderToDelete.add(order); …

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

8
การคำนวณแบบกระจายคืออะไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา อะไรคือการคำนวณแบบกระจายและอะไรคือความแตกต่างจากการคำนวณแบบขนาน / แบบพร้อมกัน? การใช้ mutexes และ semaphores ในหลายเธรดแบบขนานพยายามซิงโครไนซ์สำหรับการเข้าถึงทรัพยากรเป็นปัญหาในโดเมนของการคำนวณแบบกระจายหรือไม่?

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

7
จาก TFS ถึง Git
ฉันเป็นผู้พัฒนา. NET และฉันใช้ TFS (เซิร์ฟเวอร์พื้นฐานสำหรับทีม) เป็นซอฟต์แวร์ควบคุมซอร์สของฉันหลายครั้ง คุณสมบัติที่ดีของ TFS คือ: การรวมที่ดีกับ Visual Studio (ดังนั้นฉันทำเกือบทุกอย่างที่มองเห็นไม่มีคำสั่งคอนโซล) เช็คเอาท์ง่ายกระบวนการเช็คอิน การผสานและการแก้ไขข้อขัดแย้งได้ง่าย สร้างอัตโนมัติง่าย การแตกแขนง ตอนนี้ฉันต้องการใช้ Git เป็นตัวควบคุมพื้นที่เก็บข้อมูลและแหล่งที่มาของโครงการโอเพ่นซอร์สของฉัน โครงการของฉันอยู่ในภาษา C #, JavaScript หรือ PHP ที่มีฐานข้อมูล MySQL หรือ SQL Server เป็นกลไกการจัดเก็บ ฉันเพิ่งใช้ความช่วยเหลือของ github.com เพื่อจุดประสงค์นี้และฉันสร้างโปรไฟล์ที่นั่นและดาวน์โหลด GUI สำหรับ Git ในส่วนนี้นั้นง่ายมาก แต่ฉันเกือบติดอยู่อีกต่อไป ฉันแค่ต้องการดำเนินการง่ายๆ (ง่ายจริงๆ) รวมถึง: การสร้างโครงการบน Git และทำแผนที่ไปยังโฟลเดอร์บนแล็ปท็อปของฉัน การตรวจสอบ / ตรวจสอบในไฟล์และโฟลเดอร์ การแก้ไขข้อขัดแย้ง …

11
มันจะมีประสิทธิภาพมากขึ้นสำหรับระบบโดยทั่วไปที่จะทำอะไรกับ Stacks และเพียงแค่ใช้ Heap สำหรับการจัดการหน่วยความจำ
ฉันคิดว่าทุกอย่างที่สามารถทำได้ด้วย stack สามารถทำได้ด้วย heap แต่ไม่ใช่ทุกสิ่งที่สามารถทำได้ด้วย heap ที่สามารถทำได้ด้วย stack ถูกต้องหรือไม่ แล้วเพื่อความเรียบง่ายและแม้ว่าเราจะสูญเสียประสิทธิภาพเล็กน้อยไปกับปริมาณงานบางอย่างมันจะดีกว่าไหมที่จะไปกับมาตรฐานเดียว (เช่นกอง)? คิดถึงการแลกเปลี่ยนระหว่างโมดุลและประสิทธิภาพ ฉันรู้ว่าไม่ใช่วิธีที่ดีที่สุดในการอธิบายสถานการณ์นี้ แต่โดยทั่วไปดูเหมือนว่าความเข้าใจและการออกแบบที่เรียบง่ายอาจเป็นตัวเลือกที่ดีกว่าแม้ว่าจะมีศักยภาพสำหรับประสิทธิภาพที่ดีขึ้น
14 memory 

12
การใช้เงื่อนไขนี้เป็นการป้องกันแบบแผนหรือไม่?
ฉันเห็นสิ่งนี้มากมายในระบบเดิมของเราในที่ทำงาน - ฟังก์ชั่นที่เป็นไปตามนี้: bool todo = false; if(cond1) { ... // lots of code here if(cond2) todo = true; ... // some other code here } if(todo) { ... } ฟังก์ชั่นนี้มีสองส่วน ส่วนแรกทำการประมวลผลบางอย่าง (อาจมีลูปผลข้างเคียงและอื่น ๆ ) และตามวิธีที่อาจตั้งค่าสถานะ "todo" ส่วนที่สองจะดำเนินการก็ต่อเมื่อมีการตั้งค่าสถานะ "todo" ดูเหมือนจะเป็นวิธีที่น่าเกลียดในการทำสิ่งต่าง ๆ และฉันคิดว่ากรณีส่วนใหญ่ที่ฉันใช้เวลาในการทำความเข้าใจจริง ๆ แล้วสามารถนำกลับมาใช้ใหม่ได้เพื่อหลีกเลี่ยงการใช้ธง แต่นี่เป็นรูปแบบการต่อต้านที่แท้จริงความคิดที่ไม่ดีหรือเป็นที่ยอมรับอย่างสมบูรณ์หรือไม่? refactorization ชัดเจนแรกจะตัดเป็นสองวิธี อย่างไรก็ตามคำถามของฉันเกี่ยวกับว่ามีความต้องการ (ในภาษา OO …

5
ใครบางคนควรใช้ FP คิดว่าอ่านรหัสจำเป็น?
ฉันจบการศึกษาจากมหาวิทยาลัยเมื่อประมาณห้าเดือนที่แล้วและทำงานในท้องถิ่นเมื่อสี่เดือนที่ผ่านมา ขณะอยู่ที่มหาวิทยาลัยฉันเรียน Haskell, F # และอื่น ๆ ด้วยตัวเอง เราถูกสอน Java ที่มหาวิทยาลัย แต่ฉันได้สัมผัสกับการเขียนโปรแกรมการทำงานเร็ว ๆ นี้และใช้เวลากับมันมากกว่าที่ฉันทำกับการเขียนโปรแกรมที่จำเป็น เป็นผลให้สมองของฉันมีสายสำหรับการคิดการทำงาน บริษัท ที่ฉันเข้าร่วมใช้ Python และรหัสมีความจำเป็นอย่างยิ่ง ฉันมีเวลายากมากที่จะอ่านโค้ดที่จำเป็น ฉันไม่สามารถติดตามการกลายพันธุ์ เมื่อการทำ for-if-else-for-... การซ้อนกันมีความลึกมากกว่าสี่ระดับฉันจะสูญเสียการติดตามสิ่งที่เกิดขึ้นในโค้ดอย่างสมบูรณ์ เพื่อเพิ่มเข้าไป Python เป็นภาษาแบบไดนามิกดังนั้นจึงไม่มีประเภทในรหัส มัน' หลายสัปดาห์มาแล้วที่ฉันพยายามทำความเข้าใจส่วนหนึ่งของ codebase ของเรา (ซึ่งค่อนข้างซับซ้อนพอสมควร) แต่ฉันไม่ได้ทำความคืบหน้าใด ๆ เพื่อทำความเข้าใจ กรุณาเสนอเทคนิคการปฏิบัติเกี่ยวกับวิธีที่ฉันควรจะไปเกี่ยวกับการทำความเข้าใจรหัสที่ ขอบคุณล่วงหน้า! แก้ไข: บางทีฉันควรพูดถึงว่ามีความคิดเห็นไม่มากในรหัสและชื่อยังไม่ง่ายนัก

8
ห้าเคล็ดลับในการเขียน JavaScript ดีหรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา เห็นได้ชัดว่า JavaScript เป็นสิ่งที่ขาดไม่ได้เลยทีเดียว อย่างไรก็ตามฉันยังใหม่กับมันและฉันพบว่ามันยากที่จะต่อสู้กับความรู้สึกที่ดูเหมือนเป็นระเบียบและฉันไม่ต้องการที่จะจัดการกับมันในขณะนี้ ฉันเข้าใจภาษาอื่น ๆ มากกว่าฉันด้วย JavaScript เพราะฉันดูเหมือนจะไม่สามารถรับมือกับความกลัวนี้ได้ ฉันรู้สึกว่าเมื่อฉันเขียน JavaScript ฉันพยายามวาดรูปสุนัข Weimaraner มันมักจะช่วยให้ฉันเก็บคำสั่งที่สำคัญที่สุดไว้ในใจว่าฉันสามารถถามตัวเองสำหรับการย้ายแต่ละครั้งที่ฉันทำ (สำหรับความคิดของฉันกำมือหนึ่งห้าหรือน้อยกว่า) คุณสามารถระบุคำถามเฉพาะ (หรือน้อยกว่า) ห้าคำถามสำหรับ JavaScript ที่ฉันควรถามตัวเองในแต่ละการเคลื่อนไหวที่ฉันทำเมื่อฉันเข้ารหัส JavaScript หรือไม่ พวกเขาจะเป็นอะไร? อัปเดต: เพื่อให้ชัดเจนฉันไม่ได้ขอห้าสิ่งที่ควรคำนึงถึงเมื่อเรียนรู้ JavaScript; ฉันถามคำถามห้าข้อถามตัวเองเสมอว่าทุกคนควรถาม คำถามระดับสูงเช่น: "ฉันมีแนวโน้มที่จะทำซ้ำที่อื่นได้หรือไม่" หรือ "เป็นชื่อตัวแปร / ฟังก์ชั่นที่เฉพาะเจาะจงมากพอ (หรือเฉพาะเจาะจงมากเกินไป)" <== ยกเว้นคำถามตัวอย่างเหล่านี้จะไม่แปลกกับ JavaScript ฉันกำลังมองหาคำสั่งที่แปลกประหลาดกับ JavaScript
14 javascript 

6
ทำไม PHP จึงถูกใช้บ่อยในเว็บเซิร์ฟเวอร์ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เว็บเซิร์ฟเวอร์ของฉันใช้ PHP เช่นเดียวกับเว็บเซิร์ฟเวอร์ 76.9% ตาม W3Techs: http://w3techs.com/technologies/overview/programming_language/all เหตุผลที่ฉันใช้ PHP เป็นความเฉื่อยที่เกิดจากการเห็นคนอื่นใช้มันบนเว็บเซิร์ฟเวอร์ มันเกี่ยวกับ PHP อะไรที่ทำให้แพร่หลายในเว็บเซิร์ฟเวอร์? (โปรดทราบว่าคำถามนี้คล้ายกับคำถามต่อไปนี้ แต่นำไปในทิศทางที่แตกต่าง: เหตุใดจึงไม่ใช้ Java สำหรับการพัฒนาโปรแกรมประยุกต์บนเว็บที่ทันสมัย )

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

5
ทำไมคำหลัก 'สุดท้าย' จึงมีการใช้งานเพียงเล็กน้อยในอุตสาหกรรมนี้ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เนื่องจากฉันค้นพบพลังของfinalคำสำคัญใน Java เมื่อไม่กี่ปีที่ผ่านมามันช่วยให้ฉันทำให้โค้ดของฉันอ่านง่ายขึ้นมากเนื่องจากผู้คนสามารถเห็นตัวแปรแบบอ่านอย่างเดียวได้อย่างง่ายดาย มันอาจช่วยเพิ่ม JIT เล็กน้อยและในขณะที่ จำกัด มากมันไม่เป็นอันตรายโดยเฉพาะเมื่อกำหนดเป้าหมายอุปกรณ์ฝังตัวเช่นแพลตฟอร์ม Android แต่ยิ่งกว่าทุกสิ่งมันมีส่วนทำให้การออกแบบมีความแข็งแกร่งยิ่งขึ้นต่อการเปลี่ยนแปลงและให้คำแนะนำแก่ผู้มอบหมายอื่น ๆ เมื่อพวกเขาต้องการแก้ไขฐานรหัส อย่างไรก็ตามในขณะที่กำลังดูซอร์สโค้ด JDK บางตัวฉันไม่เคยสะดุดกับคำค้นหานี้ทั้งคลาสเมธอดหรือตัวแปร เช่นเดียวกับระบบต่าง ๆ ที่ฉันต้องทบทวน มีเหตุผลหรือไม่? มันเป็นกระบวนทัศน์การออกแบบทั่วไปเพื่อให้ทุกอย่างไม่แน่นอนจากภายในหรือไม่
14 java  final 

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