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

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

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

1
มีข้อมูลที่หนักหน่วงในการสำรอง“ สวิตช์งานของมนุษย์ถือว่าเป็นอันตรายหรือไม่”
Joel Spolsky เขียนโพสต์บล็อกชื่อดัง " Human Task Switches ถือว่าเป็นอันตราย " ในขณะที่ฉันเห็นด้วยกับสถานที่และดูเหมือนสามัญสำนึกฉันสงสัยว่ามีการศึกษาหรือเอกสารสีขาวในเรื่องนี้เพื่อคำนวณค่าใช้จ่ายในสวิทช์งานหรือเป็นหลักฐานพอสมควรหรือไม่

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

12
รหัสแฟนซีสั้นที่แสดงความคิดเห็นกับรหัสที่เข้าใจง่ายอีกต่อไปที่ไม่ใส่โค้ดซึ่งเป็นที่ต้องการ?
บางครั้งอัลกอริทึมสามารถเขียนได้สองวิธี: วิธีที่สั้นและแฟนซี หรือ วิธีที่ยาวและง่ายต่อการเข้าใจ ยกตัวอย่างเช่นที่นี่เป็นอีกต่อไปวิธีที่ง่ายของการคัดลอกสตริงsourceไปdestใน C: *dest = *source; while (*source != '\0') { source++; dest++; *dest = *source; } (true); และนี่เป็นวิธีที่สั้นและแฟนซี // Copy string source to dest while (*dest++ = *source++); ฉันเคยได้ยินและอ่านเสมอว่าควรหลีกเลี่ยงรหัสแฟนซีและฉันมักจะเห็นด้วย แต่ถ้าเราคำนึงถึงความคิดเห็นล่ะสมมติว่าในตัวอย่างข้างต้นเรามีโค้ดที่ไม่มีโค้ดที่เข้าใจง่ายยาวกว่าและเข้าใจง่ายกว่าและมีโค้ดที่สั้นและเข้าใจง่าย รหัสที่ไม่ใช่แฟนซียังคงเป็นที่ต้องการหรือไม่ แก้ไข:หลายคนมีความคิดเห็นเกี่ยวกับชื่อตัวแปรดังนั้นฉันได้แก้ไขโค้ดตัวอย่างเพื่อไม่ให้เป็นปัจจัยเมื่อเลือกมากกว่าอีก ฉันพยายามลบการบ้านสองครั้งในตัวอย่างแรก แต่นั่นทำให้รหัสไม่สามารถอ่านได้ บางทีนี่อาจไม่ใช่ตัวอย่างที่ดีที่สุดเพราะหลายคนพบว่าโค้ด 'แฟนซี' สามารถอ่านและเข้าใจได้ง่ายกว่าโค้ดที่ยาวกว่า แนวคิดก็คือมีรหัสที่ยาวขึ้นหนึ่งรหัสซึ่งง่ายต่อการเข้าใจมากกว่ารหัสสั้น ๆ แต่ซับซ้อน EDIT2:นี่เป็นตัวอย่างใหม่ที่ฉันได้จากSO : ความคิดเห็นเวอร์ชั่นแฟนซี: //direct formula for …

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

5
คุณจะทำอย่างไรเมื่อลูกค้าต้องการแก้ไข Rich Text บนเว็บไซต์ของพวกเขา
ดังที่เราทุกคนรู้แล้วว่าการโจมตี XSS นั้นอันตรายและง่ายต่อการดึงออกมา กรอบงานที่หลากหลายทำให้ง่ายต่อการเข้ารหัส HTML เช่นเดียวกับ ASP.NET MVC <%= Html.Encode("string"); %> แต่จะเกิดอะไรขึ้นเมื่อลูกค้าของคุณต้องการให้พวกเขาสามารถอัปโหลดเนื้อหาของพวกเขาได้โดยตรงจากเอกสาร Microsoft Word นี่คือสถานการณ์: ผู้คนสามารถคัดลอกและวางเนื้อหาจาก Microsoft word ลงในโปรแกรมแก้ไขแบบ WYSIWYG (ในกรณีนี้คือtinyMCE ) จากนั้นข้อมูลจะถูกโพสต์ไปยังหน้าเว็บ เว็บไซต์เป็นสาธารณะ แต่เฉพาะสมาชิกขององค์กรนั้นเท่านั้นที่สามารถเข้าถึงโพสต์ข้อมูลไปยังหน้าเว็บได้ ฉันจะจัดการกับข้อกำหนดเหล่านี้อย่างปลอดภัยได้อย่างไร ขณะนี้ไม่มีการตรวจสอบสิ่งที่ลูกค้าโพสต์ (เนื่องจากมีเพียงผู้ใช้ที่ 'เชื่อถือได้' เท่านั้นที่สามารถโพสต์ได้) แต่ฉันไม่พอใจโดยเฉพาะอย่างยิ่งและต้องการล็อคมันเพิ่มเติมในกรณีที่บัญชีถูกแฮ็ค วิธีการทางความคิดเพียงอย่างเดียวที่ฉันรู้ว่าตรงตามข้อกำหนดเหล่านี้คือการอนุญาตแท็ก HTML และอนุญาตให้ผ่านได้ มีวิธีอื่นอีกไหม? หากไม่เป็นวิธีที่ปลอดภัยในการปล่อยให้ผู้ใช้เก็บข้อมูลลงในฐานข้อมูลในรูปแบบใด แต่แสดงเฉพาะการเข้ารหัสที่ถูกต้องและแยกแท็กที่ไม่ถูกต้อง คำถามที่เกี่ยวข้อง การป้องกัน Cross Script Scripting (XSS)
18 c#  .net  asp.net-mvc 

20
เทคนิคที่น่าประทับใจที่สุดที่ IDE สามารถดึงออกมาได้คืออะไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ IDEs สมัยใหม่มีกลอุบายมากมายเพื่อช่วยในการเขียนโค้ดการปรับโครงสร้างการค้นหา สิ่งเหล่านี้มีประโยชน์มาก แต่ไม่ค่อยมีพวกเขาดูเหมือน "วิเศษ" ของจริงและทำให้ฉันคิดว่า "ว้าว! คุณสามารถตั้งชื่อคุณสมบัติการทำงานอัตโนมัติของรหัส IDE (หรืออื่น ๆ ) ที่น่าประทับใจเมื่อคุณเห็นมันเป็นครั้งแรกได้หรือไม่?
18 ide  automation 

20
VB.Net กับการอภิปราย C # [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันอยู่ในสถานที่ทำงานซึ่งเป็นจุดเริ่มต้นของโครงการคำถามที่ว่า "เราควรใช้ VB.Net หรือ C #" ได้รับการหยิบยกขึ้นมา จริงอยู่ที่ว่ามันเป็นเรื่องธรรมดาที่จะต้องตัดสินใจน้อยกว่าในตอนแรกของ. Net โดยเฉพาะอย่างยิ่งเมื่อพิจารณาถึงแนวโน้มของการบรรจบกันของภาษา ดังนั้นระหว่าง VB.Net และ C # คุณชอบภาษาใดและทำไม
18 c#  .net  vb.net 

6
เหตุใด makefiles จึงควรมีเป้าหมาย“ ติดตั้ง”?
มาจากโลกของซีและซี ++ สร้างระบบส่วนใหญ่มีinstallเป้าหมายสะดุดตา Makefiles (ซึ่งจะมีการแนะนำโดย GNUตัวอย่าง) หรือCMake เป้าหมายนี้คัดลอกไฟล์รันไทม์ (ไฟล์เรียกทำงาน, ไลบรารี, ... ) ในระบบปฏิบัติการ (ตัวอย่างเช่นในC:\Program Files\บน Windows) นี่รู้สึกแฮ็คจริงๆเพราะสำหรับฉันมันไม่ใช่ความรับผิดชอบของระบบบิลด์ที่จะติดตั้งโปรแกรม (ซึ่งจริงๆแล้วเป็นความรับผิดชอบของผู้จัดการระบบปฏิบัติการ / ผู้จัดการแพ็คเกจ) นอกจากนี้ยังหมายถึงระบบการสร้างหรือสคริปต์การสร้างจะต้องรู้ว่าองค์กรของโปรแกรมที่ติดตั้งพร้อมกับตัวแปรสภาพแวดล้อมตัวแปรรีจิสทรี, symlink, สิทธิ์ ฯลฯ ที่ดีที่สุดในการสร้างระบบควรจะมีreleaseเป้าหมายที่จะส่งออกโปรแกรมที่ติดตั้ง (ตัวอย่าง.debหรือ.msi) แล้วขอให้ระบบปฏิบัติการเพื่อติดตั้งโปรแกรมที่ make uninstallนอกจากนี้ยังจะช่วยให้ผู้ใช้สามารถถอนการติดตั้งโดยไม่ต้องพิมพ์ ดังนั้นคำถามของฉัน: ทำไมระบบสร้างมักจะแนะนำให้มีinstallเป้าหมาย

3
เมื่อใดและทำไมพอยน์เตอร์จึงเริ่มมองว่ามีความเสี่ยง
ดูเหมือนว่ามีการเปลี่ยนแปลงอย่างค่อยเป็นค่อยไปในการคิดเกี่ยวกับการใช้พอยน์เตอร์ในภาษาการเขียนโปรแกรมซึ่งกลายเป็นที่ยอมรับกันโดยทั่วไปว่าพอยน์เตอร์นั้นถือว่ามีความเสี่ยง การพัฒนาทางประวัติศาสตร์อะไรสำหรับการเปลี่ยนแปลงในความคิดนี้ มีเหตุการณ์เฉพาะน้ำเชื้อการวิจัยหรือการพัฒนาอื่น ๆ หรือไม่? ตัวอย่างเช่นการมองเพียงผิวเผินย้อนกลับไปที่การเปลี่ยนจาก C เป็น C ++ เป็น Java ดูเหมือนว่าจะแสดงแนวโน้มที่จะเสริมและแทนที่ตัวชี้ทั้งหมดด้วยการอ้างอิงทั้งหมด อย่างไรก็ตามห่วงโซ่ที่แท้จริงของเหตุการณ์อาจมีความซับซ้อนและซับซ้อนมากกว่านี้และไม่ได้เรียงตามลำดับ คุณสมบัติที่ทำให้เป็นภาษาหลักเหล่านั้นอาจมีต้นกำเนิดที่อื่นอาจนานมาก่อน หมายเหตุ: ฉันไม่ได้ถามเกี่ยวกับประโยชน์ที่แท้จริงของพอยน์เตอร์เทียบกับการอ้างอิงกับสิ่งอื่น ฉันมุ่งเน้นไปที่เหตุผลสำหรับการเปลี่ยนแปลงที่เห็นได้ชัดนี้
18 history  pointers 

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

1
การเปรียบเทียบจำนวนเต็มทำงานอย่างไรภายใน
เช่นเมื่อเปรียบเทียบจำนวนเต็มสองจำนวนดังนี้ในภาษา C-like: if (3 > 2) { // do something } การตัดสินว่า 3 นั้นมากกว่า 2 (จริง) หรือไม่ (เท็จ) ที่ทำขึ้นภายใน?

1
การทดสอบหน่วย: การยืนยันที่ถูกเลื่อนออกไปด้วย Linq
ตกลงหรือไม่ที่จะเพิ่มการยืนยันที่ถูกเลื่อนออกไปเช่นนี้ var actualKittens = actualKittens.Select(kitten => { Assert.IsСute(kitten); return kitten }); ทำไม? ดังนั้นฉันสามารถทำซ้ำได้เพียงครั้งเดียวแม้จะมีข้อความที่คาดว่าจะเกิดการรวบรวมที่เป็นรูปธรรมเช่น: CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList()); และมันอาจจะไม่ใช่แค่เลือก แต่เป็นวิธีที่กำหนดตัววนซ้ำและมีการตรวจสอบและตรรกะจำนวนมาก (เช่นการนับและการกรอง) สิ่งที่สงสัยคือความซับซ้อนของการอ่านและการดีบักรหัสดังกล่าวในกรณีที่การทดสอบล้มเหลว

5
RESTful API แสดงถึงการไม่มีสิ่งใด
ลองนึกภาพ API เพื่อระบุว่าบุคคลได้เลือกสัตว์วิญญาณของพวกเขาหรือไม่ พวกมันมีสัตว์วิญญาณเป็นศูนย์หรือหนึ่งตัวเท่านั้น ขณะนี้: /person/{id}/selectedSpiritAnimal เมื่อเลือกสัตว์แล้วจะคืนค่า http 200 และ {selectedAnimal:mole} แต่เมื่อไม่มีสิ่งที่เลือกก็จะส่งคืน http 404 สิ่งนี้ทำให้สัตว์วิญญาณของฉันไม่มีความสุขเนื่องจากเราแสดงถึงข้อกังวลเกี่ยวกับโดเมนที่ถูกต้องซึ่งยังไม่ได้เลือกสัตว์วิญญาณ - เป็นข้อผิดพลาด HTTP นอกจากนี้ในฐานะธุรกิจ - erm Sprit-Animal-Hampers-R-us - เราต้องการทราบเมื่อมีคนไม่มีตัวเลือกดังนั้นเราจึงสามารถแจ้งให้พวกเขาได้ การตอบสนองที่ดีกว่าคืออะไรที่นี่: HTTP 200 และ {selectedAnimal:null} หรือชัดเจนยิ่งขึ้น HTTP 200 และ {selectedAnimal:null, spiritAnimalSelected: false} หรือมันจะดีกว่าที่จะกลับ 404? เนื่องจากชอบมากthis image has not yet been uploadedเมื่อดูภาพออนไลน์จะเป็น 404 this person has not …
18 rest 

3
เหตุใดจึงใช้ REST แทนกลไกคล้าย RPC ในเว็บแอปพลิเคชัน
ฉันเพิ่งเริ่มต้นเมื่อเร็ว ๆ นี้ที่ บริษัท ที่ใช้เฟรมเวิร์กแบบกำหนดเองที่ค่อนข้างแปลกสำหรับเว็บแอปพลิเคชัน แทนที่จะใช้เว็บเซอร์ RESTful จะใช้กลไก RPC เพื่อสื่อสารกับเซิร์ฟเวอร์ การสื่อสารกับเซิร์ฟเวอร์ดูเหมือนจะเป็นการเรียกใช้ฟังก์ชั่นอย่างง่าย แต่ฟังก์ชั่นนั้นจะถูกดำเนินการบนเซิร์ฟเวอร์ไม่ใช่ไคลเอนต์ บนฝั่งเซิร์ฟเวอร์มีวิธีกำหนดฟังก์ชันที่ไคลเอ็นต์สามารถเรียกได้ รายละเอียดของการแปลสิ่งนี้เป็นคำขอ http ถูกแยกออกไปอย่างสมบูรณ์ ตอนนี้ฉันเพิ่งใช้ไปแค่ช่วงสั้น ๆ แต่มันก็ค่อนข้างสะดวก แต่ฉันสงสัยว่าข้อเสียของวิธีนี้คืออะไร ดูเหมือนคนอื่น ๆ จะทำมันแตกต่างกันไปซึ่งมักเป็นสัญญาณสำหรับฉันว่าฉันอาจจะทำอะไรที่โง่หรือฉลาดด้วยอัตราต่อรองที่สูงขึ้นในอดีต

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