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

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

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

6
มีวิธีทดสอบว่าไซต์จะทำงานอย่างไรภายใต้การโหลด
ฉันสร้างเว็บไซต์ Asp.net MVC และโฮสต์บนผู้ให้บริการโฮสต์ที่ใช้ร่วมกัน เนื่องจากเว็บไซต์ของฉันล้อมรอบแนวคิดทั่วไปมากมันอาจมีผู้ใช้พร้อมกันจำนวนมากในอนาคต ดังนั้นฉันจึงคิดถึงวิธีทดสอบเว็บไซต์ของฉันเกี่ยวกับประสิทธิภาพในการโหลด เช่นเดียวกับเว็บไซต์จะทำงานอย่างไรเมื่อผู้ใช้ 100 หรือ 1,000 คนออนไลน์ในเวลาเดียวกันและท่องเว็บไซต์ สิ่งนี้จะทำให้ฉันเข้าใจว่าการสืบค้น LINQ ของฉันนั้นเขียนได้ดีหรือไม่

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

3
คำแนะนำสำหรับการเข้าร่วมโดยนัยกับการเข้าร่วมสายอย่างชัดเจน
ฉันต้องการทราบคำแนะนำเกี่ยวกับImplicit Line JoiningกับExplicit Line Joiningใน Python โดยเฉพาะอย่างยิ่งคุณชอบรูปแบบหนึ่งมากกว่ารูปแบบอื่น ๆ ? คุณแนะนำอะไรเป็นค่าเริ่มต้นทั่วไป? คุณมีเกณฑ์อะไรบ้างในการเลือกตัวเลือกหนึ่งและอีกตัวหนึ่งและหากคุณมีความชอบอย่างใดอย่างหนึ่งคุณจะทำการยกเว้นเมื่อใด ฉันมีคำตอบสำหรับคำถามนี้ที่สะท้อนอคติของฉันเอง แต่ก่อนที่ฉันจะโพสต์คำตอบของฉันฉันอยากจะรู้ว่าคนอื่นคิดอย่างไร ... และถ้าคุณมีเกณฑ์ที่ดีกว่าที่ฉันคิดไว้ แน่นอนฉันจะยอมรับคำตอบของคุณเอง คำแนะนำบางอย่างอาจใช้กับตัวเลือกนี้ในภาษาการเขียนโปรแกรมอื่น ๆ แต่ความลำเอียงของฉันค่อนข้างแข็งแกร่งใน Python เนื่องจากคุณสมบัติเฉพาะภาษาบางอย่างดังนั้นฉันจึงอยากรู้ทั้งเหตุผลทั่วไปและ Python-centric reasoning มีในหัวข้อนี้ สำหรับพื้นหลังการสนทนาเกิดขึ้นรอบ ๆคำถามเฉพาะใน stackoverflowแต่ฉันคิดว่ามันเหมาะสมกว่าที่จะย้ายการอภิปรายไปที่นี่เป็นคำถามเพื่อหลีกเลี่ยงการทำให้คำตอบยุ่งเหยิงด้วย SO แทนเจนต์เนื่องจากมันเปลี่ยนทิศทางไปจากหัวข้อ คำถามเดิม คุณสามารถดูคำถามนั้นและคำตอบสำหรับตัวอย่างโค้ดตัวอย่างที่ทำให้การสนทนาดำเนินไปได้ นี่คือตัวอย่างง่าย ๆ : join_type = "explicit" a = "%s line joining" \ % (join_type) # versus join_type = "implicit" …
9 python 

6
เป็นวิธีปฏิบัติที่ดีในการจัดเก็บรันไทม์ของกรอบงานภายใต้การควบคุมแหล่งที่มาหรือไม่?
ฉันรู้มากของร้านค้าซอฟแวร์ให้ไบนารีภายใต้การควบคุมแหล่งที่มา อย่างไรก็ตามร้านค้าของเราได้เก็บเฟรมเวิร์กทั้งหมดไว้ในที่เก็บ: DirectX runtime, CUDA, nVidia Optix ไม่ว่าจะเป็นอะไรก็ตาม มีการกล่าวว่าทำให้การตั้งค่าเครื่อง dev ง่ายขึ้น (สมมุติว่ารับล่าสุดและเริ่มการเข้ารหัส) อย่างไรก็ตามมันขยายพื้นที่เก็บข้อมูลออกไปอย่างมากและมีภาระกับประวัติที่ไม่เกี่ยวข้อง ฉันไม่เคยเห็นรูปแบบการใช้งานเช่นนั้นมาก่อน คุณคิดว่าเป็นวิธีปฏิบัติที่ดีหรือไม่? [แก้ไข:] ฉันไม่มีปัญหากับไบนารีบุคคลที่สามที่มีการควบคุมแหล่งที่มา คำถามหมายถึงกรอบเวลาทั้งหมดซึ่งประกอบด้วย 10+ ไบนารี ยกตัวอย่างเช่นใช้ Windows SDK (ซึ่งเราไม่ได้เก็บไว้ขอบคุณพระเจ้า แต่ฉันไม่เห็นความแตกต่างในหลักการ)

1
เป็นการออกแบบที่ไม่ดีหรือไม่? จะปรับปรุงได้อย่างไร?
ฉันเขียนสิ่งต่อไปนี้กลับมา แต่ฉันมาตรวจสอบเมื่อเร็ว ๆ นี้และตอนนี้ไม่คิดว่ามันจะเป็นการออกแบบที่ดี การออกแบบสำหรับชั้นฐานข้อมูลแบบแยกส่วนโดยใช้ Entity Framework 4 มีวัตถุฐานข้อมูลเดียวซึ่งโหลดกรอบ (เอนทิตี้ของ) เอนทิตีกรอบบริบทจากไลบรารีภายนอกในตำแหน่งที่ระบุและอินสแตนซ์ของบริบทที่โหลดจะถูกเก็บไว้ในตารางแฮช ชื่อของพวกเขา (EG "ContentMgmtContext") การติดต่อกับฐานข้อมูลทั้งหมดในระบบนี้ผ่านขั้นตอนการจัดเก็บ ในการโทรไปยังฐานข้อมูลลายเซ็นวิธีการสืบค้นจะมีลักษณะดังนี้ List<TReturn> Query<TReturn>(string Context, string Procedure, TransactionScope Scope, List<ObjectParameter> QueryParameters) ต้นแบบนี้เป็นสิ่งที่ฉันชอบ อย่างไรก็ตามมีข้อเสียเปรียบที่สำคัญอย่างหนึ่งสำหรับวิธีนี้: when using the database layer, the code using it has to have a reference to the library in which the context is stored, …
9 design 

2
JavaFX มีอนาคตหรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน8 ปีที่ผ่านมา ฉันไม่ได้ตั้งใจจะแฮชและปรับปรุงใหม่ในเรื่องเดียวกัน แต่เพื่อตัดสินใจว่าจะเรียนรู้อะไรก่อน (JavaFX, Flex, HTML5 ฯลฯ ) ฉันจะดึงการสำรวจโดยเฉพาะคำถามที่คล้ายกันเมื่อไม่นานมานี้ อย่างน้อยหนึ่งปี JavaFX คาดว่าจะเป็นเทคโนโลยีRIAในอีกไม่กี่ปีข้างหน้า
9 java  ria  javafx 

8
ทำไมทุกคนเขียนความคิดเห็นที่ต้องทำในตัวอักษรพิมพ์ใหญ่? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันทำเช่นเดียวกัน เมื่อมีสิ่งที่ "ต้องทำ" //TODO ...ในรหัสของฉันฉันเขียน แต่ฉันอยากรู้ว่าจะเริ่มเมื่อไหร่และถ้ามีเหตุผลในการเขียน "to-dos" ในตัวพิมพ์ใหญ่ทั้งหมด?
9 comments 

5
เหตุใดจึงมีทั้งการลัดวงจรหรือเช่นเดียวกับการเปลี่ยนแปลงที่ไม่ผ่านรอบของตัวดำเนินการนั้นใน C #
ฉันสงสัยเกี่ยวกับสิ่งนี้เป็นระยะ การลัดวงจรหรือจะคืนค่าเดียวกันกับที่ตัวดำเนินการ OR ที่ไม่มีการลัดวงจรหรือ ฉันคาดหวังว่าการลัดวงจรหรือจะประเมินผลเร็วกว่าเสมอ ดังนั้นตัวดำเนินการ OR ที่ไม่มีการลัดวงจรรวมอยู่ในภาษา C # เพื่อความมั่นคงหรือไม่ ฉันพลาดอะไรไป
9 c#  boolean  logic 

3
ตัวจัดสรรฮีปแบบกำหนดเอง
โปรแกรมส่วนใหญ่ค่อนข้างไม่เป็นทางการเกี่ยวกับการจัดสรรฮีปแม้ภาษาที่ใช้งานโปรแกรมต้องการจัดสรรออบเจ็กต์ใหม่มากกว่าการดัดแปลงฮีทเก่าและปล่อยให้ผู้รวบรวมขยะกังวลเกี่ยวกับการปลดปล่อยสิ่งต่าง ๆ ในการเขียนโปรแกรมฝังตัวเซกเตอร์แบบเงียบอย่างไรก็ตามมีหลายแอปพลิเคชันที่คุณไม่สามารถใช้การจัดสรรฮีปได้ทั้งหมดเนื่องจากหน่วยความจำและข้อ จำกัด แบบเรียลไทม์ จำนวนวัตถุของแต่ละประเภทที่จะจัดการเป็นส่วนหนึ่งของข้อมูลจำเพาะและทุกอย่างได้รับการจัดสรรแบบคงที่ การเขียนโปรแกรมเกม (อย่างน้อยกับเกมที่มีความทะเยอทะยานเกี่ยวกับการผลักฮาร์ดแวร์) บางครั้งก็อยู่ระหว่าง: คุณสามารถใช้การจัดสรรแบบไดนามิก แต่มีหน่วยความจำเพียงพอและมีข้อ จำกัด แบบเรียลไทม์อ่อนที่คุณไม่สามารถถือว่าตัวจัดสรรเป็นกล่องดำ ให้ใช้การรวบรวมขยะอย่างเดียวดังนั้นคุณต้องใช้ตัวจัดสรรแบบกำหนดเอง นี่คือหนึ่งในเหตุผลที่ C ++ ยังคงใช้กันอย่างแพร่หลายในอุตสาหกรรมเกม มันช่วยให้คุณทำสิ่งต่าง ๆ เช่นhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html มีโดเมนอื่นใดบ้างที่อยู่ระหว่างนั้น? นอกเหนือจากเกมแล้วมีการใช้ตัวจัดสรรแบบกำหนดเองอย่างหนักที่ไหน?

1
Malbolge ล่ามคนแรกทำการทดสอบอย่างไร?
ตามวิกิพีเดีย Malbolge ยากที่จะเข้าใจเมื่อมันมาถึงมันใช้เวลาสองปีกว่าที่โปรแกรม Malbolge แรกจะปรากฏขึ้น หากสิ่งนี้เป็นจริงล่าม Malbolge ตัวแรกจะถูกทดสอบอย่างไร (เพื่อตรวจสอบว่ามันทำสิ่งที่ถูกต้องเมื่อได้รับโปรแกรม Malbolge) มันผ่านการทดสอบเลยเหรอ?
9 testing 

2
S- นิพจน์อ่านได้
โดยสรุปและสำหรับผู้ที่ไม่ทราบว่าฟังก์ชั่นเสียงกระเพื่อม / ผู้ประกอบการ / การสร้างทั้งหมดเรียกว่าเหมือนกันนี้: (function arg0 arg1 ... argN) ดังนั้นในภาษา C เหมือนคุณจะแสดงออกเป็น if (a > b && foo(param)) ถูกแปลงเป็น Lisp sexp เช่น (if (and (> a b) (foo param))) . ในขณะที่สิ่งต่าง ๆ มีความซับซ้อนและซับซ้อนมากขึ้นจริง ๆ ฉันจึงใช้คำพูดที่สอดคล้องกันสำหรับฉัน ฉันรู้ว่านี่อาจเป็นคำถามส่วนตัว แต่ - สำหรับแฮ็กเกอร์ LISP หลายคนแล้วสิ่งนี้จะสร้างความรำคาญเล็กน้อยให้กับคุณเสมอ หรือคนส่วนใหญ่คุ้นเคยกับไวยากรณ์ (ขาด) ไม่ช้าก็เร็ว? ไม่ว่าในกรณีใดการเพิ่ม breaklines (ซึ่งคุณจะไม่เพิ่มในค่าเทียบเท่า C ของคุณส่วนใหญ่) …

8
อะไรคือสาเหตุที่นำไปสู่ซอฟต์แวร์ที่มีการทำ overbloated [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา วันนี้ฉันตัดสินใจที่จะทำการติดตั้งใหม่ทั้งหมดสำหรับไดรเวอร์ Creative Sound Blaster เนื่องจากพวกเขาเริ่มผิดพลาดด้วยตัวเองทุกครั้ง และนั่นหมายความว่าฉันต้องทำตามขั้นตอนการล้างทั้งหมด และนั่นใช้เวลาเกือบ 2 ชั่วโมง .. และอย่างสุจริตฉันไม่เห็นเหตุผลว่าทำไม! และถึงแม้ว่า Creative, IMHO จะเป็นผู้ชนะอันดับหนึ่งในการผลิตซอฟต์แวร์ที่มีคุณภาพต่ำซึ่งไม่สามารถใช้งานได้ แต่ปัญหาของ bloat นั้นไม่ได้ จำกัด เฉพาะพวกเขาเท่านั้น พีซีที่มีไดรเวอร์กล้องดิจิตอลของ Canon จะมีรายการ Canon ประมาณ 10 รายการที่เชื่อมต่อกับการเชื่อมต่อทุกประเภท Visual Studio เป็นตัวอย่างที่ดีมีรายการประมาณ 50 รายการสำหรับการติดตั้งแบบเต็มและการซ่อมแซมสิ่งนั้นเป็นไปได้เฉพาะเมื่อใช้ nuking ที่สมบูรณ์ และเมื่อมันยังจัดการทำลายการติดตั้งระบบปฏิบัติการทั้งหมดเมื่อฉันอัพเกรดจาก VS2k8 เป็น VS2k8SP1 หรือบางสิ่งบางอย่าง ตามที่ปรากฎว่าพื้นที่ว่าง 5GB นั้นไม่เพียงพอสำหรับแพทช์ 300Mb …

1
ใครเป็นคนแรกที่สร้างหรือทำให้เป็นที่นิยม XMLHTTPRequest / MSXML ดั้งเดิม
ฉันพยายามที่จะเข้าใจต้นกำเนิดของ AJAX และคิดว่า MSXML และ XMLHTTPRequest เป็นวัตถุที่เริ่มต้นมันทั้งหมด สิ่งใดมาก่อนและ / หรือกลายเป็นวิธีการลดการสร้างเพจแบบไดนามิก

2
กระบวนทัศน์การเขียนโปรแกรมและผู้พัฒนาการบำรุงรักษา [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันอ่านข้อเท็จจริงและความล้มเหลวของวิศวกรรมซอฟต์แวร์ซึ่งมีส่วนของการบำรุงรักษา ตั้งแต่ฉันเป็นผู้พัฒนาด้านการบำรุงรักษามาหลายปีแล้วฉันจึงนำเสนอข้อเท็จจริงที่น่าสนใจมาก นี่คือสาม ข้อเท็จจริงที่ 41: การบำรุงรักษามักใช้ต้นทุนซอฟต์แวร์ 40 ถึง 80 เปอร์เซ็นต์ (โดยเฉลี่ย 60 เปอร์เซ็นต์) ดังนั้นจึงน่าจะเป็นช่วงวงจรชีวิตที่สำคัญที่สุดของซอฟต์แวร์ ข้อเท็จจริงที่ 42: การปรับปรุงมีหน้าที่รับผิดชอบประมาณร้อยละ 60 ของต้นทุนการบำรุงรักษาซอฟต์แวร์ การแก้ไขข้อผิดพลาดประมาณ 17 เปอร์เซ็นต์ ดังนั้นการบำรุงรักษาซอฟต์แวร์ส่วนใหญ่เกี่ยวกับการเพิ่มความสามารถใหม่ให้กับซอฟต์แวร์เก่าไม่ใช่การแก้ไข ความเป็นจริง 45: การพัฒนาวิศวกรรมซอฟต์แวร์ที่ดีกว่านำไปสู่การบำรุงรักษาที่มากขึ้นไม่น้อย ซอฟต์แวร์ตัวนี้ดีกว่ามีการบำรุงรักษามากกว่าเพราะง่ายต่อการเปลี่ยนแปลง ดังนั้นจึงยังคงใช้งานได้นานกว่าซึ่งนำไปสู่การเปลี่ยนแปลงที่ใช่ กระบวนทัศน์ใด (เช่นการทำงาน, เชิงวัตถุ, ขั้นตอน) ที่มีการบำรุงรักษาที่ดีที่สุดและมีงานวิจัยที่จะสำรองข้อมูลนี้หรือไม่?

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