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

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

3
การเยาะเย้ยระดับคอนกรีต - ไม่แนะนำ
ฉันเพิ่งอ่านข้อความที่ตัดตอนมาจากหนังสือ "Growing Object-Oriented Software" ซึ่งอธิบายเหตุผลบางอย่างว่าทำไมไม่แนะนำให้ใช้การล้อเลียนระดับคอนกรีต นี่คือตัวอย่างโค้ดของการทดสอบหน่วยสำหรับคลาส MusicCentre: public class MusicCentreTest { @Test public void startsCdPlayerAtTimeRequested() { final MutableTime scheduledTime = new MutableTime(); CdPlayer player = new CdPlayer() { @Override public void scheduleToStartAt(Time startTime) { scheduledTime.set(startTime); } } MusicCentre centre = new MusicCentre(player); centre.startMediaAt(LATER); assertEquals(LATER, scheduledTime.get()); } } และคำอธิบายแรกของเขา: ปัญหาด้วยวิธีนี้คือมันทิ้งความสัมพันธ์ระหว่างวัตถุโดยนัย ฉันหวังว่าเราได้ทำให้ชัดเจนแล้วในตอนนี้ความตั้งใจของการพัฒนาขับเคลื่อนทดสอบกับวัตถุจำลองคือการค้นพบความสัมพันธ์ระหว่างวัตถุ …

5
คำนวณถ้าฟังก์ชั่นนั้นบริสุทธิ์
ตาม Wikipedia: ในการเขียนโปรแกรมคอมพิวเตอร์ฟังก์ชั่นอาจอธิบายได้ว่าบริสุทธิ์ถ้าทั้งสองคำสั่งเหล่านี้เกี่ยวกับฟังก์ชั่นไว้: ฟังก์ชั่นประเมินค่าผลลัพธ์เดียวกันเสมอให้ค่าอาร์กิวเมนต์ที่เหมือนกัน ค่าผลลัพธ์ของฟังก์ชันไม่สามารถขึ้นอยู่กับข้อมูลหรือสถานะใด ๆ ที่ซ่อนอยู่ซึ่งอาจเปลี่ยนแปลงได้เมื่อการดำเนินการของโปรแกรมดำเนินไปหรือระหว่างการดำเนินการที่แตกต่างกันของโปรแกรมและไม่สามารถขึ้นอยู่กับอินพุตภายนอกจากอุปกรณ์ I / O การประเมินผลลัพธ์ไม่ได้ทำให้เกิดผลข้างเคียงหรือเอาท์พุทที่สังเกตเห็นได้ทางความหมายเช่นการกลายพันธุ์ของวัตถุที่ไม่แน่นอนหรือเอาท์พุทไปยังอุปกรณ์ I / O ฉันสงสัยว่ามันเป็นไปได้ที่จะเขียนฟังก์ชั่นที่คำนวณว่าฟังก์ชั่นนั้นบริสุทธิ์หรือไม่ รหัสตัวอย่างใน Javascript: function sum(a,b) { return a+b; } function say(x){ console.log(x); } isPure(sum) // True isPure(say) // False

5
ข้อกำหนดต่างๆถูกกำหนดไว้ในโครงการซอฟต์แวร์โอเพ่นซอร์สหรือไม่
ในการพัฒนาซอฟต์แวร์ภายในองค์กรเป็นเรื่องปกติที่ข้อกำหนดต่างๆจะถูกกำหนดผ่านกระบวนการที่เป็นทางการทำให้มีการสร้างเอกสารข้อกำหนดจำนวนมาก ในการพัฒนาซอฟต์แวร์โอเพนซอร์ซเรื่องนี้มักจะไม่ปรากฏ ดังนั้นคำถามของฉันคือ: ข้อกำหนดถูกกำหนดในโครงการซอฟต์แวร์โอเพ่นซอร์สอย่างไร? โดย "การกำหนดความต้องการ" ฉันหมายถึง "การหาว่าคุณสมบัติอื่น ๆ ควรได้รับการพัฒนาเป็นส่วนหนึ่งของซอฟต์แวร์เฉพาะ" หรือไม่

4
มี API สำหรับกำหนดเขตรัฐสภาหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันกำลังมองหาเพื่อกำหนดเขตรัฐสภาตามที่อยู่ที่ผู้ใช้ของฉันให้ สิ่งนี้จะหลีกเลี่ยงไม่ให้ผู้ใช้ค้นหาด้วยตนเอง API ของการจัดเรียงนี้มีอยู่จริงหรือไม่? บันทึก จากความพยายามของฉันในการค้นหาฉันพบเจอสิ่งเหล่านี้เท่านั้น: http://www.govtrack.us/developers/api (ไม่แน่ใจว่าจะส่งที่อยู่หรือรหัสไปรษณีย์อย่างไร) ทรัพยากรต่อไปนี้มีอยู่ใน API ... ตั๋วเงินและมติในรัฐสภาคองเกรสแห่งสหรัฐอเมริกาตั้งแต่ปี 2516 (การประชุมครั้งที่ 93) ... คู่ (บิล, คน) ที่แสดง cosponsorship พร้อมวันที่เข้าร่วมและถอนตัว ... สมาชิกรัฐสภาและประธานาธิบดีสหรัฐฯนับตั้งแต่ก่อตั้งประเทศ ... ข้อกำหนดในสำนักงานของสมาชิกรัฐสภาและประธานาธิบดีสหรัฐฯ แต่ละเทอมสอดคล้องกับการเลือกตั้งหมายถึงแต่ละเทอมในสภาครอบคลุมสองปี (หนึ่งสภาคองเกรส) ในฐานะประธานาธิบดีสี่ปีและในวุฒิสภาหกปี (สามของรัฐสภา) ... สะสมคะแนนโหวตในรัฐสภาคองเกรสแห่งสหรัฐอเมริกาตั้งแต่ปี ค.ศ. 1789 วิธีการที่ผู้คนโหวตให้เข้าถึงผ่าน Vote_voter API ... ผู้คนโหวตให้คะแนนโหวตในรัฐสภาคองเกรสแห่งสหรัฐอเมริกาได้อย่างไรตั้งแต่ปี …
11 api 

3
Git เวิร์กโฟลว์สำหรับทีมขนาดเล็ก
ฉันกำลังทำงานกับเวิร์กโฟลว์ git เพื่อนำไปใช้ในทีมเล็ก ๆ แนวคิดหลักในเวิร์กโฟลว์: มีต้นแบบโครงการที่ใช้ร่วมกันที่สมาชิกในทีมทุกคนสามารถเขียนได้ การพัฒนาทั้งหมดจะทำเฉพาะในสาขาคุณลักษณะ สาขาฟีเจอร์คือรหัสที่สมาชิกทีมอื่นตรวจสอบซึ่งไม่ใช่ผู้เขียนสาขา ในที่สุดสาขาคุณลักษณะจะถูกรวมเข้ากับต้นแบบที่ใช้ร่วมกันและรอบจะเริ่มขึ้นอีกครั้ง บทความอธิบายขั้นตอนต่าง ๆ ในวงจรนี้โดยละเอียด: https://github.com/janosgyerik/git-workflows-book/blob/small-team-workflow/chapter05.md สิ่งนี้เหมาะสมหรือฉันขาดอะไรไป?

2
เป็นวิธีที่เหมาะสมในการสร้างแอป Winform ด้วย "หน้าจอ" หลายหน้าจอ
วิธีที่เหมาะสมในการสร้างแอป Winform ที่มี 'หน้าจอ' หลายรายการคืออะไร ตัวอย่างเช่นฉันกำลังพยายามเขียนโปรแกรมสำรองข้อมูลขนาดเล็ก (ส่วนใหญ่สำหรับ giggles) และฉันได้ทิ้งการควบคุมและคอนเทนเนอร์ลงในแบบฟอร์ม ฉันใช้พาเนลและกล่องกลุ่มเพื่อแยกหน้าจอที่แตกต่างกันออกไป (เช่น: ฉันใช้แผงควบคุมทั้งหมดสำหรับหน้าต่าง "การตั้งค่า" และอีกพาเนลอื่นเพื่อแสดงการสำรองข้อมูลปัจจุบันทั้งหมดที่ตั้งค่าไว้ ) ไฟล์ form.cs ของฉันใส่เข้าไปในโค้ดจำนวนมากและฉันรู้สึกว่าฉันทำอะไรผิดไป ฉันแทบจะไม่พบสิ่งใดในไฟล์และฉันพร้อมที่จะเริ่มต้นใหม่ โครงการนี้เป็นเพียงสำหรับฉันที่จะขยายความรู้ของฉันของ C # และ. NET ดังนั้นการเริ่มต้นโครงการใหม่จึงไม่ใช่เรื่องใหญ่
11 c#  gui  winforms  gui-design 

6
วิธีการวนซ้ำลดความซับซ้อนของวงจรและปรับปรุงการสนับสนุนหรือไม่
วิธีการทำซ้ำอย่างเช่นพบได้ทั่วไปในภาษาสมัยใหม่เช่น C #, JavaScript และ (หวังว่า) ใน Java 8 ลดความซับซ้อนของวงจรที่มีต่อความเข้าใจและการสนับสนุนของโค้ดหรือไม่? ตัวอย่างเช่นใน C # เราอาจมีรหัสต่อไปนี้: List<String> filteredList = new List<String>(); foreach (String s in originalList){ if (matches(s)){ filteredList.add(s); } } สิ่งนี้มีความซับซ้อนตามวัฏจักรของ 2 เราสามารถเขียนใหม่นี้ได้อย่างง่ายดายในฐานะ: List<String> filteredList = originalList.where(s => matches(s)); ซึ่งมีความซับซ้อนตามวัฏจักรของ 0 สิ่งนี้ส่งผลให้มีรหัสที่สนับสนุนได้จริงหรือไม่ มีการวิจัยจริงในหัวข้อนี้หรือไม่?

8
Java นั้นยากกว่าการ "ปรับแต่ง" เพื่อประสิทธิภาพเมื่อเทียบกับ C / C ++ หรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว "ความมหัศจรรย์" ของ JVM ขัดขวางอิทธิพลของโปรแกรมเมอร์ที่มีต่อการปรับให้เหมาะสมขนาดจิ๋วใน Java หรือไม่? ฉันเพิ่งอ่านใน C ++ บางครั้งการเรียงลำดับของข้อมูลสมาชิกสามารถให้การเพิ่มประสิทธิภาพ (ได้รับในสภาพแวดล้อม microsecond) และฉันสันนิษฐานว่ามือของโปรแกรมเมอร์ถูกผูกไว้เมื่อมันมาถึงการบีบประสิทธิภาพจาก Java? ฉันขอขอบคุณอัลกอริทึมที่เหมาะสมให้ความเร็วที่เพิ่มขึ้น แต่เมื่อคุณมีอัลกอริทึมที่ถูกต้องแล้ว Java จะปรับแต่งยากขึ้นเนื่องจากการควบคุม JVM หรือไม่ ถ้าไม่ใช่คนอาจยกตัวอย่างว่าคุณสามารถใช้กลอุบายอะไรใน Java (นอกเหนือจากการคอมไพล์แฟล็กเรียบง่าย)

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

2
เลิกใช้แล้วเทียบกับถูกปฏิเสธใน JavaDoc?
ใน JavaDoc เพื่อX509Certificate getSubjectDN()ระบุ: denigratedแทนที่ด้วย getSubjectX500Principal () ฉันเคยเห็นเลิกใช้ในวิธีการที่ไม่ควรใช้อีกต่อไป แต่ไม่ได้ลบล้าง ฉันพบรายงานข้อผิดพลาดเกี่ยวกับกรณีนี้โดยเฉพาะซึ่งปิดด้วยความคิดเห็น: นี่ไม่ใช่ข้อผิดพลาด "เลิกใช้แล้ว" มีไว้เพื่อใช้ในกรณีที่ร้ายแรงเท่านั้น เมื่อเรากำลังใช้เมธอดที่ถูกคัดค้านการดำเนินการที่แนะนำทั่วไปคือการหยุดใช้เมธอด ดังนั้นสิ่งที่เป็นปัญหาเมื่อการดำเนินการวิธีการที่ถูกทำเครื่องหมายเป็นdenigrated ?

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

3
ฉันจะวาดเส้นแบ่งระหว่างการทดสอบหน่วยและการทดสอบการรวมได้อย่างไร พวกเขาควรจะแยกจากกัน?
ฉันมีกรอบ MVC ขนาดเล็กที่ฉันทำงานอยู่ มันคือฐานรหัสไม่ใช่เรื่องใหญ่ แต่มันก็ไม่ได้มีแค่สองสามชั้น ในที่สุดฉันก็ตัดสินใจที่จะกระโดดและเริ่มเขียนแบบทดสอบ (ใช่ฉันรู้ว่าฉันควรจะทำอย่างนั้นมาตลอด แต่มันก็ API ไม่เสถียรอย่างยิ่งจนถึงตอนนี้) อย่างไรก็ตามแผนของฉันคือทำให้ง่ายมากในการทดสอบรวมถึงการทดสอบการรวม ตัวอย่างการทดสอบการรวมตัวจะเป็นไปตามบรรทัดเหล่านี้: วัตถุคำขอ HTTP ปลอม -> กรอบงาน MVC -> วัตถุตอบกลับ HTTP -> ตรวจสอบว่าการตอบสนองนั้นถูกต้อง เพราะนี่เป็นสิ่งที่ทำได้โดยไม่ต้องใช้เครื่องมือพิเศษ (เบราว์เซอร์อัตโนมัติเป็นต้น) ฉันสามารถทำได้ด้วยกรอบการทดสอบตามปกติ (ฉันใช้ NUnit) ตอนนี้คำถามใหญ่ ฉันจะวาดเส้นแบ่งระหว่างการทดสอบหน่วยและการทดสอบการรวมได้ที่ไหน ฉันควรทดสอบทีละชั้น (มากที่สุดเท่าที่จะทำได้) ด้วยการทดสอบหน่วย? ควรวางการทดสอบการรวมในโครงการทดสอบเดียวกันกับโครงการทดสอบหน่วยของฉันหรือไม่

13
การจัดการกับน้ำซุปรั้งหยิก
ฉันเขียนโปรแกรมทั้ง C # และ VB.NET มาหลายปีแล้ว แต่ส่วนใหญ่เป็น VB ฉันเปลี่ยนอาชีพไปสู่ ​​C # และโดยรวมแล้วฉันชอบ C # ดีกว่า แต่ประเด็นหนึ่งที่ฉันมีก็คือซุปรั้งปีกนก ใน VB คำหลักโครงสร้างแต่ละคำมีคีย์เวิร์ดปิดที่ตรงกันตัวอย่างเช่น: Namespace ... Class ... Function ... For ... Using ... If ... ... End If If ... ... End If End Using Next End Function End Class End Namespace รหัสเดียวกันที่เขียนใน C …

3
การใช้ภาษาเดียวกันกับไคลเอนต์และเซิร์ฟเวอร์มีความสำคัญอย่างไร
ฉันได้ประเมินโซลูชันสถาปัตยกรรมสำหรับโครงการมือถือที่จะมีบริการบนเว็บ / แอพนอกเหนือจากแอพพื้นฐานและได้ดูห้องสมุดกรอบงานและสแต็กต่าง ๆ เช่นMeteorซึ่งเป็นประเภทของ "open stack package framework" ถูกผูกไว้อย่างแน่นหนากับNode.js มีการพูดคุยกันมากมายเกี่ยวกับประโยชน์ของการใช้ภาษาเดียวกันทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์และฉันไม่เข้าใจ ฉันสามารถเข้าใจว่าคุณต้องการสะท้อนสถานะทั้งหมดของเว็บแอปพลิเคชันบนทั้งไคลเอนต์และเซิร์ฟเวอร์ แต่พยายามดิ้นรนเพื่อหาชัยชนะอื่น ๆ ... ประสิทธิภาพของเวิร์กโฟลว์? ฉันพยายามที่จะเข้าใจว่าทำไมความเท่าเทียมกันของภาษาของลูกค้า / เซิร์ฟเวอร์จึงถือเป็นจอกศักดิ์สิทธิ์ เหตุใดความเท่าเทียมกันของภาษาไคลเอนต์ / เซิร์ฟเวอร์จึงมีความสำคัญในการพัฒนาซอฟต์แวร์

3
หนึ่งจะไปเกี่ยวกับการอ่านหน่วยความจำจากกระบวนการได้อย่างไร มันแตกต่างจากระบบปฏิบัติการหรือไม่
ในฐานะนักพัฒนาเว็บที่มีประสบการณ์ แต่เป็นโปรแกรมเมอร์ "ระดับต่ำ" สามเณรสิ่งนี้เป็นสิ่งที่ฉันยังคงทำขึ้นอยู่ ฉันอยากรู้ว่าจะเริ่มค้นหาบล็อกหน่วยความจำได้อย่างไรแล้วอ่านมัน (เช่นอ่านตัวจับเวลาในเกมของเหมือง)? สิ่งนี้แตกต่างจากเวอร์ชั่น OS / OS หรือไม่?

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