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

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

11
Alan Perlis หมายถึงอะไรเกี่ยวกับวิธีการเขียนโปรแกรมที่ปราศจากข้อผิดพลาด [ปิด]
มีใบเสนอราคาโดยAlan J. Perlisที่พูดว่า: มีสองวิธีในการเขียนโปรแกรมที่ปราศจากข้อผิดพลาด เฉพาะอันที่สามเท่านั้น ฉันเพิ่งได้ยินคำพูดนี้จากเพื่อนของฉันและไม่สามารถเข้าใจความหมายที่ลึกกว่านั้น Perlis พูดถึงอะไรที่นี่?
29 bug  quotations 

30
ข้อบกพร่องด้านการออกแบบที่ยิ่งใหญ่ที่สุดที่คุณประสบในภาษาการเขียนโปรแกรมคืออะไร? [ปิด]
ภาษาการเขียนโปรแกรมทั้งหมดมีข้อบกพร่องด้านการออกแบบเพียงเพราะภาษาเดียวไม่สามารถสมบูรณ์แบบเช่นเดียวกับสิ่งอื่น ๆ ส่วนใหญ่ (ทั้งหมด?) นอกเหนือจากนั้นความผิดพลาดด้านการออกแบบในภาษาการเขียนโปรแกรมทำให้คุณรำคาญใจที่สุดในฐานะโปรแกรมเมอร์? โปรดทราบว่าหากภาษา "ไม่ดี" เพียงเพราะมันไม่ได้ออกแบบมาสำหรับสิ่งที่เฉพาะเจาะจงไม่ใช่ข้อบกพร่องด้านการออกแบบ แต่เป็นคุณสมบัติของการออกแบบดังนั้นอย่าเขียนรายการภาษาที่น่ารำคาญ หากภาษานั้นได้รับการ illsuited สำหรับสิ่งที่มันถูกออกแบบมาสำหรับนั่นเป็นข้อบกพร่องในการออกแบบ การดำเนินการสิ่งที่เฉพาะเจาะจงและภายใต้ประทุนสิ่งที่ไม่นับรวม

28
การพึ่งพาเครื่องมือมากเกินไปหมายความว่าคุณขี้เกียจหรือไม่? [ปิด]
ฉันเริ่มเขียนโปรแกรมใน C ++ ที่ uni และรักมัน ในระยะต่อไปเราเปลี่ยนเป็น VB6 และฉันเกลียดมัน ฉันไม่สามารถบอกได้ว่าเกิดอะไรขึ้นคุณลากปุ่มไปยังแบบฟอร์มและ IDE เขียนรหัสให้คุณ ในขณะที่ฉันเกลียดวิธีการทำงานของ VB ฉันไม่สามารถโต้แย้งได้ว่าเร็วและง่ายกว่าการทำสิ่งเดียวกันใน C ++ ดังนั้นฉันจึงสามารถดูได้ว่าทำไมมันถึงเป็นภาษายอดนิยม ตอนนี้ฉันไม่ได้เรียกนักพัฒนา VB ขี้เกียจเพียงแค่บอกว่าง่ายกว่า C ++ และฉันได้สังเกตเห็นว่าภาษาใหม่ ๆ จำนวนมากกำลังติดตามแนวโน้มนี้เช่น C # สิ่งนี้ทำให้ฉันคิดว่าเนื่องจากธุรกิจต้องการผลลัพธ์ที่รวดเร็วผู้คนจำนวนมากจะทำรายการเช่นนี้และไม่ช้าก็เร็วจะไม่มีสิ่งเช่นที่เราเรียกว่าการเขียนโปรแกรมตอนนี้ โปรแกรมเมอร์ในอนาคตจะบอกคอมพิวเตอร์ว่าพวกเขาต้องการอะไรและคอมไพเลอร์จะเขียนโปรแกรมสำหรับพวกเขาเหมือนใน Star Trek นี่เป็นเพียงความเห็นที่ได้รับการบอกกล่าวของโปรแกรมเมอร์รุ่นเยาว์หรือโปรแกรมเมอร์กำลังเกียจคร้านและมีความสามารถน้อยลงหรือไม่? แก้ไข: คำตอบจำนวนมากบอกว่าทำไมคิดค้นล้อใหม่และฉันเห็นด้วยกับเรื่องนี้ แต่เมื่อมีล้อว่างผู้คนจะไม่ใส่ใจที่จะเรียนรู้วิธีทำล้อ ฉันสามารถ google วิธีการทำอะไรสวยมากในภาษาใด ๆ และครึ่งภาษาทำมากสำหรับคุณเมื่อมันมาถึงการแก้จุดบกพร่องพวกเขาไม่รู้ว่ามีรหัสทำวิธีการแก้ไขข้อผิดพลาด นั่นเป็นวิธีที่ฉันเข้ากับทฤษฎีที่ว่าโปรแกรมเมอร์กลายเป็นคนขี้เกียจและมีความสามารถน้อยลงเพราะไม่มีใครใส่ใจว่าสิ่งต่าง ๆ ทำงานได้ดีแค่ไหนจนกว่ามันจะไม่ทำ

19
โปรแกรมเมอร์ควรสวมหมวกอะไร [ปิด]
จากประสบการณ์ของฉันผู้พัฒนาซอฟต์แวร์มักสวมหมวกหลายใบและเติมหลายบทบาทด้วยความรับผิดชอบที่แตกต่างกัน จากการเข้ารหัสไม่เพียง แต่บางครั้งก็เขียน SQL ออกแบบส่วนติดต่อผู้ใช้ออกแบบฐานข้อมูลจัดการกราฟิกจนถึงการทดสอบ QA หากบทบาทหลักคือการเขียนซอฟต์แวร์ / รหัสผู้พัฒนาไม่ควรทำหน้าที่อะไร? ยังมี .... บ้าง? ความตั้งใจของคำถามนี้ไม่ใช่เพราะผู้พัฒนาไม่สามารถเติมบทบาทอื่น - แต่การมีบทบาทเพิ่มเติมนั้นใช้ได้กับบทบาทหลักจริง ๆ หรือควรเป็นบทบาทที่ทุ่มเทของผู้ที่ไม่ได้ทำโปรแกรมเป็นหลัก
29 team  roles 

2
เหตุใดจึงเก็บค่าสถานะ / enums ในฐานข้อมูลเป็นสตริงแทนที่จะเป็นจำนวนเต็ม
ฉันได้ทำการสืบค้น SQL ทิ้งของ CMS ที่มีชื่อเสียงบางตัวรวมถึง Drupal 7, Wordpress (บางรุ่นที่ค่อนข้างเก่า) และแอปพลิเคชันที่กำหนดเองบางตัวที่ใช้ Python ดัมพ์เหล่านี้ทั้งหมดมีข้อมูลที่มีแฟล็กสตริงแทนค่าจำนวนเต็ม ยกตัวอย่างเช่นสถานะการโพสต์ได้แสดงเป็นpublished, closedหรือinheritมากกว่า1, หรือ23 ฉันมีประสบการณ์ค่อนข้าง จำกัด ในการออกแบบฐานข้อมูลและฉันไม่เคยผ่าน SQL แบบง่าย ๆ มาก่อน แต่ฉันได้รับการสอนเสมอว่าฉันควรใช้ตัวเลข / จำนวนเต็มสำหรับข้อมูลเช่นนี้ ก็ชัดเจนว่าพื้นที่กินมากน้อยในฐานข้อมูลกว่ายกตัวอย่างเช่นtinyintvarchar(9) แล้วฉันจะพลาดอะไรไป? นี่ไม่ใช่การจัดเก็บข้อมูลและการสำรองข้อมูลซ้ำซ้อนหรือไม่ การเรียกดูการค้นหาและการจัดทำดัชนีจะไม่เร็วกว่านี้ไหมถ้าคอลัมน์เหล่านี้ใช้จำนวนเต็มแทนที่จะเป็นสตริง

3
ที่เก็บ DDD ในเซอร์วิสแอ็พพลิเคชันหรือโดเมน
ฉันกำลังศึกษา DDD ในวันนี้และฉันมีคำถามบางอย่างเกี่ยวกับวิธีจัดการที่เก็บด้วย DDD อันที่จริงฉันได้พบกับสอง possibilies: คนแรก วิธีแรกในการจัดการบริการที่ฉันอ่านคือการฉีดที่เก็บและรูปแบบโดเมนในบริการแอปพลิเคชัน ด้วยวิธีนี้หนึ่งในวิธีการบริการแอปพลิเคชันเราเรียกวิธีการบริการโดเมน (การตรวจสอบกฎธุรกิจ) และถ้าเงื่อนไขเป็นสิ่งที่ดีพื้นที่เก็บข้อมูลจะถูกเรียกในวิธีพิเศษเพื่อยืนยัน / ดึงเอนทิตีจากฐานข้อมูล วิธีง่ายๆในการทำสิ่งนี้อาจเป็น: class ApplicationService{ constructor(domainService, repository){ this.domainService = domainService this.repository = repository } postAction(data){ if(this.domainService.validateRules(data)){ this.repository.persist(new Entity(data.name, data.surname)) } // ... } } อันที่สอง ความเป็นไปได้ที่สองคือการฉีดที่เก็บภายใน domainService แทนและเพื่อใช้ที่เก็บผ่านบริการโดเมนเท่านั้น: class ApplicationService{ constructor(domainService){ this.domainService = domainService } postAction(data){ if(this.domainService.persist(data)){ console.log('all is …


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

6
เหตุใดฉันจึงควรใช้การสะท้อน
ฉันใหม่กับ Java; จากการศึกษาของฉันฉันอ่านว่าการสะท้อนนั้นใช้เพื่อเรียกชั้นเรียนและวิธีการต่างๆ ฉันควรใช้การสะท้อนเมื่อใดและอะไรคือความแตกต่างระหว่างการใช้การสะท้อนกับวัตถุที่สร้างอินสแตนซ์และวิธีการโทรในแบบดั้งเดิม
29 java  reflection 


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

2
มารยาทในการเปลี่ยนชื่อ fork โอเพ่นซอร์สคืออะไร?
ฉันต้องการแยก Github กรอบการทดสอบ TestNG java (ใบอนุญาต Apache 2) ดังนั้นฉันสามารถเพิ่ม / เปลี่ยนแปลงบางสิ่งเล็กน้อยเพื่อให้เหมาะกับความต้องการของฉัน ไม่น่าเป็นไปได้ที่การเปลี่ยนแปลงทั้งหมดของฉันจะได้รับการอนุมัติในโครงการหลักหรือผู้อื่นจะใช้ทางแยกของฉัน สิ่งนี้จะไม่เป็นการแข่งขันในโครงการหลัก ตอนนี้ในแง่ของการตั้งชื่อฉันต้องการเปลี่ยนชื่อสิ่งประดิษฐ์ (testng-mycompany) หรือรุ่น (6.8.mycompany) ดังนั้นจึงไม่มีความสับสนกับรุ่นอย่างเป็นทางการในที่เก็บ maven ของฉัน นี่จะถือว่าเป็นมารยาทที่ไม่ดีหรือไม่? ถ้าใช่วิธีที่ดีที่สุดในการแยกความแตกต่างของคุณคืออะไร?

9
ตัวแบ่งบรรทัดก่อน / หลังตัวดำเนินการ [ปิด]
ในขณะที่การประชุมจาวาโค้ดของซันแนะนำให้วางเส้นแบ่งไว้ก่อนที่ผู้ปฏิบัติงานแนวทางอื่น ๆ จะไม่เห็นด้วย ฉันไม่เห็นข้อดีข้อเสียใด ๆ ที่ชัดเจนดังนั้นจึงมีข้อดีของการใช้รูปแบบเหล่านี้กับอีกรูปแบบหนึ่งหรือไม่ String longVarName = a + b + c + d + e + f; VS String longVarName = a + b + c + d + e + f;

3
พารามิเตอร์ทางเลือกหรือตัวสร้างที่มากเกินไป
ฉันกำลังดำเนินการDelegateCommandและเมื่อฉันกำลังจะใช้ตัวสร้างฉันจะมาพร้อมกับสองตัวเลือกการออกแบบต่อไปนี้: 1: มีตัวสร้างโอเวอร์โหลดหลายตัว public DelegateCommand(Action<T> execute) : this(execute, null) { } public DelegateCommand(Action<T> execute, Func<T, bool> canExecute) { this.execute = execute; this.canExecute = canExecute; } 2: มีคอนสตรัคเตอร์เดียวเท่านั้นที่มีพารามิเตอร์เป็นตัวเลือก public DelegateCommand(Action<T> execute, Func<T, bool> canExecute = null) { this.execute = execute; this.canExecute = canExecute; } ฉันไม่รู้ว่าจะใช้อันไหนเพราะฉันไม่รู้ว่าข้อดี / ข้อเสียที่เป็นไปได้มาจากวิธีใดวิธีหนึ่งจากสองวิธีที่เสนอ ทั้งสองสามารถถูกเรียกเช่นนี้: var command = …

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

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