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

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

4
CQRS / MediatR นั้นคุ้มค่าหรือไม่เมื่อพัฒนาแอปพลิเคชัน ASP.NET
ฉันได้ดู CQRS / MediatR เมื่อเร็ว ๆ นี้ แต่ยิ่งฉันเจาะลึกยิ่งฉันชอบมากเท่าไร บางทีฉันอาจเข้าใจผิดบางอย่าง / ทุกอย่าง ดังนั้นมันจึงยอดเยี่ยมโดยอ้างว่าลดคอนโทรลเลอร์ของคุณลงไป public async Task<ActionResult> Edit(Edit.Query query) { var model = await _mediator.SendAsync(query); return View(model); } ซึ่งเข้ากันได้อย่างสมบูรณ์แบบกับชุดควบคุมแบบบาง อย่างไรก็ตามจะมีรายละเอียดที่สำคัญออกไปบ้าง ให้ดูที่การLoginกระทำเริ่มต้นจากโครงการ MVC ใหม่ public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { // This doesn't …

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

3
เป้าหมายการรวบรวมคืออะไร?
ฉันได้ยินคำนี้เรื่อย ๆ และการค้นหาของ Google ทั้งหมดนำฉันไปสู่บทความเกี่ยวกับคอมไพเลอร์ ฉันแค่อยากจะเข้าใจความหมายของเป้าหมายการรวบรวมคำว่า: | ปรับปรุง: เพื่อให้บริบท: ฉันได้ยินมันบอกว่าการชุมนุมของเว็บเป็นเป้าหมายที่รวบรวมสำหรับภาษาอื่น ๆ เช่น C, C ++, สนิม ฯลฯ
17 compiler 

3
เหตุผลในการตั้งชื่อ. NETs Select (Map) และ Aggregate (ลด) คืออะไร?
ในภาษาการเขียนโปรแกรมอื่น ๆ ฉันได้เห็น Map and Reduce และสิ่งเหล่านี้เป็นสิ่งสำคัญสำหรับการเขียนโปรแกรมการทำงาน ฉันไม่พบเหตุผลหรือประวัติว่าทำไม LINQ จึงมีAggregate(เหมือนReduce) และSelect(เหมือนกัน)Map )? ทำไมฉันถึงถามว่ามันใช้เวลาพอสมควรที่จะเข้าใจว่ามันเป็นสิ่งเดียวกันและฉันอยากรู้ว่าอะไรคือเหตุผลสำหรับเรื่องนี้

2
เหตุใดจึงไม่มี batching syscall ทั่วไปใน Linux / BSD
พื้นหลัง: ค่าใช้จ่ายในการโทรของระบบมีขนาดใหญ่กว่าค่าใช้จ่ายในการเรียกใช้ฟังก์ชัน (ประมาณช่วงจาก 20-100x) ส่วนใหญ่เกิดจากการสลับบริบทจากพื้นที่ผู้ใช้เป็นพื้นที่เคอร์เนลและด้านหลัง มันเป็นเรื่องธรรมดาที่ฟังก์ชั่นแบบอินไลน์เพื่อประหยัดค่าใช้จ่ายการเรียกใช้ฟังก์ชั่นและการเรียกใช้ฟังก์ชั่นมีราคาถูกกว่า syscalls มาก เหตุผลที่ผู้พัฒนาต้องการหลีกเลี่ยงบางส่วนของการเรียกใช้ระบบโดยดูแลการดำเนินการในเคอร์เนลให้มากที่สุดใน syscall เดียวเท่าที่จะทำได้ ปัญหา: นี้ได้สร้างจำนวนมาก (ฟุ่มเฟือย?) สายระบบเช่นsendmmsg () , recvmmsg ()เช่นเดียวกับ chdir เปิด lseek และ / หรือการรวมกัน symlink ที่ชอบ: openat, mkdirat, mknodat, fchownat, futimesat, newfstatat, unlinkat, fchdir, ftruncate, fchmod, renameat, linkat, symlinkat, readlinkat, fchmodat, faccessat, lsetxattr, fsetxattr, execveat, lgetxattr, llistxattr, lremovexattr, fremovexattr, …

2
ประโยชน์ของการใช้เซิร์ฟเวอร์ API และ UI แยกต่างหากสำหรับเว็บแอปพลิเคชัน
ที่ทำงานเรามีแอปพลิเคชั่นภายในขนาดใหญ่ซึ่งอยู่ระหว่างการพัฒนามาเกือบ 2 ปีแล้ว ฉันเพิ่งเข้าร่วมโครงการและสถาปัตยกรรมบางอย่างทำให้ฉันงุนงงเล็กน้อยดังนั้นฉันหวังว่าจะมีใครบางคนที่นี่สามารถให้คำแนะนำก่อนที่ฉันจะออกไปถามสถาปนิกกับคำถามเหล่านี้ได้ ) คำขอโทษของฉันถ้าด้านล่างยาวหน่อยฉันแค่อยากจะลองวาดภาพที่ดีว่าระบบคืออะไรก่อนที่ฉันจะถามคำถาม :) วิธีการติดตั้งระบบคือเรามีเว็บแอปพลิเคชั่นหลักหนึ่งตัว (asp.net, AngularJS) ซึ่งส่วนใหญ่จะรวบรวมข้อมูลจากบริการอื่น ๆ ดังนั้นโดยทั่วไปมันเป็นโฮสต์สำหรับแอปพลิเคชัน AngularJS มีตัวควบคุม MVC หนึ่งตัวที่บูตด้านไคลเอนต์จากนั้นตัวควบคุมอื่น ๆ คือตัวควบคุม WebAPI การโทรจากฝั่งไคลเอ็นต์นั้นควบคุมโดยตัวควบคุมเหล่านี้ซึ่งจะปรับใช้กับกล่องที่ไม่ทำอะไรเลยนอกจากโฮสต์เว็บแอปพลิเคชัน ขณะนี้เรามี 4 กล่องดังกล่าว อย่างไรก็ตามการโทรนั้นจะถูกส่งไปยังแอปพลิเคชั่น WebAPI อีกชุดหนึ่งในท้ายที่สุด (โดยทั่วไปจะเป็นการต่อพื้นที่ธุรกิจเช่นความปลอดภัยข้อมูลลูกค้าข้อมูลผลิตภัณฑ์ ฯลฯ ) WebAPIs เหล่านี้ทั้งหมดได้รับการปรับใช้ร่วมกันกับกล่องเฉพาะเช่นกัน เรายังมี 4 กล่องเหล่านี้ ด้วยข้อยกเว้นเดียว WebAPIs เหล่านี้จะไม่ถูกใช้โดยส่วนอื่น ๆ ขององค์กรของเรา ในที่สุด WebAPIs เหล่านี้ก็ยังเรียกใช้บริการ "back end" อีกชุดซึ่งโดยทั่วไปจะเป็นบริการ asmx หรือ wcf แบบดั้งเดิมที่ตบอยู่ด้านบนของระบบ …

3
จะใช้การทดสอบหน่วยเมื่อใช้ BDD ได้อย่างไร
ฉันพยายามที่จะเข้าใจ BDD ฉันอ่านบทความแล้วและฉันเข้าใจว่า BDD คือ "ขั้นตอนต่อไป" จาก TDD ฉันบอกว่าเพราะฉันพบว่าทั้งคู่มีความคล้ายคลึงกันมากและอย่างที่ฉันสามารถอ่านได้ในบทความนี้ BDD เกิดมาเพื่อปรับปรุงจาก TDD เยี่ยมมากฉันชอบความคิดจริงๆ มีจุดหนึ่งที่ใช้งานได้จริงที่ฉันไม่ได้รับคิดว่า: มีไฟล์. Feature ซึ่ง BA จะเขียนพฤติกรรมที่คาดหวังไว้ทั้งหมดซึ่งระบบจะมี ในฐานะที่เป็นปริญญาตรีเขาไม่มีความคิดว่าระบบจะสร้างอย่างไรดังนั้นเราจะเขียนดังนี้: + สถานการณ์ที่ 1: บัญชีอยู่ในเครดิต + รับบัญชีเป็นเครดิต และบัตรถูกต้อง และตัวจ่ายประกอบด้วยเงินสด เมื่อลูกค้าขอเงินสด จากนั้นตรวจสอบให้แน่ใจว่าบัญชีเดบิตและตรวจสอบให้แน่ใจว่าจ่ายเงินสดแล้ว และให้แน่ใจว่าบัตรจะถูกส่งกลับ ตกลงนี่เป็นสิ่งที่ดี แต่มีหลายส่วนของระบบที่จะทำงานร่วมกันเพื่อให้สามารถเกิดขึ้นได้ (คิดว่าบัญชี obj, เครื่องจ่าย obj, ลูกค้า obj และอื่น ๆ ) สำหรับฉันนี่ดูเหมือนการทดสอบการรวมเข้าด้วยกัน ฉันต้องการทดสอบยูนิต ฉันจะทดสอบรหัสที่ตรวจสอบว่าเครื่องจ่ายมีเงินได้อย่างไร หรือว่าเงินสดจ่าย? หรือว่าบัญชีถูกหักบัญชีเมื่อจำเป็น? ฉันจะผสมการทดสอบหน่วยกับการทดสอบ "สร้างโดย BA" …
17 unit-testing  bdd 

4
ทำไม UTF-8 ถึงเสียหลายบิตในการเข้ารหัส
ตามบทความ Wikipedia , UTF-8 มีรูปแบบนี้: รหัสแรกรหัสล่าสุดไบต์ไบต์ 1 ไบต์ 2 ไบต์ 3 ไบต์ 4 จุดจุดที่ใช้ U + 0000 U + 007F 1 0xxxxxxx U + 0080 U + 07FF 2 110xxxxx 10xxxxxx U + 0800 U + FFFF 3 1110xxxx 10xxxxxx 10xxxxxx U + 10000 U + 1FFFFF 4 11110xxx 10xxxxxx …

4
เหตุใดจึงไม่มีตัวแก้ไขการเข้าถึง 'คลาสย่อยเท่านั้น' ใน Java
ใน Java มีตัวดัดแปลงการเข้าถึงที่ใช้ได้สี่วิธีสำหรับวิธีการ: public - คลาสใด ๆ สามารถใช้วิธีนี้ protected - คลาสในแพ็คเกจเดียวกันและคลาสย่อยในแพ็คเกจใด ๆ สามารถใช้วิธีนี้ได้ private - คลาสนี้เท่านั้นที่สามารถใช้วิธีนี้ no modifier ("แพ็คเกจส่วนตัว") - เฉพาะคลาสในแพ็คเกจเดียวกันเท่านั้นที่สามารถใช้วิธีนี้ได้ สิ่งที่เกิดขึ้นบ่อยครั้งคือฉันต้องการมีวิธีการที่มีประโยชน์ในซูเปอร์คลาสซึ่งคลาสย่อยทั้งหมดสามารถใช้ได้ แต่มันจะไม่สมเหตุสมผลสำหรับคลาสอื่น ๆ ในการเข้าถึงวิธีการนี้ ดังนั้นฉันจึงต้องประกาศวิธีการที่มีประโยชน์เหล่านี้ในซูเปอร์คลาสpublicหรือprotectedซึ่งเปิดเผยให้คลาสอื่น ๆ ทั้งหมดอย่างน้อยในแพ็คเกจ แม้ว่าคลาสย่อยเหล่านี้จะถูกใช้เพื่อการใช้งานเท่านั้น มีเหตุผลที่ไม่มีsubclasses-onlyตัวดัดแปลงการเข้าถึงใน Java หรือไม่? ดูเหมือนแปลกมากสำหรับฉัน ฉันพลาดอะไรไปรึเปล่า? นอกจากนี้subclasses-onlyตัวดัดแปลงการเข้าถึงจะมีประโยชน์เมื่อคุณต้องการเปิดเผยตัวแปรเฉพาะคลาสย่อย ซึ่งสำหรับฉันเกิดขึ้นมาก

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

2
จะเขียนเซิร์ฟเวอร์ HTTP ได้อย่างไร?
ตามที่ชื่อบอกว่าฉันต้องการเขียนเซิร์ฟเวอร์ HTTP คำถามของฉันคือสิ่งนี้ฉันจะทำสิ่งนี้ได้อย่างไร ฉันรู้ว่ามันฟังดูธรรมดามากและ "ระดับสูง" ด้วย แต่ก็มีวิธีหนึ่งสำหรับความบ้าคลั่งของฉัน ฉันเชื่อว่าคำตอบของคำถามนี้คือฉันไม่เชื่อเรื่องพระเจ้า ความหมายไม่ว่าฉันจะใช้ภาษาใด (เช่น C, C ++, Java ฯลฯ ) คำตอบควรเหมือนกัน ฉันมีความคิดทั่วไปว่ามันควรจะทำงานอย่างไร: เปิดซ็อกเก็ตที่พอร์ต 80 รอให้ลูกค้าทำการร้องขอ อ่านคำขอ (เช่นบุคคลนี้ต้องการหน้า "contact-us.html") ค้นหาและอ่าน "contact-us.html" ส่งส่วนหัว html จากนั้นส่งเนื้อหาของ "contact-us.html" เสร็จสิ้น อย่างที่ฉันพูดฉันเชื่อว่านี่เป็นกระบวนการ แต่ฉันไม่แน่ใจ 100% สิ่งนี้ทำให้ฉันเป็นหัวใจของคำถาม บุคคลค้นหาข้อมูลนี้ได้อย่างไรหรือที่ไหน? ถ้าฉันไม่ต้องการเขียนเฉพาะเซิร์ฟเวอร์ HTTP จะเกิดอะไรขึ้นถ้าฉันต้องการเขียนเซิร์ฟเวอร์ FTP เซิร์ฟเวอร์แชทโปรแกรมดูรูปภาพ ฯลฯ บุคคลค้นหาขั้นตอน / กระบวนการที่แน่นอนที่จำเป็นในการสร้างเซิร์ฟเวอร์ HTTP ที่ใช้งานได้อย่างไร เพื่อนร่วมงานคนหนึ่งบอกฉันเกี่ยวกับส่วนหัว html ดังนั้นฉันจะไม่มีทางรู้เรื่องนี้เลยถ้าไม่มีเขา …

4
ส่งต่อการประกาศรวมถึง
Reduce the number of #include files in header files. It will reduce build times. Instead, put include files in source code files and use forward declarations in header files. ฉันอ่านมันที่นี่ http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CodingStyle.html ดังนั้นมันบอกว่าถ้าคลาส (คลาส A) ในไฟล์ส่วนหัวไม่จำเป็นต้องใช้คำจำกัดความที่แท้จริงของบางคลาส (คลาส B) ในเวลานั้นเราสามารถใช้การประกาศไปข้างหน้าแทนการรวมไฟล์ส่วนหัว (คลาส B) โดยเฉพาะ คำถาม: ถ้าคลาส (คลาส A) ในส่วนหัวถ้าไม่ได้ใช้คำจำกัดความที่แท้จริงของคลาสเฉพาะ (คลาส B) ดังนั้นการประกาศล่วงหน้าจะช่วยลดเวลาในการคอมไพล์ได้อย่างไร
17 c++  coding-style 

4
สถาปัตยกรรมข้อมูลสำหรับการวัดบันทึกเหตุการณ์?
บริการของฉันมีกิจกรรมของผู้ใช้จำนวนมากอย่างต่อเนื่องและเราต้องการทำสิ่งต่าง ๆ เช่น "การนับเหตุการณ์ประเภทTตั้งแต่วันที่D " เรากำลังพยายามตัดสินใจขั้นพื้นฐานสองประการ: จะเก็บอะไรดี? การจัดเก็บทุกเหตุการณ์เทียบกับการจัดเก็บมวลรวมเท่านั้น (สไตล์บันทึกเหตุการณ์) บันทึกทุกเหตุการณ์และนับในภายหลังกับ (สไตล์อนุกรมเวลา) จัดเก็บ "การนับเหตุการณ์อีสำหรับวันที่D " ที่รวบรวมไว้ทุกวัน จะเก็บข้อมูลที่ไหน ในฐานข้อมูลเชิงสัมพันธ์ (โดยเฉพาะ MySQL) ในฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์ (NoSQL) ในไฟล์บันทึกการทำงานแบบแบน (รวบรวมจากส่วนกลางผ่านเครือข่ายผ่านทางsyslog-ng) มาตรฐานการปฏิบัติคืออะไรที่ฉันสามารถอ่านเพิ่มเติมเกี่ยวกับการเปรียบเทียบระบบประเภทต่าง ๆ ได้ รายละเอียดเพิ่มเติม: สตรีมเหตุการณ์ทั้งหมดมีขนาดใหญ่อาจมีหลายแสนรายการต่อวัน แต่ความต้องการในปัจจุบันของเราเพียงเพื่อนับเหตุการณ์บางประเภทที่อยู่ภายใน เราไม่จำเป็นต้องเข้าถึงข้อมูลดิบหรือผลการรวบรวมแบบเรียลไทม์ IMHO "บันทึกเหตุการณ์ทั้งหมดไปยังไฟล์รวบรวมข้อมูลในภายหลังเพื่อกรองและรวมสตรีม" เป็นวิธีมาตรฐาน UNIX ที่สวยงาม แต่เพื่อนร่วมทาง Rails-y ของฉันดูเหมือนจะคิดว่าไม่มีอะไรจริงเว้นแต่ว่ามันจะอยู่ใน MySQL

3
ทำไมคำสั่ง“ ฆ่า” จึงเรียกว่า
เหตุใดจึงตัดสินใจเรียกkillคำสั่ง "ฆ่า" ฉันหมายความว่าใช่ยูทิลิตี้นี้มักจะใช้เพื่อยุติกระบวนการ แต่มันสามารถนำมาใช้เพื่อส่งสัญญาณใด ๆ มันสับสนเล็กน้อยใช่ไหม อาจมีเหตุผลทางประวัติศาสตร์บางอย่าง ทั้งหมดที่ฉันรู้จากman killคำสั่งนี้ปรากฏในเวอร์ชัน 3 AT&T UNIX

4
การประกาศตัวแปรส่งคืนใน c # methods เทียบกับการคืนค่าโดยตรง
ในการถกเถียงเกี่ยวกับตัวแปรส่งคืนสมาชิกบางคนในทีมต้องการวิธีการส่งคืนผลลัพธ์โดยตรงไปยังผู้โทรในขณะที่คนอื่น ๆ ต้องการประกาศตัวแปรส่งคืนที่ส่งกลับไปยังผู้โทรแล้ว (ดูตัวอย่างโค้ดด้านล่าง) อาร์กิวเมนต์หลังคืออนุญาตให้นักพัฒนาที่ทำการดีบั๊กโค้ดเพื่อค้นหาค่าส่งคืนของเมธอดก่อนที่มันจะส่งกลับไปยังผู้เรียกดังนั้นจึงทำให้โค้ดเข้าใจง่ายขึ้น: นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งที่การเรียกใช้เมธอดนั้น มีแนวทางใดบ้างที่มีประสิทธิภาพมากที่สุดและ / หรือมีเหตุผลอื่นใดที่ทำให้เราควรนำสไตล์หนึ่งมาใช้กับสไตล์อื่น? ขอบคุณ private bool Is2(int a) { return a == 2; } private bool Is3(int a) { var result = a == 3; return result; }

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