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

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

6
คุณจะจัดการกับปัญหาที่เพิ่มขึ้นเรื่อย ๆ เพื่อที่จะได้รับการ“ แก้ปัญหา” ได้อย่างไร?
เรากำลังใช้ JIRA เพื่อติดตามปัญหาในโครงการซอฟต์แวร์ของเรา สิ่งหนึ่งที่เราสังเกตเห็นคือเรามักจะสร้างปัญหาใหม่ แต่เรายังไม่ทราบว่าเมื่อใด / ถ้าปัญหาจะได้รับการแก้ไขเลย ดังนั้นเราจึงคิดค้นเหตุการณ์สำคัญ 'อนาคตอันไกลโพ้น' ซึ่งปัญหาดังกล่าวได้รับมอบหมาย เมื่อมันเกิดขึ้นกองของปัญหาที่กำหนดให้กับเหตุการณ์สำคัญนี้จะเพิ่มขึ้นตลอดเวลาดังนั้นดูเหมือนว่านี่ไม่ใช่วิธีที่ดี ตอนนี้มีคนจำนวนมากจนตอนนี้กลายเป็นงานที่ต้องทำมากมายเพื่อตรวจสอบความถูกต้องทั้งหมด บางส่วนไม่ถูกต้องเนื่องจากองค์ประกอบที่เกี่ยวข้องกับคุณถูกลบออก บางคนถูกทำซ้ำโดยปัญหาอื่น ๆ บางคนมีคำอธิบายที่แย่มากจนไม่มีใครรู้ว่าจริง ๆ แล้วพวกเขาเป็นอย่างไร ทีมพัฒนาซอฟต์แวร์อื่น ๆ จะจัดการกับปัญหาที่ถูกต้องได้อย่างไรซึ่งอาจไม่ได้รับการแก้ไขทุกเวลา คุณรำคาญที่จะบันทึกพวกเขาทั้งหมดหรือไม่ คุณกำหนดให้กับเวอร์ชันที่วางแผนไว้ถัดไปจากนั้นดูอีกครั้งเมื่อใกล้ถึงรุ่นถัดไปหรือไม่ อื่น ๆ อีก?

5
วิธีทำ TDD สำหรับบางอย่างที่มีการเรียงสับเปลี่ยนมากมาย?
เมื่อสร้างระบบเช่น AI ซึ่งสามารถใช้เส้นทางที่แตกต่างกันได้อย่างรวดเร็วหรืออัลกอริทึมใด ๆ ที่มีอินพุตที่แตกต่างกันชุดผลลัพธ์ที่เป็นไปได้อาจมีการเปลี่ยนลำดับจำนวนมาก เราควรใช้วิธีใดในการใช้ TDD เมื่อสร้างระบบที่ให้ผลลัพธ์จำนวนมากและมีการเรียงสับเปลี่ยนของผลลัพธ์ที่ต่างกัน?

6
ฉันสามารถพิจารณาวิธีการเชื่อมต่อเป็นวิธีนามธรรมได้หรือไม่
ฉันกำลังคิดเกี่ยวกับสิ่งนั้นและฉันมีข้อสงสัย เมื่อฉันประกาศอินเทอร์เฟซตัวอย่างเช่น: public interface MyInterface { public void method1(); public void method2(); } วิธีการอินเตอร์เฟสเหล่านี้ถือเป็นนามธรรมหรือไม่ สิ่งที่ฉันหมายถึงคือแนวคิดของวิธีนามธรรมคือ: วิธีนามธรรมเป็นวิธีการที่ประกาศ แต่ไม่มีการใช้งาน ดังนั้นวิธีการเหล่านี้ถือว่าเป็นนามธรรมหรือไม่ พวกเขาไม่ใช่วิธีนามธรรมที่ "บริสุทธิ์" เนื่องจากฉันไม่ได้ใช้abstractคำ แต่แนวคิด แต่ดูเหมือนว่าพวกเขาเป็น คุณบอกอะไรฉันได้บ้าง ขอบคุณ

7
ไปยังโดเมนหรือไม่ไปยังโดเมน
มาตรฐาน SQL92 และ SQL99 กำหนดโครงสร้างDDL ไม่ใช่ทุกฐานข้อมูลที่รองรับสิ่งนี้หรือมีชื่ออื่น (SQL Server มีประเภทที่กำหนดโดยผู้ใช้เป็นต้น)CREATE DOMAIN สิ่งเหล่านี้อนุญาตให้หนึ่งเพื่อกำหนดชนิดข้อมูลที่มีข้อ จำกัด ที่จะใช้ในฐานข้อมูลของพวกเขาเพื่อให้ง่ายและบังคับใช้กฎที่เกี่ยวข้องกับค่าที่อนุญาต ชนิดข้อมูลดังกล่าวสามารถใช้ในการประกาศคอลัมน์ในอินพุตและเอาต์พุตไปยังโพรซีเดอร์และฟังก์ชันที่เก็บไว้ ... ผมอยากจะรู้ว่า: ผู้คนใช้โดเมนในการออกแบบฐานข้อมูลจริง ๆ หรือไม่ ถ้าเป็นเช่นนั้นในระดับใด? มีประโยชน์อย่างไร คุณพบข้อผิดพลาดอะไรบ้าง ฉันพยายามประเมินศักยภาพของการใช้สิ่งเหล่านี้ในการพัฒนาฐานข้อมูลในอนาคต
15 sql  sql-domain 

7
เมื่อใดที่ฉันควรจะลดปริมาณการทำงานให้กับ GPU แทนที่จะเป็น CPU?
มีการสร้างระบบใหม่เช่นOpenCLขึ้นเพื่อให้เราสามารถเรียกใช้โค้ดในตัวประมวลผลกราฟิกของเรามากขึ้นเรื่อย ๆ ซึ่งเหมาะสมเพราะเราควรจะสามารถใช้ประโยชน์จากพลังที่มากที่สุดในระบบของเราได้มากที่สุด อย่างไรก็ตามด้วยระบบใหม่ทั้งหมดนี้ดูเหมือนว่า GPU จะดีกว่า CPU ในทุกด้าน เนื่องจาก GPU สามารถทำการคำนวณแบบขนานได้ GPU แบบมัลติคอร์จึงดูเหมือนว่าพวกเขาจะดีกว่าซีพียูแบบมัลติคอร์มาก คุณสามารถทำการคำนวณหลาย ๆ อย่างในครั้งเดียวและปรับปรุงความเร็วได้อย่างแท้จริง ยังมีบางกรณีที่การประมวลผลแบบอนุกรมยังดีกว่าเร็วขึ้นและ / หรือมีประสิทธิภาพมากกว่าแบบขนานหรือไม่
15 optimization  cpu  gpu 

3
หลักเกณฑ์เนมสเปซและชื่อคลาส
ฉันมีปัญหาในการตั้งชื่อชั้นเรียนและบริการของฉันอย่างถูกต้องเมื่อมีส่วนร่วมและชั้นเรียนช่วยเหลืออื่น ๆ เข้ามาเกี่ยวข้อง คุณจะจัดโครงสร้างต่อไปนี้อย่างไร: EventService.cs EventServiceUtils.cs EventServiceValidators.cs EventServiceCoordinator.cs ฯลฯ ... ฉันมีหลายบริการที่มีความต้องการเช่นเดียวกับบริการข้างต้น ความคิดหนึ่งคือการแยกสิ่งเหล่านี้ทั้งหมดออกเป็นเนมสเปซที่เหมาะสมทำให้มันเป็นดังนี้: Services.EventService.EventService.cs //(the actual service) Services.EventService.Validators.DateValidator.cs Services.EventService.Validators.ParticipantValidator.cs Services.EventService.Coordinators.ParticipantCoordinator.cs Services.EventService.ExtensionMethods.Extensions.cs และอื่น ๆ แน่นอนว่าเนมสเปซทุกรายการจะมีโฟลเดอร์แยกต่างหาก แต่นี่ไม่ได้รู้สึก 100% เนื่องจากมีDateValidatorsบริการอื่น ๆ อีกมากมายซึ่งอาจนำไปสู่การอ้างอิงที่ไม่พึงประสงค์ได้อย่างง่ายดาย และยังServices.EventService.EventService.csรวมถึงชื่อคลาสในเนมสเปซซึ่งไม่ดีเช่นกัน คุณสามารถใช้Services.Event.EventService.csแต่มีหลักสูตรที่มีชื่อนั้นอยู่แล้ว นี่คือรูปแบบโดเมน
15 c#  architecture 

2
มันจะดีกว่าถ้ามีการสร้างและแก้ไขการกระทำที่แยกจากกันหรือรวมสร้างและแก้ไขเป็นหนึ่ง?
เรากำลังใช้ ASP.NET MVC 2 กับเลเยอร์ควบคุมและมุมมองการนำเสนอและรูปแบบซึ่งประกอบด้วยชั้นตรรกะทางธุรกิจ, ชั้นการเข้าถึงข้อมูล ในชั้นธุรกิจขึ้นไปเพื่อวัตถุประสงค์ส่วนใหญ่การแก้ไขดูเหมือนว่าจะสามารถแสดงทั้งการสร้างวัตถุและการแก้ไขวัตถุ สิ่งนี้สอดคล้องกันกับรูปแบบการออกแบบพื้นที่เก็บข้อมูลของเราซึ่งกำหนดวิธีการ "บันทึก" เราสามารถเช็คอินกระบวนงานที่เก็บไว้ถ้า ID เป็น 0 และสร้างวัตถุใหม่ถ้าเป็น 0 มิฉะนั้นเราสามารถอัปเดตวัตถุที่มีอยู่ได้เนื่องจากรหัสหมวดหมู่ควรตรงกับหนึ่ง ประเด็นหลักของการสนทนาคือถ้าเหมาะสมที่สุดที่จะแยกการแก้ไขซึ่งรวมถึงการสร้างเป็นส่วนต่าง ๆ ของการสร้างและแก้ไขนอกเหนือจากเลเยอร์ DAL ตัวอย่างที่ชัดเจนสามารถแสดงเป็นเส้นทาง: สร้าง - http: // someurl / somearea / edit / 0 แก้ไข - http: // someurl / somearea / edit / 254 เมื่อเทียบกับ สร้าง - http: // someurl / …

14
เราควรส่งเสริมรูปแบบการเขียนโปรแกรมเพื่อประโยชน์ของนักพัฒนาหรือไม่สนับสนุนให้สอดคล้องกัน?
นักพัฒนาเขียนif/elseบล็อกด้วยคำสั่งโค้ดหนึ่งบรรทัดเช่น: if (condition) // Do this one-line code else // Do this one-line code อีกอย่างใช้วงเล็บปีกกาสำหรับพวกเขาทั้งหมด: if (condition) { // Do this one-line code } else { // Do this one-line code } ผู้พัฒนาสร้างวัตถุขึ้นมาก่อนแล้วจึงใช้มัน HelperClass helper = new HelperClass(); helper.DoSomething(); นักพัฒนาซอฟต์แวร์สร้างอินสแตนซ์ใหม่และใช้วัตถุในหนึ่งบรรทัด: new HelperClass().DoSomething(); นักพัฒนาง่ายขึ้นด้วยอาร์เรย์และforลูป: string[] ordinals = new string[] {'First', 'Second', …

10
แนะนำให้มีการเปลี่ยนแปลงครั้งใหญ่ / เขียนใหม่เป็นนักศึกษาฝึกงาน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว บริบท: มันเป็นโครงการภายใน (ที่ฉันไม่คิดว่ามีผู้ใช้งานมากมาย) มันเก่า เรากำลังอัพเดท ประเด็น: มันละเมิดเฟรมเวิร์ก mvc (ไม่ใช้รุ่น, ตรรกะทางธุรกิจในมุมมอง, ฯลฯ ) สิ่งที่เรากำลังขอให้ทำมีขนาดเล็ก แต่เนื่องจากการติดต่อกันต่ำเรามีสองตัวเลือก: ทำสิ่งต่อไปให้เรียบร้อย ย้ายชิ้นโค้ดขนาดใหญ่ไปรอบ ๆ หรือเขียนสิ่งใหม่ การแก้ปัญหา (ฉันเห็น): ทำงานกับมันต่อไปอย่าเพิกเฉยแนวปฏิบัติที่ดีที่สุดเพื่อไม่ให้ถูกทำเร็ว ๆ นี้และไม่แนะนำข้อบกพร่องใหม่ด้วยการเปลี่ยน / เขียนใหม่ refactor / เขียน ฉันเดาว่าคำถามของฉันเป็นจริง: ถ้าฉันต้องการเปลี่ยนแปลงโครงการขนาดใหญ่ฉันจะเสนอได้อย่างไรโดยไม่ดูถูกใคร หรือมันจะดีกว่าถ้าฉันจะไปกับการไหลแม้ว่าบางครั้งจะหมายถึง (อุปมา) ท่อเทป?

6
การใช้ Coffeescript มีความเสี่ยงมากน้อยเพียงใดโดยไม่ต้องใช้ Javascript [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันเป็นโปรแกรมเมอร์ที่มีประสบการณ์พอสมควรที่พยายามเรียนรู้การพัฒนาเว็บ ฉันพยายามพัฒนาเว็บแอปพลิเคชันฝั่งไคลเอ็นต์ซึ่งใช้ svg หรือ canvas สำหรับกราฟิก ฉันตัดสินใจว่าฉันต้องการเขียนรหัสแอปพลิเคชันใน Coffeescript ฉันไม่รู้ Javascript หรือ Coffeescript จำเป็นต้องมีความรู้ในการพัฒนาเว็บ Javascript ถึง Coffeescript อย่างไร? ฉันมีแนวโน้มที่จะประสบปัญหา gnarly ซึ่งต้องให้ฉันเข้าใจ Javascript หรือไม่ ฉันสามารถทำงานอย่างมีความสุขกับ Javascript APIs จาก Coffeescript ได้หรือไม่ แก้ไข : ฉันสามารถเรียนรู้พื้นฐานของ Javascript ได้อย่างง่ายดายในหนึ่งสัปดาห์ ฉันกังวลมากขึ้นว่า Javascript ดูเหมือนจะมีขอบคมที่ซ่อนอยู่มากมาย ในคำถามเกี่ยวกับคุณสมบัติภาษาแปลก ๆบน StackOverflow …

4
ฉันจะสามารถทำงานได้มากที่สุดใน Visual Studio เมื่อ จำกัด พื้นที่หน้าจอขนาดเล็กได้อย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันเป็นนักเรียนและฉันทำโค้ดจำนวนมากบนหน้าจอแล็ปท็อปขนาดเล็ก (12.5 ", 1366x768) ที่ฉันพกติดตัวตั้งแต่ชั้นเรียนจนถึงชั้นเรียนสภาพแวดล้อมการเขียนโปรแกรมส่วนใหญ่ได้รับการออกแบบด้วยแนวคิดที่ว่ามีใครบางคนที่มีหน้าจอขนาดใหญ่ ในความเป็นจริงโปรแกรมเมอร์เขียนโปรแกรมสามารถเข้าถึงหน้าจอขนาดใหญ่ได้อย่างไรก็ตามหน้าจอขนาดใหญ่ยากต่อการเรียนตลอดทั้งวันและแล็ปท็อปรุ่นก่อนหน้าของฉัน (15 ", 1920x1200) มักถูกทิ้งไว้ในหอพักเพราะมันหนักมาก ฉันถูกขังอยู่ใน Visual Studio ในตอนนี้ โปรแกรมที่ฉันไม่เคยใช้นั้นมีประสิทธิผลสำหรับโค้ดที่ฉันทำงานด้วย (หลังจากติดตั้ง Visual Assist ของ Visual Tomist และ VsVim ของ Jared Par แน่นอน :)) (ฉันเคยเห็นคำถามอื่น ๆ เกี่ยวกับหน้าจอขนาดเล็ก แต่พวกเขาทั้งหมดค่อนข้างไปกับ "ออกจาก Visual Studio" - ซึ่งยากสำหรับบางประเภทของการพัฒนาที่ฉันได้ทำ ....

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

10
วิธีการสร้างความสมดุลของคุณภาพของรหัสกับบุคลิกภาพที่แข็งแกร่ง
ในการตรวจสอบโค้ดในที่ทำงานฉันได้เห็นรหัสและรูปแบบที่ฉันพิจารณาว่า "ฉลาด" แต่ไม่จำเป็นต้องเพิ่มคุณภาพโดยรวมหรือความสามารถในการบำรุงรักษาของรหัสฐาน ฉันชี้ให้เห็นถึงข้อเสนอแนะของฉันและฉันไม่มั่นใจในข้อโต้แย้ง ฉันกังวลเล็กน้อยเมื่อโค้ดนี้กลายเป็น repo และใช้งานในภายหลัง ฉันต้องการรักษาทีมที่เหนียวแน่นดังนั้นฉันไม่ต้องการสร้างความตึงเครียดด้วยการเป็นแกนนำเกี่ยวกับการจองของฉัน ฉันยังต้องการสร้างผลิตภัณฑ์ที่ยอดเยี่ยมสำหรับลูกค้าของเราโดยไม่ย่อท้อ ตามเนื้อผ้าใครมีอำนาจ 'ยับยั้ง' ในสิ่งที่ได้รับการตรวจสอบและอย่างไร วิธีการใช้รหัสที่ได้ผล แต่มันเกี่ยวข้องกับ / ฉลาดเกินไปจะถูกลบออกโดยไม่ต้องเหยียบนิ้วเท้า?

1
ความมุ่งมั่นของออราเคิลต่อ Java คืออะไร? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เราลงทุนอย่างหนักใน Java แต่หลังจากประสบการณ์ล่าสุดและอ่านคำตอบของ Joonas สำหรับคำถามนั้น: หากคุณใช้การตั้งค่าสถานะเหล่านี้ใน Java 6 คุณอาจประสบปัญหาไม่เพียง แต่ล่ม แต่ยังดำเนินการลูปที่ไม่ถูกต้องนั่นคือการคำนวณผิดเนื่องจากการอัปเกรดเล็กน้อยจาก 6u19 ถึง 6u20 (โดยประมาณ) ... และการโพสต์บล็อกที่เกี่ยวข้องเกี่ยวกับปัญหา Java 7 ที่โดดเด่นทำให้เรากังวลเกี่ยวกับคุณภาพของ Java ที่กำลังดำเนินไป Oracle กำลังแก้ไขปัญหาเหล่านี้หรือไม่ ออราเคิลจัดหาอะไรให้บ้างเพื่อรับรองว่า Java รองรับในอนาคตหรือไม่
15 java  oracle 

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

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