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

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

5
Joda Time กับ Java Time
ถึงแม้ว่า Joda จะมีคุณสมบัติที่หลากหลายและมีความซับซ้อนมากกว่าเวลา Java มาตรฐาน แต่ก็อาจไม่ใช่สิ่งที่ดีที่สุดในการใช้งานเสมอไป ฉันจะตัดสินใจได้อย่างไรว่าฉันควรใช้ Joda Time หรือ Java Time ในโค้ด Java ใด ๆ มีแนวทางบางอย่างที่บอกเราว่าจะเลือกแนวทางที่เหมาะสมหรือไม่ขึ้นอยู่กับข้อกำหนดของเรา
19 java  api  joda-time 

3
การเสริมความแข็งแกร่งของปัจจัยพื้นฐานและความอ่อนแอของ postconditions จะละเมิดหลักการทดแทน Liskov อย่างไร
ฉันอ่านว่าหลักการทดแทนของ Liskovถูกละเมิดหาก: เงื่อนไขเบื้องต้นมีความเข้มแข็งหรือ Postconditions จะอ่อนแอลง แต่ฉันยังไม่เข้าใจว่าจุดสองจุดนี้จะละเมิดหลักการเปลี่ยนตัว Liskov อย่างไร บางคนได้โปรดอธิบายด้วยตัวอย่าง โดยเฉพาะอย่างยิ่งหนึ่งในเงื่อนไขข้างต้นจะทำให้สถานการณ์ที่วัตถุ subclass ไม่สามารถทดแทนสำหรับวัตถุ superclass ได้อย่างไร

4
“ รับหรือกำหนด .. ” จำเป็นในเอกสารประกอบ XML ของคุณสมบัติหรือไม่
ฉันกำลังมองหาคำแนะนำวิธีปฏิบัติที่ดีที่สุดสำหรับความคิดเห็น XML ใน C # เมื่อคุณสร้างคุณสมบัติดูเหมือนว่าเอกสาร XML ที่ต้องการมีรูปแบบดังต่อไปนี้: /// <summary> /// Gets or sets the ID the uniquely identifies this <see cref="User" /> instance. /// </summary> public int ID { get; set; } แต่เนื่องจากลายเซ็นของสถานที่ให้บริการจะบอกคุณว่าการดำเนินงานที่มีให้กับลูกค้าภายนอกของชั้นเรียน (ในกรณีนี้มันเป็นทั้งสองgetและset) ฉันรู้สึกเหมือนความคิดเห็นที่ช่างพูดเกินไปและอาจจะพอดังต่อไปนี้: /// <summary> /// ID that uniquely identifies this <see cref="User" /> instance. /// </summary> …

3
ส่วนต่อท้ายข้อยกเว้นเกี่ยวกับข้อยกเว้นใน java
การระบุคำต่อท้ายของข้อยกเว้นในคลาสข้อยกเว้นรู้สึกเหมือนมีกลิ่นรหัสให้ฉัน (ข้อมูลที่ซ้ำซ้อน - ส่วนที่เหลือของชื่อแสดงถึงสถานะข้อผิดพลาดและสืบทอดมาจากข้อยกเว้น) อย่างไรก็ตามมันก็ดูเหมือนว่าทุกคนทำและดูเหมือนว่าจะเป็นแนวปฏิบัติที่ดี ฉันกำลังมองหาที่จะเข้าใจว่าทำไมการปฏิบัติที่ดีนี้ ฉันเคยเห็นและอ่านคำถามแล้วว่าทำไมข้อยกเว้นมักจะมีข้อยกเว้นต่อท้ายในชื่อชั้นเรียน คำถามสำหรับ PHP และในขณะที่การตอบสนองอาจใช้ได้สำหรับ Java มีข้อโต้แย้งอื่น ๆ หรือว่าเป็นเรื่องง่ายเหมือนการแยกแยะพวกเขาอย่างชัดเจน? หากเรานำตัวอย่างจากคำถามก่อนหน้านี้ - อาจมีคลาสใน java ด้วยชื่อFileNoFoundที่ไม่มีข้อยกเว้นหรือไม่ หากมีอาจเป็นไปได้หรือไม่ที่รับประกันว่าจะได้รับการรับรองด้วยExceptionหรือไม่ การดูลำดับชั้นอย่างรวดเร็วในสุริยุปราคาExceptionนั่นเองส่วนใหญ่ของพวกเขามีส่วนต่อท้ายของข้อยกเว้น แต่มีข้อยกเว้นเล็กน้อย javassistเป็นตัวอย่างของห้องสมุดที่ดูเหมือนว่าจะมีข้อยกเว้นบางประการโดยไม่ต้องต่อท้ายด้วย - เช่นBadByteCode, BadHttpRequestฯลฯ BouncyCastle เป็น lib อื่นที่มีข้อยกเว้นเช่น CompileError ฉันไปรอบ ๆ ด้วยข้อมูลเล็กน้อยในเรื่อง

6
วิธีการพัฒนาเมื่อนักพัฒนาซอฟต์แวร์หลายร้อยคนทำงานบนโซลูชันเดียว?
เราเป็นองค์กรที่ประกอบด้วยนักพัฒนาประมาณ 200 คนที่ทำงานอย่างต่อเนื่องในผลิตภัณฑ์เดียว (ใช้ Git revision control) ซึ่งมีการวางแผนที่จะวางจำหน่ายในวันที่กำหนด เนื่องจากนักพัฒนาจำนวนมากเรากำลังพยายามสร้างทีม "ข้ามหน้าที่" ที่มีนักพัฒนาประมาณ 10 คนในแต่ละทีมส่งผลให้มีทีมพัฒนาประมาณ 20 ทีมในองค์กร เนื่องจากเราต้องการรักษา "มาตรฐานสูง" อย่างต่อเนื่อง (หมายถึงเมื่อนักพัฒนาทำการดึงผลิตภัณฑ์อย่างน้อยควรจะสามารถคอมไพล์ได้ ฯลฯ ) ของผลิตภัณฑ์ในที่เก็บหลักเราจึงต้องการใช้ประตูคุณภาพบางประเภท ฉันไม่แน่ใจว่าจะตอบคำถามได้อย่างไร แต่ฉันสงสัยว่าฉันจะได้รับคำแนะนำเกี่ยวกับวิธีการพัฒนาสำหรับกลุ่มนักพัฒนาขนาดใหญ่เช่นนั้นที่ทำงานกับผลิตภัณฑ์เดียวหรือไม่ ในความเห็นของเราปลายด้านหนึ่งของสเปกตรัมคือการอนุญาตให้นักพัฒนาแต่ละคนส่งโดยตรงไปยังแหล่งเก็บข้อมูลหลักอย่างไรก็ตามเรากลัวว่าเนื่องจากผู้พัฒนาจำนวนมาก / มุ่งมั่นที่ "พื้นที่เก็บข้อมูลหลัก" อาจอยู่ในช่วงที่ขาดเนื่องจาก ถึงเราไม่สามารถมี "ประตูคุณภาพ" สำหรับการกระทำแต่ละอย่างได้ ปลายอีกด้านของสเปกตรัมอาจเป็นเช่นนั้น (เราคิดว่า Linus Torvalds / Linux ทำ) โครงสร้างต้นไม้หรือปิรามิดซึ่ง "คลังเก็บหลัก" มีแหล่งดึงสามแหล่งสามแห่งนี้มีแหล่งดึงที่เชื่อถือได้ ฯลฯ อย่างไรก็ตามเรารู้สึกว่าด้วยโครงสร้างเช่นการเปลี่ยนแปลงนั้นมีสายโซ่ยาวที่จะปีนขึ้นไปเพื่อเข้ามาใน "พื้นที่เก็บข้อมูลหลัก" นอกจากนี้หากเกิดข้อขัดแย้งในการผสานปัญหาจะเกิดกับผู้พัฒนารายอื่นมากกว่า "ผู้พัฒนาดั้งเดิม" จากข้อมูลพื้นฐานและความคิดเห็นทั้งหมดที่ระบุไว้เราจะเรียนรู้และอ่านวิธีการพัฒนาที่แนะนำสำหรับนักพัฒนาจำนวนมากได้อย่างไร องค์กรขนาดใหญ่ (Microsoft, …

6
เมื่อใดที่ต้องจ่ายสำหรับคอมไพเลอร์ C ++ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา เมื่อเร็ว ๆ นี้ฉันเริ่มสงสัยว่านักพัฒนาควรจะจ่ายค่าคอมไพเลอร์ คอมไพเลอร์มาฟรีกับแพลตฟอร์มส่วนใหญ่หรือมีรุ่นฟรีที่หาได้ง่าย ตัวอย่าง: OS X - GCC และ Clang / LLVM มาพร้อมกับเครื่องมือสำหรับนักพัฒนา ไม่มีข้อ จำกัด ที่นี่สำหรับวิธีและสิ่งที่คุณสามารถเปิดกับพวกเขา Linux - GCC และฉันก็มั่นใจมากกว่านี้ ฉันไม่รู้สถานะของคอมไพเลอร์ลินุกซ์ในปัจจุบัน ไม่มีข้อ จำกัด ที่นี่สำหรับวิธีและสิ่งที่คุณสามารถเปิดกับพวกเขา Windows - MinGW และ Microsoft เสนอ Visual Studio รุ่นฟรี ไม่มีข้อ จำกัด กับ MinGW แต่ฉันคิดว่า Visual Studio ฟรีมีข้อ จำกัด …
19 c++  compiler 

5
การตรวจจับการลบของการลบ [] กับการลบในเวลารวบรวม
ฉันต้องการทราบว่าเป็นไปได้หรือไม่ที่จะตรวจพบdeleteข้อผิดพลาดที่แสดงความคิดเห็นด้านล่างในเวลารวบรวม? โดยเฉพาะอย่างยิ่งฉันต้องการทราบเกี่ยวกับคอมไพเลอร์ g ++ ClassTypeA *abc_ptr = new ClassTypeA[100]; abc_ptr[10].data_ = 1; delete abc_ptr; // error, should be delete []

3
decoupling คนที่กล้าหาญ DRY เป็น REST หรือไม่?
ฉันกำลังสร้าง REST API เพื่อแสดงการทำงานส่วนใหญ่ของ Java API ที่มีอยู่ API ทั้งสองมีไว้สำหรับใช้ภายในองค์กรของฉัน ฉันไม่ต้องออกแบบเพื่อใช้ภายนอก ฉันมีอิทธิพลเหนือ API ทั้งคู่ แต่กำลังใช้งาน REST อยู่ Java API จะยังคงใช้งานต่อไปสำหรับแอปพลิเคชันในพื้นที่ (ไม่ใช่ "เลิกใช้") แต่ REST API จะใช้สำหรับการพัฒนาใหม่ที่สำคัญ บางคลาส Java API เป็นเพียงข้อมูล (beans ที่มีคุณสมบัติ, getters, setters) และอย่างน้อยสิ่งเหล่านี้ก็เหมาะสมที่จะส่งผ่าน (ในบางรูปแบบ) ผ่าน REST API เป็นข้อมูล (ซึ่งจะถูกจัดให้อยู่ในรูปแบบ XML หรือ JSON) ตัวอย่างเช่นคลาสที่เก็บข้อมูลเกี่ยวกับเครื่องเซิร์ฟเวอร์ ฉันกำลังเผชิญกับตัวเลือกต่อไปนี้สำหรับคลาสข้อมูลเหล่านี้: ฉัน ... เปิดเผยคลาส Java ดั้งเดิม …
19 java  api  rest  coupling  dry 

3
ชื่อแพ็กเกจใดที่จะเลือกสำหรับโครงการ Java ขนาดเล็กแบบโอเพ่นซอร์ส [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันต้องการเผยแพร่ไลบรารีโอเพนซอร์สขนาดเล็กใน Java ฉันสงสัยว่าฉันควรเลือกชื่อแพ็คเกจอะไร ฉันไม่ใช่ บริษัท และฉันไม่มีโดเมนที่ฉันสามารถใช้เป็นพื้นฐานสำหรับการตั้งชื่อแพ็คเกจตามข้อกำหนดการตั้งชื่อได้ ยังฉันต้องการที่จะปฏิบัติตามอนุสัญญาการตั้งชื่อเพื่อป้องกันความขัดแย้งโดยไม่ตั้งใจและเพื่อให้สิ่งต่าง ๆ มาตรฐาน

2
การใช้การโค่นล้มเป็นที่เก็บสิ่งประดิษฐ์เทียบกับเครื่องมือการจัดการสิ่งประดิษฐ์เฉพาะ
TL: DR: ทำไมจึงต้องใช้Apache ArchivaหรือSonatype Nexusเป็นแหล่งเก็บข้อมูลสิ่งประดิษฐ์แทนการโค่นล้ม? ระบบการสร้างที่ฉันใช้ในปัจจุบันมีจำนวนมากของ blobs ไบนารี (รูปภาพไฟล์เสียงไบนารีที่คอมไพล์แล้ว) ทั้งเป็นอินพุตและเอาต์พุตไปยังบิลด์ของเรา ระบบของเราสำหรับการจัดการสิ่งเหล่านี้เป็นสิ่งที่พิเศษมาก บางอันถูกตรวจสอบในที่เก็บโค่นล้มของเราพร้อมกับรหัสของเราบางอันถูกเก็บไว้ที่อื่นนอกการควบคุมเวอร์ชันทางการ ฉันกำลังดูการรวมสิ่งนี้เข้าด้วยกันดังนั้นเราจึงมีบางสิ่งที่สอดคล้องกับตัวเองและใช้งานง่ายกว่าและแยกสิ่งประดิษฐ์ไบนารีออกจากโค้ด Google บอกฉันว่ามีคลังเก็บวัตถุให้เลือกมากมาย ( Archiva , Nexus , Artifactory , …) แต่จากการอ่านไปรอบ ๆ ฉันไม่เห็นประโยชน์ใด ๆ จากการใช้ Subversion สิ่งนี้จะช่วยดูแลไบนารีของเรา - มันได้ทำไปแล้วสำหรับไบนารีบางตัวของเราเราแค่ต้องการจัดเรียงเลย์เอาต์ใหม่เพื่อแยกพวกมันออกจากโค้ด - และมีข้อได้เปรียบที่โดดเด่นที่เรามีเซิร์ฟเวอร์โค่นล้มและความเชี่ยวชาญ ดังนั้น. อะไรคือข้อดีของการใช้ระบบจัดการสิ่งประดิษฐ์เฉพาะโดยใช้เครื่องมือควบคุมเวอร์ชันทั่วไปเช่นการโค่นล้ม?

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

6
เหตุใดฉันจึงต้องการการทดสอบหน่วยสำหรับวิธีการทดสอบที่เก็บ?
ฉันต้องการที่จะเล่นกับผู้สนับสนุนปีศาจในคำถามนี้เล็กน้อยเพราะฉันไม่สามารถปกป้องมันได้ดีเพราะขาดประสบการณ์ นี่คือข้อตกลงฉันได้รับแนวคิดแตกต่างระหว่างการทดสอบหน่วยและการทดสอบการรวม เมื่อมุ่งเน้นไปที่วิธีการติดตาและพื้นที่เก็บข้อมูลโดยเฉพาะการทดสอบหน่วยจะใช้การเยาะเย้ยผ่านกรอบเช่น Moq เพื่อยืนยันว่าคำสั่งการค้นหาถูกส่งคืนตามที่คาดไว้ สมมติว่าฉันได้สร้างการทดสอบหน่วยต่อไปนี้: [TestMethod] public void GetOrderByIDTest() { //Uses Moq for dependency for getting order to make sure //ID I set up in 'Arrange' is same one returned to test in 'Assertion' } ดังนั้นถ้าฉันตั้งค่าOrderIdExpected = 5และวัตถุจำลองของฉันจะกลับมา5เป็น ID ที่การทดสอบของฉันจะผ่าน ฉันเข้าใจแล้ว ฉันหน่วยทดสอบรหัสเพื่อให้แน่ใจว่าสิ่งที่รหัส preforms ของฉันคืนวัตถุและ ID ที่คาดหวังและไม่ใช่อย่างอื่น อาร์กิวเมนต์ที่ฉันจะได้รับคือ: "ทำไมไม่เพียงแค่ข้ามการทดสอบหน่วยและทำการทดสอบการรวมกันมันเป็นการทดสอบขั้นตอนการจัดเก็บฐานข้อมูลและรหัสของคุณด้วยกันที่สำคัญดูเหมือนว่างานพิเศษมากเกินกว่าที่จะมีการทดสอบหน่วยและการทดสอบการรวมเข้าด้วยกัน และรหัสทำงานฉันรู้ว่าการทดสอบใช้เวลานานกว่า …

2
รูปแบบการออกแบบ Protobuf
ฉันกำลังประเมินบัฟเฟอร์ของ Google Protocol สำหรับบริการบน Java (แต่คาดว่าจะมีรูปแบบของผู้ไม่เชื่อเรื่องภาษา) ฉันมีสองคำถาม: คำถามแรกคือคำถามทั่วไปที่กว้างขวาง: เราเห็นรูปแบบอะไรที่ผู้คนใช้? รูปแบบดังกล่าวเกี่ยวข้องกับองค์กรระดับ (เช่นข้อความต่อไฟล์ .proto, บรรจุภัณฑ์และการจัดจำหน่าย) และคำจำกัดความของข้อความ (เช่นเขตข้อมูลซ้ำแล้วซ้ำกับเขตข้อมูลที่ห่อหุ้มซ้ำ *) เป็นต้น มีข้อมูลประเภทนี้น้อยมากในหน้าความช่วยเหลือของ Google Protobuf และบล็อกสาธารณะในขณะที่มีข้อมูลจำนวนมากสำหรับโปรโตคอลที่กำหนดเช่น XML ฉันยังมีคำถามเฉพาะเหนือรูปแบบที่แตกต่างกันสองแบบ: แสดงข้อความในไฟล์ .proto, จัดเก็บเป็น jar แยกต่างหากและจัดส่งไปยังผู้บริโภคเป้าหมายของบริการ - ซึ่งเป็นวิธีการเริ่มต้นที่ฉันเดา ทำเช่นเดียวกัน แต่รวมถึงการห่อด้วยมือที่สร้างขึ้น (ไม่ใช่คลาสย่อย!) รอบ ๆ แต่ละข้อความที่ใช้สัญญาที่สนับสนุนอย่างน้อยสองวิธีนี้ (T คือคลาส wrapper, V คือคลาสของข้อความ (ใช้ชื่อสามัญ : public V toProtobufMessage() { V.Builder builder = …

5
Google ปิดเป็นคอมไพเลอร์จริงหรือไม่?
คำถามนี้เป็นคำถามแรงบันดาลใจจากการอภิปรายในการแสดงความคิดเห็นในคำถามนี้กองมากเกิน Google ปิดคอมไพเลอร์เอกสารระบุต่อไปนี้ (เน้นเพิ่ม): Closure Compiler เป็นเครื่องมือสำหรับการดาวน์โหลด JavaScript และทำงานได้เร็วขึ้น มันเป็นคอมไพเลอร์ที่แท้จริงสำหรับ JavaScript แทนที่จะรวบรวมจากภาษาต้นฉบับเป็นรหัสเครื่องจะรวบรวมจาก JavaScript เป็น JavaScript ที่ดีกว่า อย่างไรก็ตามWikipediaให้คำจำกัดความของ "compiler" ดังต่อไปนี้: คอมไพเลอร์คือโปรแกรมคอมพิวเตอร์ (หรือชุดของโปรแกรม) ที่แปลงซอร์สโค้ดที่เขียนในภาษาโปรแกรม (ภาษาต้นฉบับ) เป็นภาษาคอมพิวเตอร์อื่น ... นักเขียนภาษามักจะเป็นโปรแกรมที่แปลรูปแบบของการแสดงออกโดยไม่ต้องเปลี่ยน ภาษา. จากนั้นฉันก็จะบอกว่า Google Closure ไม่ใช่คอมไพเลอร์ แต่ความจริงที่ว่า Google ระบุอย่างชัดเจนว่าที่จริงแล้วมันเป็น "คอมไพเลอร์ที่แท้จริง" ทำให้ฉันสงสัยว่ามีอะไรมากกว่านั้น Google Closure เป็นคอมไพเลอร์ JavaScript จริงๆหรือ

3
เหตุใดจึงต้องใช้บริการเว็บแทนการเข้าถึงฐานข้อมูลเชิงสัมพันธ์โดยตรงสำหรับแอป Android
ฉันค้นหาบนเว็บวิธีการเข้าถึงอย่างมีประสิทธิภาพในฐานข้อมูลกลางที่สถานที่ห่างไกลและฉันได้พบกับข้อเสนอแนะในการใช้บริการเว็บแทนการเข้าถึงโดยตรง (เช่น JDBC เป็นต้น) ไปยังฐานข้อมูลฉันสงสัยว่าเหตุผลนั้นและคำแนะนำอื่น ๆ .

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