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

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

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

6
คุณจะเขียนกรณีทดสอบหน่วยได้อย่างไร
บางครั้งฉันสิ้นสุดการเขียนกรณีทดสอบหน่วยสำหรับรหัสที่นักพัฒนาคนอื่นได้เขียน มีหลายครั้งที่ฉันไม่รู้ว่านักพัฒนาพยายามทำอะไร (ส่วนธุรกิจ) และฉันเพิ่งจัดการกรณีทดสอบเพื่อรับสายสีเขียว สิ่งเหล่านี้เป็นเรื่องปกติในอุตสาหกรรมหรือไม่? แนวโน้มปกติคืออะไร? นักพัฒนาควรจะเขียนกรณีทดสอบหน่วยสำหรับรหัสที่พวกเขาเขียนเอง?

12
ทำไมเราถึงใช้ CSV ต่อไป? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ทำไมเราถึงใช้ CSV ต่อไป? เมื่อเร็ว ๆ นี้ฉันได้เปลี่ยนไปใช้โดเมนด้านสุขภาพและแม้จะมีงานที่ยอดเยี่ยมในมาตรฐานการถ่ายโอนข้อมูลการถ่ายโอนข้อมูลทั้งหมดอยู่ในรูปแบบCSVทั้งสำหรับการรายงานไปยังองค์กรภายนอกและสำหรับการย้ายข้อมูลเมื่อใช้ระบบใหม่ น่าเสียดายที่การใช้ CSV เป็นสาเหตุของการเกิดข้อผิดพลาดซ้ำ ๆ กันอย่างไม่มีที่สิ้นสุดโดยไม่มีเวลานักพัฒนาเท่ากัน (การหลบหนีไม่ดีการจัดการช่องว่างเป็นโมฆะ ฯลฯ ) ฉันรู้ว่าเราสามารถทำได้ดีกว่าและสิ่งใดระหว่าง JSON และ XML (ขึ้นอยู่กับตัวอย่าง) จะดี (ส่วนใหญ่เวลานี้เป็นข้อมูลไปจาก MS SQLserver 2005 หนึ่งไปยังอีก!) ฉันรู้สึกราวกับว่าทุกครั้งที่ฉันเห็นสิ่งนี้เกิดขึ้น แล้วทำไมเราถึงต้องลำกันต่อไปเรื่อย ๆ ? เมื่อไหร่เราจะหยุด

3
จะจำลองเหตุการณ์ที่ทำให้เกิดข้อยกเว้นเพื่อทดสอบบล็อกลอง / จับได้อย่างไร
ฉันเข้าใจวิธีการทำงานของข้อยกเว้นและวิธีการจับและจัดการกับมันใน C # แต่ฉันจะจำลองเหตุการณ์ที่อาจทำให้เกิดข้อยกเว้นเพื่อให้แน่ใจว่าถูกจับได้อย่างถูกต้องหรือไม่ ตัวอย่างเช่นเป็นไปได้หรือไม่ที่จะเรียกใช้แอปพลิเคชันในรูปแบบของเตียงทดสอบที่สามารถจำลองปัญหาเครือข่ายปัญหาฐานข้อมูลและอื่น ๆ ได้หรือไม่? ข้อยกเว้นโดยธรรมชาติของพวกเขาดูเหมือนจะยากที่จะทำซ้ำจึงทำให้ยากที่จะมั่นใจได้ว่ารหัสของคุณสามารถรับมือกับพวกเขาได้ แม้ว่าฉันส่วนใหญ่จะพัฒนาโดยใช้ C # /. NET / Visual Studio คำตอบหรือแหล่งข้อมูลที่เกี่ยวข้องกับภาษาอื่นอาจมีประโยชน์
14 c#  testing  exceptions 

5
สถาปัตยกรรม (โครงสร้าง) - มุ่งเน้นกับโครงสร้างโครงการที่มุ่งเน้นคุณสมบัติ
ฉันมีส่วนเกี่ยวข้องกับโครงการมีโครงสร้างไฟล์ / โฟลเดอร์ของโครงการที่มุ่งเน้นสถาปัตยกรรม: Root |____ Node1 |____ Event Handlers | |___ <all event handlers of project> |____ Events | |___ <all events of project> |____ Request Handlers | |___ <all request handlers of project> |____ Requests | |___ <all requests of project> |____ ... มันชัดเจนจากมุมมองทางสถาปัตยกรรมของระบบ (ได้รับการเสนอโดยทีมพัฒนา) มันเป็นโครงสร้างที่มุ่งเน้นคุณสมบัติที่ได้รับการเสนอโดยทีมนักออกแบบ: Root |____ Feature …

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

3
DAO ควรเป็นแบบเดี่ยวหรือไม่?
ฉันกำลังพัฒนา RESTful API และฉันคิดว่ามันสะดวกที่จะใช้ DAO สำหรับทรัพยากรของฉันเพราะแม้ว่าฉันจะใช้หน่วยความจำเพื่อเก็บไว้ แต่ฉันไม่ต้องการปิดประตูให้ใครก็ตามที่ใช้ห้องสมุดของฉันถ้าพวกเขาตัดสินใจที่จะใช้ การใช้ฐานข้อมูลสำหรับ DAO คำถามของฉันคือว่า DAO ควรเป็นซิงเกิลตันหรือไม่ หากไม่ใช่บริการจะมีตัวอย่างของ DAO และจะมีลักษณะเช่นนี้: @Path("eventscheduler") public class EventSchedulerService { private IEventSchedulerDao dao = new EventSchedulerDao(); // in case a different implementation is to be used public void setEventSchedulerDao(IEventSchedulerDao dao) { this.dao = dao; } @Path("{uniqueName}") @GET @Produces(MediaType.APPLICATION_JSON) public Tournament …

1
สิทธิ์การใช้งาน MIT เทียบกับครีเอทีฟคอมมอนส์สำหรับรูปภาพและสินทรัพย์อื่น
ใครช่วยกรุณาแก้ไขความสับสนสิทธิ์ใช้งานเฉพาะสำหรับฉัน ฉันมักงงงวยกับการทำงานของลิขสิทธิ์ซอฟต์แวร์ ฉันต้องการให้ทุกคนสามารถใช้ซอฟต์แวร์ของฉันด้วยข้อ จำกัด น้อยที่สุดและไม่มีการรับประกัน ดังนั้นฉันแค่ใช้สิทธิ์ใช้งานแบบอนุญาต (MIT License เป็นตัวเลือกของฉัน) และเขียนสิ่งที่ต้องการ โครงการนี้รวมถึงไฟล์และเนื้อหาทั้งหมดได้รับอนุญาตภายใต้เงื่อนไขของ MIT License ดู LICENSE.txt สำหรับรายละเอียด ใน README ของโครงการ ฉันสับสนเกี่ยวกับวิธีการทำงานของ "ส่วน" ของโครงการ (ไฟล์เสริม; ไฟล์ที่ไม่ใช่ไฟล์ต้นฉบับ) ฉันต้องการข้อกำหนดสิทธิ์การใช้งานเดียวกันกับทุกไฟล์ในโครงการของฉันรวมถึง ไฟล์สร้างระบบ / เอกสาร ( MakefileS, CMakeLists.txt, Doxyfileฯลฯ .; ฉันจริงเกือบบางประโยคข้างต้นนำไปใช้กับไฟล์เหล่านั้นไม่ได้หรือไม่) HTML / JavaScript / CSS / XML / ฯลฯ ไฟล์ (เป็นลิขสิทธิ์เหล่านั้นด้วยหรือไม่ฉันไม่แน่ใจฉันต้องการให้ผู้อื่นตรวจสอบพวกเขารับเวอร์ชันของตนเอง ฯลฯ ) รูปภาพและสินทรัพย์ไบนารีอื่น ๆ (ฉันต้องการให้ผู้คนสามารถใช้พวกเขาในงานนำเสนอและอื่น …
14 licensing 

7
รูปแบบของโรงงานละเมิดหลักการเปิด / ปิดหรือไม่?
เหตุใด ShapeFactory นี้จึงใช้คำสั่งแบบมีเงื่อนไขเพื่อกำหนดว่าวัตถุใดที่จะยกตัวอย่าง เราไม่จำเป็นต้องปรับเปลี่ยน ShapeFactory หากเราต้องการเพิ่มคลาสอื่น ๆ ในอนาคตหรือไม่ ทำไมสิ่งนี้ถึงไม่ละเมิดหลักการเปิดที่เปิดอยู่?

2
กลยุทธ์ C + DRY แห้ง
สำหรับการหลีกเลี่ยงการทำซ้ำที่ไม่เกี่ยวข้องกับ C ++ const มีกรณีที่ const_cast จะทำงานได้ แต่ฟังก์ชั่น const ส่วนตัวที่ส่งกลับไม่ใช่ const จะไม่? ในรายการC ++ ของ Scott Meyers ที่มีประสิทธิผล 3 เขาแนะนำว่า const_cast ที่รวมกับการส่งสัญญาณคงที่นั้นเป็นวิธีที่มีประสิทธิภาพและปลอดภัยในการหลีกเลี่ยงรหัสซ้ำเช่น const void* Bar::bar(int i) const { ... return variableResultingFromNonTrivialDotDotDotCode; } void* Bar::bar(int i) { return const_cast<void*>(static_cast<const Bar*>(this)->bar(i)); } เมเยอร์สอธิบายต่อไปว่าการใช้ฟังก์ชัน const เรียกฟังก์ชันที่ไม่ใช่ const นั้นเป็นอันตราย รหัสด้านล่างคือตัวอย่างที่แสดงให้เห็น: ตรงกันข้ามกับข้อเสนอแนะของเมเยอร์สบางครั้ง const_cast รวมกับตัวบล็อกคงเป็นอันตราย บางครั้งฟังก์ชั่น …
14 c++  dry  const 

4
อะไรคือความแตกต่างระหว่าง Callable <T> และซัพพลายเออร์ของ Java 8 <T>?
ฉันเปลี่ยนมาใช้ Java จาก C # หลังจากได้รับคำแนะนำจาก CodeReview ดังนั้นเมื่อฉันมองไปที่ LWJGL สิ่งหนึ่งที่ฉันจำได้ก็คือทุกการเรียกจะDisplayต้องดำเนินการในเธรดเดียวกันกับDisplay.create()วิธีที่เรียกใช้ เมื่อนึกถึงสิ่งนี้ฉันได้สร้างคลาสที่มีลักษณะเช่นนี้ขึ้นมา public class LwjglDisplayWindow implements DisplayWindow { private final static int TargetFramesPerSecond = 60; private final Scheduler _scheduler; public LwjglDisplayWindow(Scheduler displayScheduler, DisplayMode displayMode) throws LWJGLException { _scheduler = displayScheduler; Display.setDisplayMode(displayMode); Display.create(); } public void dispose() { Display.destroy(); } @Override public …
14 java 

6
แต่ละวิธีควรมีคลาสทดสอบ JUnit แยกต่างหากหรือไม่?
ฉันกำลังเขียนการทดสอบหน่วย JUnit สำหรับชั้นเรียนของฉัน มันจะดีกว่าถ้ามีคลาสแยกสำหรับแต่ละวิธีหรือมีคลาสทดสอบเพียงหนึ่งสำหรับทุกคลาสจริง

4
ทำไม C ++ ไม่อนุญาตให้คุณรับที่อยู่ของนวกรรมิก?
มีเหตุผลที่เฉพาะเจาะจงหรือไม่ที่จะทำให้ภาษาแตกต่างจากแนวคิดหรือเป็นเหตุผลเฉพาะที่ทำให้ไม่สามารถใช้ภาษาได้ในบางกรณี? การใช้งานจะเป็นกับผู้ประกอบการใหม่ แก้ไข:ฉันจะให้ความหวังในการรับ "โอเปอเรเตอร์ใหม่" และ "โอเปอเรเตอร์ใหม่" ตรงไปตรงมา ประเด็นของคำถามคือ: ทำไมคอนสตรัคเตอร์ถึงพิเศษ ? โปรดจำไว้ว่าข้อกำหนดทางภาษาบอกเราว่าอะไรถูกกฎหมาย แต่ไม่จำเป็นต้องมีคุณธรรม โดยทั่วไปแล้วสิ่งที่ถูกกฎหมายจะได้รับแจ้งจากสิ่งที่มีเหตุผลสอดคล้องกับส่วนที่เหลือของภาษาสิ่งที่ง่ายและรัดกุมและสิ่งที่เป็นไปได้สำหรับคอมไพเลอร์ที่จะใช้ เหตุผลที่เป็นไปได้ของคณะกรรมการมาตรฐานในการชั่งน้ำหนักปัจจัยเหล่านี้มีเจตนาและน่าสนใจ - ดังนั้นคำถาม
14 c++ 

3
Model-View-Controller: ผู้ใช้โต้ตอบกับวิวหรือกับคอนโทรลเลอร์หรือไม่ [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันเพิ่งเรียนรู้เกี่ยวกับรูปแบบการออกแบบ MVC ฉันเรียนรู้จากหนังสือรูปแบบการออกแบบหัวแรก ตามหนังสือเล่มนี้ (ถ้าฉันเข้าใจถูกต้อง): โมเดลเป็นแอปพลิเคชันและข้อมูลส่วนใหญ่ มุมมองนั้นเป็น GUI ที่แสดงแบบจำลองแก่ผู้ใช้ ผู้ควบคุมมีหน้าที่รับผิดชอบในการ 'ไกล่เกลี่ย' และทำหน้าที่เป็น 'คนกลาง' ระหว่างมุมมองและโมเดล มุมมองรายงานไปยังตัวควบคุมที่ผู้ใช้ทำการกระทำและตัวควบคุมแปลเป็นวิธีการเรียกใช้ในแบบจำลอง อย่างไรก็ตามมีสถานที่มากมายบนเว็บที่ขัดแย้งกับสิ่งที่ฉันเข้าใจจากหนังสือเล่มนั้น พวกเขาอ้างว่าโดยทั่วไปผู้ใช้โต้ตอบกับตัวควบคุมไม่ใช่มุมมอง อันไหนจริงหรือธรรมดากว่ากัน? ผู้ใช้โต้ตอบกับคอนโทรลเลอร์โดยตรงหรือใช้กับมุมมองโดยตรงหรือไม่ วิธีการทั้งสองเป็นที่ยอมรับหรือไม่? ข้อไหนเป็นเรื่องธรรมดา?

3
MVVM และรูปแบบการบริการ
ฉันกำลังสร้างแอปพลิเคชัน WPF โดยใช้รูปแบบ MVVM ในตอนนี้ viewmodels ของฉันเรียกเลเยอร์บริการเพื่อเรียกคืนโมเดล (ความเกี่ยวข้องกับ viewmodel) และแปลงเป็น viewmodels ฉันใช้ตัวสร้างการฉีดเพื่อส่งผ่านบริการที่จำเป็นสำหรับโมเดลวิวเวอร์ มันทดสอบได้ง่ายและทำงานได้ดีสำหรับ viewmodels ที่มีการพึ่งพาน้อย แต่ทันทีที่ฉันพยายามสร้าง viewModels สำหรับรุ่นที่ซับซ้อนฉันมี Constructor ที่มีบริการมากมายแทรกอยู่ (หนึ่งเพื่อดึงการอ้างอิงแต่ละรายการและรายการค่าที่มีทั้งหมด เพื่อผูกกับ itemsSource เป็นต้น) ฉันสงสัยว่าจะจัดการกับบริการหลายอย่างเช่นนั้นได้อย่างไรและยังมีวิวเวอร์โมเดลที่ฉันสามารถทดสอบหน่วยได้อย่างง่ายดาย ฉันกำลังคิดถึงวิธีแก้ปัญหาบางอย่าง: การสร้างบริการแบบซิงเกิล (IServices) ที่มีบริการทั้งหมดที่มีอยู่เป็นส่วนต่อประสาน ตัวอย่าง: Services.Current.XXXService.Retrieve (), Services.Current.YYYService.Retrieve () ด้วยวิธีนี้ฉันไม่มีคอนสตรัคเตอร์ขนาดใหญ่ที่มีพารามิเตอร์บริการจำนวนมากในตัวพวกเขา การสร้างส่วนหน้าสำหรับบริการที่ใช้โดย viewModel และส่งผ่านออบเจ็กต์นี้ใน ctor ของ viewmodel ของฉัน แต่แล้วฉันจะต้องสร้างซุ้มสำหรับแต่ละมุมมองเชิงซ้อนของฉันและมันอาจจะค่อนข้างมาก ... คุณคิดว่าเป็นวิธีที่ "ถูกต้อง" ในการใช้งานสถาปัตยกรรมประเภทนี้?

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