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

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

3
ชั้นเรียนที่มีสมาชิกที่ไม่แน่นอนในระหว่างการสร้าง แต่ไม่เปลี่ยนรูปในภายหลัง
ฉันมีอัลกอริทึมที่สร้างชุดของวัตถุ วัตถุเหล่านี้ไม่แน่นอนในระหว่างการสร้างเนื่องจากมันเริ่มต้นด้วยการน้อยมาก แต่จากนั้นจะถูกเติมด้วยข้อมูลในสถานที่ต่าง ๆ ภายในอัลกอริทึม หลังจากอัลกอริธึมเสร็จสมบูรณ์วัตถุไม่ควรเปลี่ยนแปลง - อย่างไรก็ตามมันถูกใช้โดยส่วนอื่น ๆ ของซอฟต์แวร์ ในสถานการณ์เหล่านี้ถือว่าเป็นแนวปฏิบัติที่ดีที่จะมีคลาสสองเวอร์ชันตามที่อธิบายไว้ด้านล่างหรือไม่ จากนั้นอัลกอริทึมจะถูกสร้างขึ้น เมื่ออัลกอริทึมเสร็จสิ้นข้อมูลจะถูกคัดลอกไปยังวัตถุที่ไม่เปลี่ยนรูปซึ่งจะถูกส่งคืน
22 c# 

8
จะจัดการกับการทดสอบที่ล้มเหลวจำนวนมากได้อย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันกำลังทำงานในการพัฒนาโครงการเก่าที่เขียนใน Java เรามีมากกว่า 10 ล้าน LOC และยิ่งกว่านั้นมากกว่า 4,000 ทดสอบการทำงาน การทดสอบที่กำหนดโดยฮัดสันนั้นล้มเหลวอย่างบ้าคลั่งเมื่อมีการเปลี่ยนแปลงรหัสที่ใหญ่กว่าทุกครั้ง การตรวจสอบความล้มเหลวในการทดสอบ - หากเป็นปัญหาในผลิตภัณฑ์หรือในการทดสอบใช้เวลาเป็นเดือน เราไม่สามารถลบการทดสอบเก่าออกได้เพราะเราไม่รู้ว่าเป็นการทดสอบอะไร! เราทำอะไรได้บ้าง วิธีดำเนินการกับการทดสอบแบบดั้งเดิมจำนวนเท่าใด

5
ฉันจะจัดการผู้ใช้ถังขยะได้อย่างไร
ฉันสร้างระบบที่หวังว่าจะมีผู้ใช้จำนวนมาก เรากลัวว่าฐานข้อมูลของเราจะเติมผู้ใช้ถังขยะซึ่งใช้ชื่อผู้ใช้ที่มีความต้องการสูงหรือบางทีพวกเขาเพิ่งลงทะเบียนและไม่กลับมา ฉันรู้ว่าสิ่งนี้เป็นเรื่องปกติฉันทำด้วยตัวเองเนื่องจากฉันมีบัญชี Google 3 บัญชี แต่ฉันใช้เพียง 1 เว็บไซต์ขนาดใหญ่จะจัดการผู้ใช้ถังขยะได้อย่างไร

2
การเป็นเจ้าของคุณลักษณะเป็นการปฏิบัติที่ดีหรือไม่?
เมื่อเร็ว ๆ นี้ใน บริษัท ของฉันมีคนแนะนำว่าหนึ่งนักพัฒนาควรมุ่งเน้น นั่นจะหมายถึงบางสิ่งบางอย่างเช่นการตั้งค่าผู้พัฒนานอกเหนือจากรูทีนทีมปกติปล่อยความรับผิดชอบอื่น ๆ (การประชุมและอื่น ๆ ) และบุคคลนี้จะเป็น "คนเดียว" ที่รับผิดชอบในคุณสมบัติเทคโนโลยีที่ชาญฉลาด สำหรับบันทึกเราใช้ SCRUM ภายใน SAFe และเรามีนักพัฒนาเต็มเวลาต่อทีมแบ่งปัน QA และเจ้าของผลิตภัณฑ์ระหว่างสองทีมของเรา (Android และ iOS) ในขณะที่ฉันยอมรับว่าสิ่งนี้จะเพิ่มผลผลิตในระยะสั้นฉันมีความรู้สึก (และฉันคิดว่าฉันได้เรียนรู้ในมหาวิทยาลัย) ว่านี่เป็นการฝึกฝนที่ไม่ดีด้วยเหตุผลหลายประการ: การตรวจสอบรหัสจะเสียค่า แบ่งปันความรู้น้อยที่สุด การเพิ่มความเสี่ยง การสูญเสียความยืดหยุ่นของทีม ฉันถูกหรือว่าไม่ใช่การปฏิบัติที่ไม่ดีเลย?

4
คอมไพล์“ Golden Rule of Rebasing” จำเป็นอย่างยิ่งหรือไม่?
ฉันมีการสนทนาเมื่อเร็ว ๆ นี้กับผู้คนที่ต่อต้านกลยุทธ์การปฏิเสธของฟีเจอร์บั๊กใน GIT ดูเหมือนว่าจะเป็นรูปแบบที่ได้รับการยอมรับให้ใช้ rebase เฉพาะสำหรับสาขาในพื้นที่ของเอกชน แต่ไม่เคยใช้เมื่อมีหลายคนทำงานในฟีเจอร์และสาขาเดียวกันตามที่เรียกว่า "Golden Rule of Rebasing" (เช่นอธิบายที่นี่: https : //www.atlassian.com/git/tutorials/merging-vs-rebasing/conceptual-overview ) ฉันแค่แปลกใจที่มีมติในเรื่องนี้ ฉันทำงานเป็นเวลา 3 ปีด้วยกลยุทธ์การรีบูทเต็มรูปแบบโดยมีนักพัฒนาซอฟต์แวร์ประมาณ 20 คนที่ทำงานเพื่อหาและคาดเดาว่ามันทำงานได้อย่างไร กระบวนการนั้นเป็นพื้น: คุณสร้างสาขาฟีเจอร์ของคุณเรียกมันว่า "myfeature" และผลักมันไปที่ต้นกำเนิด / myfeature คนอื่นอาจตรวจสอบและทำงานกับมัน บางครั้งคุณอาจทำการรีบูตจากต้นแบบ: จาก "myfeature", ต้นกำเนิด git rebase / master ; จากนั้นใช่คุณต้องผลักดันมัน เกิดอะไรขึ้นเมื่อคนอื่น ๆ ต้องการที่จะผลักดันการกระทำของพวกเขา? พวกเขาเพียงแค่ rebase มัน: คอมไพล์ rebase ต้นกำเนิด / …
22 git 

2
ทำไมสกาล่าถึงกลับมา แต่ไม่หยุดพักและทำต่อไป
สกาล่าไม่มีbreakหรือcontinueดังนั้นพฤติกรรมวนรอบบางอย่างจึงใช้ความคิดอีกเล็กน้อย การสิ้นสุดลูปก่อนกำหนดต้องใช้การเรียกซ้ำแบบหางข้อยกเว้นหรือscala.util.control.Breaks(ซึ่งใช้ข้อยกเว้น) เหตุผลสำหรับเรื่องนี้ก็คือว่าgotoพวกเขาเป็นโครงสร้างการไหลที่ไม่ชัดเจนการไหลและสามารถทำได้ในวิธีที่ดีกว่าและน่าแปลกใจน้อยกว่า returnแต่ดูเหมือนขัดแย้งกันเหล่านั้นสามารถนำมาใช้สำหรับ เหตุใดสกาล่าจึงละเว้นbreakและcontinueไม่ทำเช่นนั้นreturn?

2
แอปพลิเคชัน ASP.NET MVC ควรใช้ Entity Framework โดยตรงเป็นโมเดลหรือไม่
ฉันกำลังสร้างแอปพลิเคชัน MVC แรกของฉันใน Visual Studio 2013 (MVC 5) และฉันยังไม่ชัดเจนเกี่ยวกับวิธีที่ดีที่สุดในการตั้งค่าแบบจำลองของฉัน ฉันสร้างโมเดลเอนทิตี้ของเฟรมเวิร์กโดยใช้รหัส - แรกจากฐานข้อมูลที่มีอยู่ สัญชาตญาณแรกของฉันคือการสร้างคลาสตัวกลางที่จะเป็นโมเดลที่ใช้โดยมุมมองและให้คลาสเหล่านั้นทำงานกับคลาสเฟรมเวิร์กเอนทิตี ในขณะที่ฉันกำลังเขียนคลาสคนกลางฉันรู้ว่าฉันเพิ่งจะติดตั้งสิ่งต่าง ๆ มากมายที่ชั้นเรียนของ EF ได้ทำกับ setter ส่วนตัวเป็นครั้งคราวหรือส่งจากประเภทข้อมูลหนึ่งไปยังอีกประเภทหนึ่ง ดังนั้นดูเหมือนว่าจะเสียเปล่า กฎทั่วไปใช้คลาสเอนทิตี้ของเฟรมเวิร์กเป็นโมเดลสำหรับแอปพลิเคชัน MVC โดยตรงหรือไม่ หรือมีประโยชน์บางอย่างที่ฉันขาดไปในการสร้างคลาสตัวกลางเหล่านี้หรือไม่?

3
Banana split และ fusion ในการเขียนโปรแกรมทำงานคืออะไร
คำศัพท์เหล่านี้ถูกกล่าวถึงในหลักสูตรมหาวิทยาลัยของฉัน googling อย่างรวดเร็วชี้ให้ฉันเห็นเอกสารจากมหาวิทยาลัยบางส่วน แต่ฉันกำลังมองหาคำอธิบายง่ายๆ

4
ถ้า MVC เป็น“ การแยกความกังวล” ดังนั้นทำไมจึงมีการแนะนำไวยากรณ์ของมีดโกนไว้
คำถามของฉันเกี่ยวข้องกับรูปแบบการออกแบบ MVC และมีดโกนที่แนะนำโดย Microsoft ในขณะที่การเรียนรู้รูปแบบการออกแบบ MVC ผมก็บอกว่าความคิดที่มีพื้นฐานอยู่บนหลักการที่เรียกว่าการแยกความกังวลเกี่ยวกับ แต่มีดโกน Syntax ช่วยให้เราสามารถใช้ C # ในViewsโดยตรง ข้อกังวลนี้แยกกันหรือเปล่า

2
วิธีที่สะอาดที่สุดในการรายงานข้อผิดพลาดใน Haskell
ฉันทำงานเกี่ยวกับการเรียนรู้ Haskell และฉันเจอวิธีการจัดการกับข้อผิดพลาดสามวิธีในฟังก์ชั่นที่ฉันเขียน: ฉันสามารถเขียนได้ง่ายerror "Some error message."ซึ่งมีข้อยกเว้น ฉันสามารถรับฟังก์ชั่นการส่งคืนMaybe SomeTypeซึ่งฉันสามารถหรือไม่สามารถคืนสิ่งที่ฉันต้องการคืนได้ ฉันสามารถใช้ฟังก์ชันส่งคืนEither String SomeTypeได้ซึ่งฉันสามารถส่งคืนข้อความแสดงข้อผิดพลาดหรือสิ่งที่ถูกขอให้ส่งคืนได้ตั้งแต่แรก คำถามของฉันคือฉันควรใช้วิธีใดในการจัดการกับข้อผิดพลาดและเพราะเหตุใด บางทีฉันควรวิธีการที่แตกต่างกันขึ้นอยู่กับบริบทหรือไม่ ความเข้าใจปัจจุบันของฉันคือ: มันเป็น "ยาก" ที่จะจัดการกับข้อยกเว้นในรหัสการทำงานอย่างหมดจดและใน Haskell หนึ่งต้องการให้สิ่งต่าง ๆ ทำงานได้อย่างหมดจดที่สุด การกลับมาMaybe SomeTypeเป็นสิ่งที่เหมาะสมที่จะทำถ้าฟังก์ชั่นจะล้มเหลวหรือประสบความสำเร็จ (เช่นไม่มีวิธีที่แตกต่างกันที่มันจะล้มเหลว ) การกลับมาEither String SomeTypeเป็นสิ่งที่ควรทำหากฟังก์ชั่นสามารถล้มเหลวได้หลายวิธี

5
การพักอาศัยการดำเนินการไม่เชื่อเรื่องพระเจ้าคุ้มค่าหรือไม่
ฉันมีโครงการที่ฉันกำลังใช้งานอยู่ในปัจจุบันโดยใช้ Tomcat, Spring 4, Spring Security, MySQL, และ JPA w / Hibernate ฉันเลือก JPA จากมุมมองที่ว่าควรทำการสลับการใช้งานพื้นฐานของผู้ให้บริการ ORM อย่างราบรื่นหรืออย่างน้อยก็เจ็บปวดน้อย ฉันจะบอกว่านี่คือการใช้จิตใจ spec มากกว่าการใช้งาน (JAX-RS) เป็นจุดเริ่มต้นของชุมชนการพัฒนา Java ฉันสงสัยว่านี่เป็นงานที่ควรทำ ฉันแน่ใจว่าฉันใช้ Hibernate โดยตรงฉันจะได้รับพลังงานเพราะฉันสามารถใช้คุณสมบัติที่ไม่ได้เป็นส่วนหนึ่งของข้อกำหนด JPA หลัก ส่วนหนึ่งของความกังวลของฉันมาจากความคิดของ YAGNI ฉันกำลังเขียนโปรแกรมในรูปแบบและแฟชั่นที่เฉพาะเจาะจง (โดยใช้ JPA แทน Hibernate) เพื่อที่ในอนาคตฉันสามารถสลับการใช้งาน ORM ของฉันได้ ฉันสงสัยอย่างมากว่าจะเกิดขึ้นตลอดอายุการใช้งานของผลิตภัณฑ์ดังนั้นฉันจึงใช้ความพยายามในสิ่งที่ฉันอาจไม่ได้รับประโยชน์จาก คุณคิดยังไง? "การเขียนโปรแกรมไปยังอินเทอร์เฟซ" นั้นคุ้มค่าหรือไม่เมื่อพูดถึง JPA คุณเคยเปลี่ยนการใช้งาน ORM ทั้งหมดในผลิตภัณฑ์หรือไม่? คุณเคยสามารถหลีกเลี่ยงสิ่งที่เป็นนามธรรมจาก JPA ที่รั่วไหลไปได้หรือไม่? …

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

4
ฉันจะใช้การทดสอบหน่วยและ TDD เพื่อทดสอบแอพที่ขึ้นอยู่กับการดำเนินการ CRUD ของฐานข้อมูลเป็นส่วนใหญ่ได้อย่างไร
ที่ทำงานหนึ่งในโครงการของฉันส่วนใหญ่เกี่ยวกับการรับส่งข้อมูลจากไคลเอนต์ภายนอกและเก็บไว้ในฐานข้อมูล มันเป็นแอพพลิเคชั่นขององค์กร Java ที่ใช้ JPA และตรรกะส่วนใหญ่ของเราหมุนรอบการดำเนินการ CRUD ข้อบกพร่องส่วนใหญ่ของเราเกี่ยวข้องกับ JPA ไม่ทางใดก็ทางหนึ่ง ตัวอย่างที่ 1: ถ้าคุณคลิกปุ่มบันทึกสองครั้ง JPA อาจลองแทรกเอนทิตีเดียวกันในฐานข้อมูลเป็นครั้งที่สองทำให้เกิดการละเมิดคีย์หลัก ตัวอย่างที่ 2: คุณดึงเอนทิตีจากฐานข้อมูลแก้ไขและลองอัปเดตข้อมูล JPA อาจพยายามสร้างอินสแตนซ์ใหม่แทนการอัปเดตเก่า บ่อยครั้งที่โซลูชันต้องการเพิ่ม / ลบ / เปลี่ยนคำอธิบายประกอบ JPA บางครั้งก็เกี่ยวข้องกับการปรับเปลี่ยนตรรกะ DAO ฉันไม่สามารถหาวิธีที่จะมั่นใจในโค้ดของเราโดยใช้การทดสอบหน่วยและ TDD ฉันไม่แน่ใจว่าเป็นเพราะการทดสอบหน่วยและ TDD นั้นไม่เหมาะสมหรือถ้าฉันเข้าใกล้ปัญหาผิด การทดสอบหน่วยดูเหมือนจะไม่เหมาะสมเพราะฉันสามารถค้นพบปัญหาเหล่านี้ที่รันไทม์เท่านั้นและฉันจำเป็นต้องปรับใช้กับเซิร์ฟเวอร์แอปเพื่อสร้างปัญหาขึ้นมาใหม่ โดยปกติฐานข้อมูลจะต้องเกี่ยวข้องซึ่งฉันคิดว่าอยู่นอกนิยามของการทดสอบหน่วย: นี่คือการทดสอบการรวม TDD ดูเหมือนว่าไม่เหมาะสมเพราะการปรับใช้ + ข้อเสนอแนะการทดสอบช้ามากทำให้ฉันไม่ได้ผลมาก การปรับใช้ + ข้อเสนอแนะการทดสอบวนใช้เวลา 3 นาทีและนั่นก็ต่อเมื่อฉันรันการทดสอบเฉพาะเกี่ยวกับรหัสที่ฉันเขียน ในการรันการทดสอบการรวมระบบทั้งหมดจะใช้เวลา 30+ นาที มีรหัสอยู่นอกแม่พิมพ์นี้และฉันมักจะทดสอบหน่วยทุกครั้งที่ทำได้ แต่ข้อบกพร่องส่วนใหญ่ของเราและช่วงเวลาที่ยิ่งใหญ่ที่สุดมักเกี่ยวข้องกับ …
22 java  unit-testing  tdd  jpa 

3
ภาษาโปรแกรมที่ใช้งานได้จริงจัดการกับข้อมูลที่เปลี่ยนแปลงอย่างรวดเร็วอย่างไร
โครงสร้างข้อมูลใดที่คุณสามารถใช้เพื่อให้คุณสามารถลบและแทนที่ O (1) หรือคุณจะหลีกเลี่ยงสถานการณ์เมื่อคุณต้องการโครงสร้างดังกล่าวได้อย่างไร

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

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