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

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

2
ไปป์ไลน์ไมโครโปรเซสเซอร์ที่ทันสมัยทั่วไปใช้เวลานานเท่าใด
ฉันได้เรียนรู้เกี่ยวกับการวางท่อ แต่มี 4 ขั้นตอนและ 5 ขั้นตอนและฉันคิดว่าการวางท่อแบบใหม่นั้นมีความยาวและซับซ้อนกว่าในทางปฏิบัติ ท่อทั่วไปจะใช้เวลานานเท่าไหร่และเราสามารถคาดหวังได้ว่าจะเพิ่มขึ้นเท่าไหร่และจุดที่จะไปถึงจุด diminshing จะได้รับผลตอบแทนจากการทำงานเพิ่มขึ้นสำหรับท่อที่ยาวกว่าอยู่ที่ไหน?

2
บริบทและโดเมนที่ถูก จำกัด DDD?
ฉันทำงานในแอปพลิเคชั่นที่ค่อนข้างซับซ้อนด้วยตารางฐานข้อมูล 10 รายการ (Aggregates, Entities / Object Objects) และการใช้ DDD ณ จุดนี้ดูเหมือนว่าโดยทั่วไปแล้ว DDD-Lite หมายถึงมี Application / Domain Services, Domain Model (เอนทิตี, Object Value) และ Repositories ฉันหยิบหนังสือนำ DDD มาใช้และสิ่งแรกที่เขาพูดถึงคือ DDD-Lite และบริบทที่ถูกผูกไว้และเหตุการณ์โดเมนที่หายไปเป็นข้อผิดพลาดแรกซึ่งเป็นเรื่องปกติเมื่อเริ่มต้น DDD ขณะนี้ฉันพยายามจัดรูปแบบโดเมนโดยความสัมพันธ์แบบรวมและใช้เนมสเปซเพื่อสาธิต ฉันไม่เห็นประโยชน์ / ข้อผิดพลาดที่เกี่ยวข้องกับการแยกโครงการ Domain Model ออกเป็นบริบทที่ถูกผูกมัด (ยัง) บางทีมันอาจจะชัดเจนในภายหลัง แต่ฉันต้องการความคิดเห็นเกี่ยวกับชีวิตจริงในบริบทที่ถูกผูกไว้ (และอาจเป็นโดเมนย่อยเป็นต้นหากพวกเขาเชื่อมโยงเข้ากับมัน)

3
เหตุใดจึงไม่เขียนกฎของโปรแกรมลงใน Prolog [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา จากสิ่งที่ฉันได้เห็นจาก Prolog ดูเหมือนว่ามันจะเหมาะสำหรับการสร้างเอ็นจิ้นกฎสำหรับแอพ แต่ฉันไม่เชื่อว่าฉันเคยเห็นเครื่องมือสร้างกฎที่เขียนใน Prolog มีข้อ จำกัด บางอย่างใน Prolog (เช่นอัลกอริทึมการรวบรวมขยะที่ไม่ดี) ที่จะป้องกันไม่ให้มันถูกใช้เพื่อสร้างกฎของเครื่องมือหรือไม่?

4
โดยหลักการแล้วจะสร้างเอ็นจินกฎ / ข้อ จำกัด (ไม่ใช่กราฟิก / ฟิสิกส์) สำหรับเกมได้อย่างไร
ฉันต้องการสร้างเกมง่ายๆคล้ายกับหนังสือที่คุณเลือกเอง ผู้เล่นจะได้รับข้อความบรรยายและเลือกการกระทำของเขาจากรายการความเป็นไปได้ ในทางกลับกันสิ่งนี้นำไปสู่ข้อความบรรยายเรื่องใหม่ infinitum โฆษณา สิ่งเดียวที่จับได้คือขึ้นอยู่กับการตัดสินใจก่อนหน้านี้รายการของความเป็นไปได้ที่อาจแตกต่างกัน ในภาพรวมก่อนหน้านี้ดูเหมือนว่าจะมีคำสั่ง if-else โหลดดังนั้นการอ้างถึงเอ็นจินกฎจะถูกนำมาใช้ แต่มันก็ดูเหมือนเครื่องจักรสถานะ จำกัด สำหรับฉัน ฉันกำลังจะเขียนสิ่งนี้ใน Java หรืออาจจะเป็น Groovy ปัจจุบันฉันสนใจประเด็นเกี่ยวกับแนวคิดมากขึ้นเช่นจะทำอย่างไรในระดับกว้างขึ้น (ผู้คนใช้เกมหมากรุกหรือไพ่อย่างไร?) แต่ก็มีคำแนะนำบางอย่างเกี่ยวกับห้องสมุดเฉพาะด้วยเช่นกัน เห็นได้ชัดว่า "เกมเอ็นจิ้น" จากชื่อไม่ได้หมายถึงการตรวจจับการชนหรือกลไกฟิสิกส์ / กราฟิกอื่น ๆ แต่ตรรกะตัดสินใจว่าผู้เล่นตัวเลือกได้ให้สถานการณ์และสถานะปัจจุบันของเขา

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

6
ข้อต่อหลวมในการออกแบบเชิงวัตถุ
ฉันพยายามเรียนรู้ GRASP และฉันพบสิ่งนี้อธิบาย ( ที่หน้า 3 ) เกี่ยวกับการมีเพศสัมพันธ์ต่ำและฉันรู้สึกประหลาดใจมากเมื่อฉันพบสิ่งนี้: พิจารณาวิธีการaddTrackสำหรับAlbumชั้นเรียนสองวิธีที่เป็นไปได้คือ: addTrack( Track t ) และ addTrack( int no, String title, double duration ) วิธีใดลดข้อต่อ อย่างที่สองทำเนื่องจากคลาสที่ใช้คลาส Album ไม่จำเป็นต้องทราบคลาส Track โดยทั่วไปพารามิเตอร์สำหรับเมธอดควรใช้ประเภทฐาน (int, char ... ) และคลาสจากแพ็กเกจ java. * ฉันมักจะพูดพล่ามกับเรื่องนี้; ฉันเชื่อว่าaddTrack(Track t)ดีกว่าaddTrack(int no, String title, double duration)เนื่องจากเหตุผลหลายประการ: มันจะดีกว่าเสมอสำหรับวิธีการที่จะทำให้พารามิเตอร์น้อยลงที่สุดเท่าที่จะเป็นไปได้ (ตาม Clean Code ของลุงบ็อบไม่มีหรืออย่างใดอย่างหนึ่งที่ดีกว่า, 2 ในบางกรณีและ …

1
ข้อเสียของรูปแบบกลางการทำงาน
ฉันกำลังเขียนเครื่องมือเพิ่มประสิทธิภาพสำหรับภาษาที่คล้ายกับ JavaScript และต้องเลือกการแสดงรหัสกลาง ตัวเลือกที่ชัดเจน / ทั่วไปในทุกวันนี้ก็คือStatic Single Assignment (SSA) อย่างไรก็ตามโมเดิร์นคอมไพเลอร์การดำเนินงานใน Cยังกล่าวถึงรูปแบบกลางทำงานซึ่งโดยทั่วไปหมายถึงจะบริสุทธิ์การทำงานสำหรับการแสดงกลาง (บริสุทธิ์ในแง่เดียวของตัวแปรท้องถิ่นข้อมูลกองยังคงไม่แน่นอนและไม่ CPS เพียงตรงไปตรงมาletบล็อกและโทรหาง) และ มีข้อดีบางประการในแง่ของการให้เหตุผลที่ง่ายกว่า สมมุติว่ามันไม่ใช่เกมง่ายๆหรือทุกคนจะใช้การเป็นตัวแทนอยู่แล้วดังนั้นคำถามของฉันคืออะไรรูปแบบการใช้งานกลางที่มีข้อเสียเปรียบเทียบกับ SSA อย่างไร

1
เหตุผลที่จะรอจนถึงครั้งที่สามใน Rule of Three?
ฉันเพิ่งเจอบทความ " Rule of Three " ในวิกิพีเดีย กฎข้อที่สามคือกฎการเปลี่ยนรหัสใหม่ของหัวแม่มือเพื่อตัดสินใจว่าเมื่อใดควรเปลี่ยนชิ้นส่วนของรหัสที่ทำซ้ำโดยขั้นตอนใหม่ มันระบุว่าสามารถคัดลอกรหัสหนึ่งครั้ง แต่เมื่อใช้รหัสเดียวกันสามครั้งมันจะถูกแยกลงในกระบวนการใหม่ กฎดังกล่าวได้รับการแนะนำโดย Martin Fowler ใน Refactoring และอ้างถึง Don Roberts ฉันรู้ว่านี่เป็นเพียงกฎของหัวแม่มือ แต่ทำไมมันแนะนำให้ refactor หลังจากทำซ้ำที่สอง? มีข้อเสียใด ๆ ในการปรับโครงสร้างเมื่อเราเขียนการทำซ้ำครั้งแรก

6
งานในมือของงานที่“ กัดขนาด” ขนานไปกับงานในมือของ“ main” หรือไม่?
หลังจากทำงานเป็นเวลานานกว่าสองปีในโครงสร้างแผนกพัฒนาที่โดดเดี่ยว "หมาป่าโดดเดี่ยว" เรากำลังใช้ Agile SCRUM ยิ่งใหญ่ ฉันชอบเปรียว ในฐานะที่เป็นนักพัฒนาซอฟต์แวร์จะช่วยให้คุณมุ่งเน้นยุ่งและมีประสิทธิผลโดยไม่ต้องมีผู้มีส่วนได้ส่วนเสียจำนวนมากที่ผลักโครงการหลังจากที่ทำโครงการลงที่ลำคอของคุณพร้อมกับความคาดหวังที่พวกเขาทำเมื่อวานนี้ อย่างไรก็ตามมีแง่มุมหนึ่งของการย้ายไปยัง SCRUM เทียบกับ "รุ่น" ปัจจุบันของเราที่ฉันคิดว่าคนที่อยู่นอกการพัฒนาจะไม่ชอบน้อยที่สุด นั่นคือความสามารถในปัจจุบันของพวกเขาที่จะให้เราทำการเปลี่ยนแปลงเล็กน้อย "ในขณะที่คุณรอ" การพัฒนาส่วนใหญ่ของเรานั้นใช้เพื่อการบริโภคภายในองค์กรเท่านั้นและเราส่วนใหญ่อยู่ในอาคารเดียวกัน ดังนั้นจึงเป็นเรื่องธรรมดาสำหรับปีที่หัวหน้าแผนกหรือผู้จัดการที่อื่นมาหา "codebase owner" ของแอปพลิเคชันเฉพาะและขอสิ่งเล็ก ๆ (บางครั้งก็ไม่เล็ก แต่เราค่อนข้างดีที่ไม่ได้ทำสามข้อ - โครงการสัปดาห์โดยยึดตาม "ไดรฟ์ไบต์") แม้แต่เจ้านายของเราก็ถ่ายทอดสิ่งต่าง ๆ ที่เกิดขึ้นกับเขาด้วยวิธีนี้ บ่อยครั้งมากหากเราทำงานใน codebase ที่เป็นปัญหาในเวลานั้นเราก็สามารถเปิดไฟล์ต้นฉบับได้ ด้วยวิธีการพื้นฐานแบบ Agile SCRUM การปรับแต่งเหล่านี้อาจถูกบันทึกว่าเป็นข้อบกพร่อง (เราไม่ตอบสนองความต้องการที่ระบุไว้ในเรื่องที่เคยใช้มาก่อน) หรือเรื่องเล็ก ๆ ใหม่ (เราปฏิบัติตามข้อกำหนดที่ระบุทั้งหมด แต่ข้อกำหนดเหล่านั้นไม่สมบูรณ์ หรือพวกเขาเปลี่ยนหลังจากจัดส่งเมื่อผู้ใช้เห็นคุณลักษณะใหม่) ทั้งสองวิธีนี้ส่วนใหญ่จะเป็นหนึ่งในตัวชี้ที่ส่วนใหญ่ถ้าไม่ zeroes และมีความสำคัญค่อนข้างต่ำ (ระบบสามารถใช้งานได้ในสถานะปัจจุบันของมัน แต่มันจะเป็นเช่นนั้นเย็นมากถ้า ... ) …

10
ทำไมเราต้องการ“ ฟังก์ชั่นโทรกลับ”?
programming in Luaฉันกำลังอ่านหนังสือ มันบอกว่า การปิดให้บริการเป็นเครื่องมือที่มีคุณค่าในหลายบริบท ดังที่เราได้เห็นพวกมันมีประโยชน์ในการโต้แย้งกับฟังก์ชันลำดับสูงเช่นเรียงลำดับ การปิดเป็นสิ่งที่มีค่าสำหรับฟังก์ชั่นที่สร้างฟังก์ชั่นอื่น ๆ เช่นตัวอย่างตัวนับใหม่ กลไกนี้อนุญาตให้โปรแกรม Lua รวมเทคนิคการเขียนโปรแกรมที่ซับซ้อนจากโลกที่ใช้งานได้ การปิดเป็นประโยชน์สำหรับฟังก์ชั่นการโทรกลับเช่นกัน ตัวอย่างทั่วไปที่นี่เกิดขึ้นเมื่อคุณสร้างปุ่มในชุดเครื่องมือ GUI ทั่วไป แต่ละปุ่มมีฟังก์ชั่นการโทรกลับที่จะถูกเรียกเมื่อผู้ใช้กดปุ่ม; คุณต้องการให้ปุ่มต่าง ๆ ทำสิ่งต่าง ๆ เล็กน้อยเมื่อกด ตัวอย่างเช่นเครื่องคิดเลขดิจิตอลต้องการปุ่มที่คล้ายกันสิบปุ่มสำหรับแต่ละหลัก คุณสามารถสร้างแต่ละคนด้วยฟังก์ชั่นเช่นนี้: function digitButton (digit) return Button{label = tostring(digit), action = function () add_to_display(digit) end} end มันดูเหมือนว่าถ้าผมเรียกdigitButtonมันจะกลับaction(นี้จะสร้างปิด) ดังนั้นฉันสามารถเข้าถึงผ่านไปdigitdigitButton คำถามของฉันคือ: Why we need call back functions? what situations can …

7
การสร้างการแสดงออกทางคณิตศาสตร์แบบสุ่ม
ฉันมีความคิดนี้ในหัวของฉันเพื่อสร้างและประเมินนิพจน์ทางคณิตศาสตร์แบบสุ่ม ดังนั้นฉันจึงตัดสินใจที่จะถ่ายภาพและทำอัลกอริธึมก่อนที่จะเขียนโค้ดเพื่อทดสอบ ตัวอย่าง: นี่คือตัวอย่างของนิพจน์ที่ฉันต้องการสร้างแบบสุ่ม: 4 + 2 [easy] 3 * 6 - 7 + 2 [medium] 6 * 2 + (5 - 3) * 3 - 8 [hard] (3 + 4) + 7 * 2 - 1 - 9 [hard] 5 - 2 + 4 * (8 - (5 + …
16 algorithms 

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

6
มันเป็นนิสัยที่ไม่ดีที่จะใช้การสะท้อน (มากกว่า) หรือไม่?
เป็นวิธีปฏิบัติที่ดีหรือไม่หากใช้การสะท้อนกลับหากลดจำนวนรหัสสำเร็จรูปลงอย่างมาก? โดยทั่วไปจะมีการแลกเปลี่ยนระหว่างประสิทธิภาพและความสามารถในการอ่านในด้านหนึ่งและสิ่งที่เป็นนามธรรม / ระบบอัตโนมัติ / การลดรหัสสำเร็จรูปในอีกด้านหนึ่ง แก้ไข: นี่คือตัวอย่างของการใช้การสะท้อนที่แนะนำ เพื่อให้ตัวอย่างเช่นสมมติว่ามีระดับนามธรรมBaseซึ่งมี 10 สาขาและมี 3 subclasses SubclassA, SubclassBและSubclassCแต่ละคนมี 10 สาขาที่แตกต่างกัน พวกเขาทั้งหมดถั่วง่าย ๆ ปัญหาคือคุณได้รับBaseการอ้างอิงสองประเภทและคุณต้องการดูว่าวัตถุที่เกี่ยวข้องนั้นเป็นประเภทเดียวกัน (ย่อย) และเท่ากันหรือไม่ เนื่องจากโซลูชันมีโซลูชันแบบดิบที่คุณตรวจสอบก่อนว่าประเภทเท่ากันหรือไม่จากนั้นตรวจสอบฟิลด์ทั้งหมดหรือคุณสามารถใช้การสะท้อนและดูแบบไดนามิกว่าเป็นประเภทเดียวกันและวนซ้ำทุกวิธีที่ขึ้นต้นด้วย "รับ" (ระเบียบ การกำหนดค่ามากกว่า) เรียกพวกเขาทั้งสองวัตถุและโทรเท่ากับผล boolean compare(Base base1, Base, base2) { if (base1 instanceof SubclassA && base2 instanceof SubclassA) { SubclassA subclassA1 = (SubclassA) base1; SubclassA subclassA2 = …

1
ฉันจะทดสอบบริการเว็บ REST ของฉันได้อย่างไร
ฉันยังใหม่กับการทดสอบหน่วยฉันมีวิธีการทางเว็บที่เหลือเพียงแค่เรียก DB และเติมข้อมูล DTO รหัสหลอกคือ public object GetCustomer(int id) { CustomerDTO objCust = //get from DB return objCust; } ข้อสงสัยของฉันคือวิธีการเขียนการทดสอบสำหรับวิธีการเหล่านี้และประเภทของการทดสอบ (Integration / Unit) ที่จะรวม และสำหรับการทดสอบหน่วยจำเป็นต้องกดฐานข้อมูลหรือไม่ หากเป็นและฉันส่งรหัสลูกค้าและยืนยันน้อยข้อมูลอาจเปลี่ยนแปลงได้ในที่สุดทำให้เกิดความล้มเหลว ฉันคิดว่าฉันขาดอะไรบางอย่างที่นี่เพื่อทำความเข้าใจแนวคิดเหล่านี้

3
BackgroundWorker vs. Async / Await
ฉันยังใหม่กับการพัฒนา C # และต้องการสร้าง UI ที่ตอบสนองได้ดีขึ้น ในการวิจัยเบื้องต้นของฉันฉันเห็นสองวิธีในการบรรลุเป้าหมายนี้: มัลติเธรดร่วมกับคลาส BackgroundWorker ตัวดัดแปลง Async / Await ที่ใหม่กว่า ใหม่กว่าหมายความว่าดีกว่า ความแตกต่างระหว่างสองวิธีคืออะไร หากฉันต้องการสร้างโครงการใหม่ฉันจะเลือกวิธีที่จะไปด้วยได้อย่างไร แก้ไข: บางทีฉันควรระบุ ฉันกำลังสร้างแอปพลิเคชัน Windows Forms ซึ่งข้อมูลที่จำเป็นทั้งหมดจะถูกบันทึก / โหลดบนดิสก์ภายในเครื่อง ฉันจะสื่อสารกับอุปกรณ์ USB หลายแห่งด้วย

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