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

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

3
วิธีใช้การสลับแบบถ่วงน้ำหนัก
ฉันเพิ่งเขียนโค้ดบางอย่างที่ฉันคิดว่าไม่มีประสิทธิภาพมาก แต่เนื่องจากมีเพียงไม่กี่ค่าฉันจึงยอมรับ อย่างไรก็ตามฉันยังคงสนใจอัลกอริทึมที่ดีกว่าสำหรับสิ่งต่อไปนี้: รายการของวัตถุ X แต่ละชิ้นจะถูกกำหนดเป็น "น้ำหนัก" สรุปน้ำหนัก สร้างตัวเลขสุ่มจาก 0 ถึงผลรวม วนซ้ำผ่านวัตถุลบน้ำหนักออกจากผลรวมจนกว่าผลรวมจะไม่เป็นบวก เอาวัตถุออกจากรายการแล้วเพิ่มลงในส่วนท้ายของรายการใหม่ รายการ 2,4 และ 5 ต้องใช้nเวลาดังนั้นมันจึงเป็นO(n^2)อัลกอริธึม สามารถปรับปรุงได้ไหม ตัวอย่างของการสลับแบบถ่วงน้ำหนักองค์ประกอบมีโอกาสมากขึ้นที่จะอยู่ข้างหน้าด้วยน้ำหนักที่สูงขึ้น ตัวอย่าง (ฉันจะสร้างตัวเลขสุ่มเพื่อทำให้เป็นจริง): 6 สิ่งของที่มีน้ำหนัก 6,5,4,3,2,1; ผลรวมคือ 21 ฉันเลือก 19: 19-6-5-4-3-2 = -1ดังนั้น 2 ไปในตำแหน่งแรกน้ำหนักตอนนี้ 6,5,4,3,1; ผลรวมคือ 19 ฉันเลือก 16: 16-6-5-4-3 = -2ดังนั้น 3 ไปในตำแหน่งที่สองตอนนี้น้ำหนักอยู่ที่ 6,5,4,1; ผลรวมคือ 16 ฉันเลือก 3: 3-6 …
22 algorithms 

6
CSV เป็นทางเลือกที่ดีสำหรับ XML และ JSON หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา เป็นCSVถือว่าเป็นตัวเลือกที่ดีกับXMLและJSONสำหรับการเขียนโปรแกรมภาษา? ฉันมักจะใช้ XML และ JSON (หรือบางครั้งไฟล์ข้อความธรรมดา) เป็นที่เก็บไฟล์เรียบ อย่างไรก็ตามเมื่อเร็ว ๆ นี้ผมมาในการดำเนิน CSV ในPHP โดยทั่วไปฉันเคยเห็น CSV ใช้สำหรับอินพุตในไฟล์Excelแต่ฉันไม่เคยใช้กับการเขียนโปรแกรม มันจะดีกว่า XML หรือ JSON แต่อย่างใด

7
รูปแบบสำหรับการเผยแพร่การเปลี่ยนแปลงแบบจำลองวัตถุ .. ?
นี่เป็นสถานการณ์ทั่วไปที่ทำให้ฉันต้องจัดการ ฉันมีโมเดลวัตถุที่มีวัตถุแม่ พาเรนต์มีวัตถุย่อยบางอย่าง บางสิ่งเช่นนี้ public class Zoo { public List<Animal> Animals { get; set; } public bool IsDirty { get; set; } } แต่ละวัตถุลูกมีข้อมูลและวิธีการต่าง ๆ public class Animal { public string Name { get; set; } public int Age { get; set; } public void MakeMess() { ... } } …

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

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

2
SQLite ที่มีสองกระบวนการของไพ ธ อนเข้าถึง: หนึ่งการอ่านหนึ่งการเขียน
ฉันกำลังพัฒนาระบบขนาดเล็กที่มีสององค์ประกอบ: โพลหนึ่งข้อมูลจากแหล่งข้อมูลอินเทอร์เน็ตและแปลเป็นข้อมูล sql เพื่อคงอยู่ในระบบ คนที่สองอ่านว่าข้อมูล sql จากอินสแตนซ์ในท้องถิ่นและให้บริการผ่านทาง json และ api ที่สงบ เดิมทีฉันวางแผนจะคงข้อมูลไว้กับ postgresql แต่เนื่องจากแอปพลิเคชันจะมีข้อมูลปริมาณน้อยมากในการจัดเก็บและรับส่งข้อมูลเพื่อให้บริการฉันคิดว่ามันเกินความจริง SQLite ขึ้นอยู่กับงานหรือไม่? ฉันชอบความคิดของรอยเท้าขนาดเล็กและไม่จำเป็นต้องบำรุงรักษาเซิร์ฟเวอร์ SQL อื่นสำหรับงานนี้ แต่ฉันกังวลเกี่ยวกับการทำงานพร้อมกัน ดูเหมือนว่าเมื่อเปิดใช้งานการบันทึกล่วงหน้าเขียนการอ่านและการเขียนฐานข้อมูล SQLite สามารถเกิดขึ้นได้โดยไม่ต้องล็อคกระบวนการใด ๆ ออกจากฐานข้อมูล อินสแตนซ์ SQLite เดียวสามารถรักษากระบวนการที่เกิดขึ้นพร้อมกันสองกระบวนการให้เข้าถึงได้หากมีเพียงหนึ่งการอ่านและการเขียนอื่นเท่านั้น ฉันเริ่มเขียนโค้ด แต่สงสัยว่านี่เป็นการใช้ผิดของ SQLite หรือไม่

9
สามารถอ่านรหัสได้ แต่ต้องดิ้นรนอย่างมากที่จะเขียนมัน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันมีการสอบการเขียนโปรแกรมครั้งแรกของฉันเมื่อเร็ว ๆ นี้ ... และฉันก็ทำได้ดีมาก ไม่ได้ยอดเยี่ยมเลย ฉันมีโทษตัวเองนอกเวลาเรียนเท่านั้นฉันไม่ได้ทำอะไรเลย ตอนนี้ฉันมีช่วงเวลาฤดูร้อนใกล้เข้ามาแล้วและฉันไม่ยอมให้เรื่องนี้เกิดขึ้นอีก สองสามสัปดาห์ตอนนี้ฉันได้อ่านอ่านและอ่านเพิ่มเติม ฉันจะข้ามสิ่งเก่าที่ฉันพลาดไปและสิ่งใหม่ ๆ ที่เรากำลังทำอยู่ เห็นได้ชัดว่าฉันสามารถสังเกตเห็นความแตกต่างอย่างมากในความเข้าใจภาษาของฉัน อย่างไรก็ตามมันเกี่ยวกับมัน ฉันสามารถอ่านรหัสและตอนนี้ฉันมีความคิดในสิ่งที่เกิดขึ้นในรหัส ... แต่เมื่อมันมาถึงฉันเขียนรหัสตัวเองฉันแค่ clueless มันเหมือนว่าฉันไม่เคยรู้วิธีการที่จะใช้และไม่สามารถเข้าใจคำถามได้อย่างแท้จริง ฉันอ่านหนังสือได้พอสมควรแล้ว (ทำประมาณ 5-6 ชั่วโมงสำหรับเดือนที่ผ่านมา) ในแต่ละวัน ... แต่เมื่อเปิด IDE ของฉันฉันมักจะรู้สึกว่ามันถึงเวลาแล้วที่จะลดระดับลง โดยเฉพาะอย่างยิ่งเพราะฉันมีความรู้เกี่ยวกับโหนด, รายการ, arraylist, อินเตอร์เฟสและอื่น ๆ แต่นอกเหนือจากการอ่านบนหน้าเว็บที่เกี่ยวกับมัน ฉันสามารถชี้ให้เห็นทุกอย่างที่เกิดขึ้นในโปรแกรมเพื่อให้คำอธิบายประกอบโค้ดตัวอย่างฉันคิดว่าดี แต่การเขียนโค้ดของตัวเองเป็นอีกเรื่องหนึ่ง ..

3
กลยุทธ์สำหรับการตรวจสอบโค้ดก่อนที่จะรวมไปถึงต้นแบบจากสาขาคุณลักษณะ
ฉันและทีมของฉันใช้สาขาคุณลักษณะ (พร้อมคอมไพล์) ฉันสงสัยว่าเป็นกลยุทธ์ที่ดีที่สุดในการตรวจสอบโค้ดก่อนที่จะรวมกันเป็นหลัก ฉันเช็คเอ้าท์สาขาใหม่จากหลักให้เรียกมันว่า fb_ # 1 ฉันส่งไปสองสามครั้งและต้องการรวมกลับเป็นหลัก ก่อนที่ฉันจะรวมใครบางคนควรทำการตรวจทานโค้ด ตอนนี้มีความเป็นไปได้ 2 แบบ: 1 ฉันรวมต้นแบบเข้ากับ fb_ # 1 ( ไม่ใช่ fb_ # 1 เป็นหลัก) เพื่อทำให้ทันสมัยที่สุด เพื่อนร่วมทีมจะตรวจทานการเปลี่ยนแปลงระหว่างหัวหน้าหลักและหัวหน้า fb_ # 1 หาก fb_ # 1 ไม่เป็นไรเราจะรวม fb_ # 1 เป็นหลัก ข้อดี: ไม่มีรหัสที่ล้าสมัยในการตรวจสอบ ข้อด้อย: ถ้ามีคนอื่นรวมบางอย่างระหว่าง "1. " และ "2. " การเปลี่ยนแปลงของเขาจะปรากฏในการตรวจสอบแม้ว่าจะเป็นของการตรวจสอบอื่น ครั้งที่ 2 เพื่อนร่วมทีมตรวจสอบการเปลี่ยนแปลงระหว่างจุดชำระเงิน …

7
สิ่งใดที่คุณมอบให้ในการแสดงซ้ำสองครั้งแรกใน Agile
ดังที่ฉันเข้าใจความคิดที่มีวิธีการแบบ Agile ก็คือคุณให้บางสิ่งบางอย่างที่ใช้งานได้ แอปพลิเคชันจะได้รับการเพิ่มขึ้นของรูปร่างขั้นสุดท้ายหลังจากการเพิ่มขึ้น แต่ในช่วงแรก ๆ คุณอาจสร้างเฟรมเวิร์กหรือฐานรากที่แอปพลิเคชันจะคงอยู่ดังนั้นผู้ใช้จึงเป็นสิ่งสำคัญ แต่มองไม่เห็น สิ่งใดที่ส่งมอบให้กับลูกค้าในการทำซ้ำครั้งแรก คุณแสดงความคืบหน้าในทิศทางที่ถูกต้องอย่างไรเมื่อคุณสร้างรหัสนั่งร้าน

2
มีโครงสร้างข้อมูลสำหรับรายการ / แผนที่ประเภทนี้หรือไม่?
อาจมีชื่อสำหรับสิ่งที่ฉันต้องการ แต่ฉันไม่ได้ตระหนักถึงมัน ฉันต้องการบางสิ่งที่คล้ายกับLinkedHashMapใน Java แต่มันจะส่งกลับค่า 'ก่อนหน้า' หากไม่มีค่าที่คีย์ที่ระบุ นั่นคือฉันมีรายการของวัตถุที่จัดเก็บโดยคีย์จำนวนเต็ม (ซึ่งอยู่ในหน่วยของเวลาในกรณีของฉัน): ; key->value 10->A 15->B 20->C ดังนั้นถ้าผมจะแบบสอบถามสำหรับค่าสำหรับคีย์ 0-9 nullก็จะกลับมา ส่วนพิเศษคือถ้าฉันถามหาสิ่งที่ 10 <= i <= 14 มันจะกลับมา A หรือสำหรับฉัน> = 20 ก็จะกลับ C มีโครงสร้างข้อมูลสำหรับสิ่งนี้หรือไม่?

3
ฉันควรใช้รายการหรืออาเรย์
ฉันกำลังทำงานบนฟอร์ม windows เพื่อคำนวณ UPC สำหรับหมายเลขรายการ ฉันประสบความสำเร็จในการสร้างหมายเลขที่จะจัดการหมายเลขรายการ / UPC ทีละรายการตอนนี้ฉันต้องการขยายและทำสำหรับหลายรายการหมายเลข / UPCs ฉันเริ่มและลองใช้รายการ แต่ฉันยังคงติดอยู่ ฉันสร้างคลาสผู้ช่วยเหลือ: public class Codes { private string incrementedNumber; private string checkDigit; private string wholeNumber; private string wholeCodeNumber; private string itemNumber; public Codes(string itemNumber, string incrementedNumber, string checkDigit, string wholeNumber, string wholeCodeNumber) { this.incrementedNumber = incrementedNumber; this.checkDigit = …
22 c#  array  winforms  list 

4
อธิบายความแตกต่างระหว่างรายการที่ค้างของผลิตภัณฑ์และงาน
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 6 ปีที่แล้ว ฉันได้พบกับความท้าทายนี้สองสามครั้งและฉันหวังว่าบางคนสามารถให้การอ้างอิงการฝึกอบรมหรือคำแนะนำเกี่ยวกับวิธีการอธิบายความแตกต่างระหว่างรายการที่ค้างสินค้ากับงานใน TFS ฉันเข้าใจและได้อธิบายว่ารายการสินค้าค้างคือ "อะไร" และภารกิจคือ "อย่างไร" ฉันได้อธิบายด้วยว่า PBI เป็นข้อกำหนดและภารกิจเป็นไปตามข้อกำหนด ฉันได้พบกับจ้องมองที่ว่างเปล่าและรอยขีดข่วนหัวบ่อยครั้งเมื่อฉันอธิบายสิ่งนี้ ดูเหมือนว่าวิศวกรซอฟต์แวร์ที่ฉันอธิบายเรื่องนี้จะไม่สามารถแยกความแตกต่าง มันเหมือนกันทั้งหมดสำหรับพวกเขา ฉันเชื่อว่าความท้าทายอื่น ๆ ของฉันคือฉันไม่สามารถอธิบายได้อย่างมีประสิทธิภาพว่าทำไมจึงเป็นสิ่งสำคัญที่จะทำให้ความแตกต่าง

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

2
SQL ประกาศหรือไม่
ฉันถามเพราะคำถามมากมายที่ฉันเห็นในจำนวน SQL ถึง: "นี่ช้าฉันจะเร่งความเร็วได้อย่างไร"? หรือแบบฝึกหัดที่ระบุว่า "ทำแบบนี้ไม่ใช่แบบนั้นเพราะมันเร็วกว่า" สำหรับฉันแล้วดูเหมือนว่าส่วนใหญ่ของ SQL จะรู้วิธีการแสดงออกและการแสดงออกของความรู้ที่เลือกสไตล์การแสดงออกที่ดีขึ้น สิ่งนี้ไม่ได้เป็นรูปสี่เหลี่ยมจัตุรัสในแง่มุมหนึ่งของการเขียนโปรแกรมเชิงประกาศซึ่งเป็นการออกจากระบบเพื่อตัดสินใจว่าจะทำการคำนวณอย่างไรให้ดีที่สุดกับคุณเพียงแค่ระบุสิ่งที่การคำนวณควรสร้าง ไม่ควรเครื่องยนต์ SQL ไม่สนใจเกี่ยวกับถ้าคุณใช้in, existsหรือjoinถ้ามันเป็นจริงที่เปิดเผยไม่ควรมันก็ให้คำตอบที่ถูกต้องในเวลาที่เหมาะสมถ้าเป็นไปได้ใด ๆ ของทั้งสามวิธี? ตัวอย่างล่าสุดนี้ได้รับแจ้งจากโพสต์ล่าสุดนี้ซึ่งเป็นประเภทที่ระบุไว้ในย่อหน้าเปิดของฉัน ดัชนี ฉันเดาตัวอย่างที่ง่ายที่สุดที่ฉันสามารถใช้เกี่ยวข้องกับการสร้างดัชนีสำหรับตาราง ชัยชนะที่นี่บน w3schools.comแม้พยายามอธิบายว่าเป็นสิ่งที่ผู้ใช้มองไม่เห็นซึ่งมีเหตุผลด้านประสิทธิภาพ คำอธิบายของพวกเขาดูเหมือนจะใส่ดัชนี SQL ในค่ายที่ไม่ประกาศและพวกเขาจะถูกเพิ่มด้วยมือเป็นประจำด้วยเหตุผลด้านประสิทธิภาพอย่างหมดจด เป็นกรณีที่มี SQL DB ในอุดมคติที่เปิดเผยมากกว่าที่เหลือทั้งหมด แต่เพราะเป็นสิ่งที่ดีไม่ได้ยินหรือไม่

9
หลักการและชื่อวิธีการของ OOP
class Boxer: def punch(self, punching_bag, strength): punching_bag.punch(strength) class PunchingBag: def punch(self, strength): print "Punching bag punched with strength", strength boxer = Boxer() punching_bag = PunchingBag() boxer.punch(punching_bag, 2) ไม่ต้องสงสัยเลยว่าpunchเป็นชื่อวิธีการที่ดีในกรณีนักมวย แต่ชื่อpunchก็ดีสำหรับวิธีการเจาะถุง ในทั้งสองกรณีฉันหมายถึงหมัดเป็นคำสั่ง (เช่นทำหมัด)

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