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

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

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

2
มีหลักการอินเตอร์เฟซ“ ถามเฉพาะสิ่งที่คุณต้องการ” หรือไม่?
ฉันได้เติบโตขึ้นโดยใช้หลักการในการออกแบบและใช้งานส่วนต่อประสานที่พูดโดยทั่วไปว่า "ถามเฉพาะสิ่งที่คุณต้องการ" ตัวอย่างเช่นหากฉันมีประเภทที่สามารถลบได้มากมายฉันจะสร้างDeletableส่วนต่อประสาน: interface Deletable { void delete(); } จากนั้นฉันสามารถเขียนคลาสสามัญ: class Deleter<T extends Deletable> { void delete(T t) { t.delete(); } } ที่อื่นในรหัสฉันมักจะถามถึงความรับผิดชอบที่เล็กที่สุดที่เป็นไปได้เพื่อตอบสนองความต้องการของรหัสลูกค้า ดังนั้นถ้าฉันจะต้องลบFileก็ยังจะขอไม่ได้ DeletableFile หลักการนี้เป็นความรู้ทั่วไปและมีชื่อยอมรับแล้วหรือไม่? มันขัดแย้งหรือไม่ มันถูกกล่าวถึงในตำราหรือไม่?

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

2
คุณภาพข้อมูลในการทดสอบการถดถอยฐานข้อมูลเชิงสัมพันธ์
ฉันทำงานกับเว็บแอปพลิเคชันการจัดการคอลเล็กชั่นโอเพนซอร์ซที่ใช้เพื่อติดตามการบริจาคบริจาคให้ยืมหรือซื้อสิ่งของอื่น ๆ ของพิพิธภัณฑ์ สิ่งนี้เกี่ยวข้องกับการออกแบบและสร้างฐานข้อมูลที่ค่อนข้างใหญ่ (เมื่อเทียบกับประสบการณ์ก่อนหน้าของฉัน) ซึ่งเก็บข้อมูลที่หลากหลายทุกชนิด (ข้อมูลสิ่งประดิษฐ์การเปลี่ยนข้อมูลสถานที่ข้อมูลการติดต่อส่วนบุคคลรูปภาพ ฯลฯ ) ซึ่งต้องยืดหยุ่นและขยายได้อย่างง่ายดาย . ฉันเพิ่งจบระดับมหาวิทยาลัยของฉันและฉันไม่ใช่มืออาชีพเมื่อพูดถึงการออกแบบฐานข้อมูลและดังนั้นฉันจึงต้องการสร้างชุดทดสอบอย่างละเอียดเพื่อให้แน่ใจว่าสิ่งที่ฉันมี "การทำงาน" ฉันได้อ่านข้อมูลเกี่ยวกับการทดสอบฐานข้อมูลและพบบทความเล็ก ๆ น้อย ๆ ที่กล่าวถึงการทดสอบการถดถอยเกี่ยวกับฐานข้อมูล แต่ฉันไม่เข้าใจสิ่งที่เกี่ยวข้องทั้งหมด จากการอ่านบทความนี้ที่ Dr.Dobbsฉันเข้าใจว่าการทดสอบประเภทหนึ่งที่ฉันต้องทำคือการตรวจสอบว่าตรรกะในฐานข้อมูลนั้นถูกต้อง ดังนั้นฉันจะสร้างการทดสอบที่แทรกข้อมูลบางอย่างลงในฐานข้อมูลแล้วติดตามด้วยแบบสอบถามเพื่อให้แน่ใจว่าฉันได้รับข้อมูลที่ถูกต้องกลับมาจากฐานข้อมูล (รับรองว่าทริกเกอร์หรือมุมมองที่เหมาะสมทั้งหมดทำงาน) ความสับสนเกิดขึ้นจากการทดสอบ "คุณภาพข้อมูล" ในบทความข้างต้นผู้เขียนพูดถึงว่าคุณต้องการตรวจสอบต่อไปนี้ด้วยการทดสอบ: กฎค่าโดเมนคอลัมน์ กฎค่าเริ่มต้นของคอลัมน์ กฎการดำรงอยู่ของค่า กฎค่าแถว ขนาดกฎ การทดสอบประเภทนี้เกี่ยวข้องกับอะไรและจะนำไปใช้อย่างไร นี่เป็นครั้งแรกที่ฉันเขียนชุดทดสอบสำหรับฐานข้อมูลมีแนวทางใดที่ดีในการเริ่มต้นหรือกระบวนการใด ๆ ที่ฉันสามารถทำตามเพื่อเป็นแนวทางในการพัฒนาการทดสอบของฉัน

11
ภาพควรจะสามารถปรับขนาดตัวเองใน OOP หรือไม่?
ฉันกำลังเขียนแอพที่จะมีImageเอนทิตีและฉันมีปัญหาในการตัดสินใจว่าควรรับผิดชอบงานใด ก่อนอื่นฉันมีImageชั้นเรียน มันมีเส้นทางความกว้างและคุณลักษณะอื่น ๆ แล้วฉันจะสร้างชั้นสำหรับการดึงภาพด้วยวิธีการเดียวและการทดสอบเช่น:ImageRepositoryfindAllImagesWithoutThumbnail() createThumbnail()แต่ตอนนี้ผมยังจะต้องมีความสามารถในการ ใครควรจัดการกับสิ่งนั้น? ฉันกำลังคิดว่าจะมีImageManagerชั้นเรียนซึ่งจะเป็นชั้นเรียนเฉพาะแอป (จะมีองค์ประกอบที่สามารถนำมาใช้ใหม่ได้อีกด้วยซึ่งเป็นทางเลือกของการจัดการภาพของบุคคลที่สาม หรืออาจจะเป็น 0K เพื่อให้การImageปรับขนาดตัวเอง หรือปล่อยให้ImageRepositoryและImageManagerเป็นชั้นเดียวกันได้หรือไม่ คุณคิดอย่างไร?

2
การทดสอบหน่วย:“ มันเป็นกลิ่นรหัสหากคุณทำการปรับโครงสร้างใหม่และไม่มีผู้ทำงานร่วมกัน”?
ฉันกำลังอ่านศิลปะของการทดสอบหน่วยโดย Roy Osherove ฉันอยู่ที่หัวข้อ 7.2 การเขียนแบบทดสอบที่คงไว้ซึ่งผู้เขียนมีหมายเหตุเกี่ยวกับกลิ่นรหัสนี้: หมายเหตุ: เมื่อคุณ refactor สถานะภายในที่จะมองเห็นได้จากการทดสอบภายนอกอาจถือได้ว่าเป็นกลิ่นรหัส (สัญญาณว่ามีบางอย่างผิดปกติในการออกแบบหรือตรรกะของรหัส) มันไม่ได้เป็นกลิ่นรหัสเมื่อคุณ refactoring เปิดเผยผู้ทำงานร่วมกัน มันเป็นกลิ่นรหัสหากคุณทำการปรับโครงสร้างใหม่และไม่มีผู้ทำงานร่วมกัน แก้ไข : สิ่งที่ผู้เขียนหมายถึงโดย "ผู้ทำงานร่วมกัน" คือการพึ่งพา ตัวอย่างบางส่วนของเขาสำหรับการพึ่งพาคือคลาสที่เข้าถึงฐานข้อมูลหรือเข้าถึงระบบไฟล์ของระบบปฏิบัติการ นี่คือที่ซึ่งเขากำหนดต้นขั้วและเริ่มใช้คำทำงานร่วมกัน: ต้นขั้วเป็นแทนควบคุมที่มีอยู่การพึ่งพา (หรือ ทำงานร่วมกัน ) ในระบบ ผู้เขียนไม่มีตัวอย่างของกลิ่นรหัสนี้และฉันมีปัญหาในการทำความเข้าใจ / นึกภาพว่ามันจะเป็นอย่างไร บางคนสามารถอธิบายสิ่งนี้ได้มากกว่านี้เล็กน้อยและอาจเป็นตัวอย่างที่ชัดเจน?

6
ฉันจะได้รับประสบการณ์การเขียนโปรแกรมมากขึ้น [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันจะเป็นนักศึกษาวิทยาศาสตร์คอมพิวเตอร์ปีที่สามและฉันได้อ่าน Head first Java, Head First C และตอนนี้ฉันกำลังอ่าน C ++ ซึ่งเป็นภาษาที่ฉันชอบมากที่สุดเนื่องจากมีรูปแบบการสอนที่ดีสำหรับผู้ที่มีประสบการณ์ ฉันวางแผนที่จะเรียนรู้การทำซอฟต์แวร์ด้วย QT เรียนรู้เกี่ยวกับวัตถุประสงค์ -C (สำหรับ iphone) หรืออ่าน C ++ ที่มีประสิทธิภาพ ฉันจะได้รับประสบการณ์ในฐานะโปรแกรมเมอร์ได้อย่างไร ฉันมีทักษะในการเข้าร่วมโครงการโอเพนซอร์สหรือไม่หรือฉันจำเป็นต้องเรียนรู้ php, mySQL หรือภาษาอื่น ๆ ฉันรักการเขียนโปรแกรมและวิทยาศาสตร์คอมพิวเตอร์โดยทั่วไปถึงแม้ว่าบางห้องเรียนอาจยากมาก (วิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี) ฉันวางแผนที่จะเป็นกูรูใน c ++ ด้วย แต่นั่นจะไม่เกิดขึ้นเร็ว ๆ นี้
9 c++  experience  qt 

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

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

4
กำลังวิเคราะห์การใช้หน่วยความจำ: Java vs C ++ เล็กน้อย
การใช้หน่วยความจำของวัตถุจำนวนเต็มที่เขียนใน Java เปรียบเทียบ \ contrast กับการใช้หน่วยความจำของวัตถุจำนวนเต็มที่เขียนใน C ++ อย่างไร ความแตกต่างเล็กน้อยหรือไม่ ไม่แตกต่าง? ความแตกต่างใหญ่? ฉันคาดเดาว่ามันเหมือนกันเพราะ int เป็น int โดยไม่คำนึงถึงภาษา (?) เหตุผลที่ฉันถามสิ่งนี้เพราะฉันกำลังอ่านเกี่ยวกับความสำคัญของการรู้ว่าข้อกำหนดหน่วยความจำของโปรแกรมเมื่อใดจะทำให้โปรแกรมเมอร์ไม่สามารถแก้ไขปัญหาที่กำหนดได้ สิ่งที่ทำให้ฉันหลงใหลคือจำนวนหน่วยความจำที่จำเป็นสำหรับการสร้างวัตถุ Java ชิ้นเดียว ยกตัวอย่างเช่นวัตถุจำนวนเต็ม แก้ไขให้ฉันถ้าฉันผิด แต่วัตถุจำนวนเต็ม Java ต้องการหน่วยความจำ 24 ไบต์: 4 ไบต์สำหรับตัวแปรอินสแตนซ์ของมัน 16 ไบต์ของค่าใช้จ่าย (อ้างอิงถึงคลาสของวัตถุข้อมูลการรวบรวมขยะ & ข้อมูลการซิงโครไนซ์) การซ้อน 4 ไบต์ เป็นอีกตัวอย่างหนึ่งอาร์เรย์ Java (ซึ่งถูกนำมาใช้เป็นวัตถุ) ต้องการ 48 + ไบต์: ข้อมูลส่วนหัว 24 ไบต์ ค่าใช้จ่ายของวัตถุ …

4
มีข้อเสียในการติดตั้ง Visual Studio Ultimate หากฉันไม่ต้องการคุณสมบัติทั้งหมดหรือไม่
Microsoft เปิดตัว Visual Studio 2012 รุ่นสุดท้ายใน MSDN ฉันพยายามที่จะตัดสินใจจากนี้หน้าเปรียบเทียบรุ่นซึ่งรุ่นจะติดตั้ง (ฉันสามารถติดตั้งรุ่นใด ๆ ที่ฉันต้องการฟรี) ฉันเป็นนักพัฒนาเดี่ยวที่พัฒนาเว็บแอพและคอนโซลแอพส่วนใหญ่ใน C # และ Python คุณสมบัติบางอย่างใน Ultimate / Premium อาจดูเท่ (เช่น UML และ "การแก้ไขข้อบกพร่องทางประวัติศาสตร์") แต่คุณสมบัติส่วนใหญ่ที่ฉันไม่ต้องการหรือไม่เคยได้ยินมาก่อน ในอีกด้านหนึ่งมันคงจะดีถ้ามีคุณสมบัติในกรณีที่ฉันต้องการมันสักวัน ในทางกลับกันสำหรับผลิตภัณฑ์ซอฟต์แวร์บางรุ่นคุณสมบัติพิเศษทำให้รุ่นที่สูงกว่าไปที่ (1) ช้าลงและใช้หน่วยความจำมากขึ้นและ (2) มี UI ที่ยุ่งเหยิงมากขึ้น เป็นกรณีนี้กับ Visual Studio หรือไม่

4
ส่งคืนอินเตอร์เฟสหรือคลาส
สมมติว่าฉันมีวิธี public List<User> GetBatchOfUsers(IEnumerable<int> userIDs) { List<User> users = new List<User>(); // some database stuff return users; } ฉันได้อ่านว่ามันจะดีกว่าที่จะกลับมาอินเตอร์เฟซ (อย่างใดอย่างหนึ่งIListหรือIEnumerable) Listเมื่อเทียบกับกลับ ข้อโต้แย้งบางประการที่ฉันเคยได้ยินเกี่ยวกับการทำเช่นนั้นคือมันซ่อนข้อมูลและให้ความยืดหยุ่นแก่นักพัฒนา API ในการเปลี่ยนการแสดงข้อมูลภายในในภายหลัง ความกังวลของฉันเกี่ยวกับการส่งคืนIEnumerableคือคุณสูญเสียฟังก์ชันการทำงานเช่นการเข้าถึงแบบสุ่มและCountคุณสมบัติ ฉันรู้ว่าการยอมรับIEnumerableพารามิเตอร์เป็นสิ่งที่สมเหตุสมผลเนื่องจากทำให้ผู้บริโภคมีความยืดหยุ่นที่ดีที่สุดในการส่งข้อมูลไปยังวิธีการของฉันซึ่งเป็นข้อกำหนดที่เรียบง่ายสำหรับวิธีการใช้งาน แนวปฏิบัติที่ดีที่สุดสำหรับประเภทส่งคืนคืออะไร
9 c#  interfaces  class 

9
printf - แหล่งที่มาของข้อบกพร่อง? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันใช้มากprintfสำหรับการติดตาม / การบันทึกในรหัสของฉันฉันพบว่ามันเป็นแหล่งที่มาของข้อผิดพลาดในการเขียนโปรแกรม ฉันมักจะพบตัวดำเนินการแทรก ( <<) ค่อนข้างแปลก แต่ฉันเริ่มคิดว่าการใช้มันแทนฉันสามารถหลีกเลี่ยงข้อบกพร่องบางอย่างเหล่านี้ได้ ใครเคยมีการเปิดเผยที่คล้ายกันหรือฉันแค่จับฟางที่นี่? บางจุดนำออกไป แนวความคิดปัจจุบันของฉันคือความปลอดภัยประเภทนั้นมีประโยชน์มากกว่าการใช้งาน printf ปัญหาที่แท้จริงคือสตริงรูปแบบและการใช้ฟังก์ชัน Variadic ที่ไม่ปลอดภัยต่อประเภท บางทีฉันอาจจะไม่ได้ใช้<<และตัวแปรสตรีมเอาต์พุต stl แต่แน่นอนฉันจะใช้กลไกการพิมพ์ที่ปลอดภัยซึ่งคล้ายกันมาก การติดตาม / การบันทึกจำนวนมากมีเงื่อนไข แต่ฉันต้องการเรียกใช้รหัสเพื่อไม่ให้พลาดข้อบกพร่องในการทดสอบเพียงเพราะมันเป็นสาขาที่ไม่ค่อยได้ใช้
9 c++ 

3
โดยทั่วไปแล้วเราควรพัฒนาห้องสมุดลูกค้าสำหรับบริการ REST เพื่อช่วยป้องกันการแตกของ API หรือไม่
เรามีโครงการที่รหัส UI จะได้รับการพัฒนาโดยทีมเดียวกัน แต่ในภาษาอื่น (Python / Django) จากชั้นบริการ (REST / Java) รหัสสำหรับแต่ละชั้นออกจากที่เก็บรหัสที่แตกต่างกันและสามารถติดตามรอบการเปิดตัวที่แตกต่างกัน ฉันพยายามหากระบวนการที่จะป้องกัน / ลดการเปลี่ยนแปลงในเลเยอร์บริการจากมุมมองของเลเยอร์ UI ฉันคิดว่าจะเขียนการทดสอบการรวมที่ระดับเลเยอร์ UI ที่เราจะเรียกใช้เมื่อใดก็ตามที่เราสร้าง UI หรือเลเยอร์บริการ (เรากำลังใช้ Jenkins เป็นเครื่องมือ CI ของเราในการสร้างรหัสซึ่งอยู่ใน repos Git สอง) และถ้า มีความล้มเหลวดังนั้นบางสิ่งในเลเยอร์บริการแตกและการยอมรับไม่ยอมรับ มันจะเป็นความคิดที่ดี (มันเป็นวิธีปฏิบัติที่ดีที่สุดหรือไม่) เพื่อให้ผู้พัฒนาเลเยอร์บริการสร้างและบำรุงรักษาไลบรารีไคลเอ็นต์สำหรับบริการ REST ที่มีอยู่ในเลเยอร์ UI ที่พวกเขาจะอัปเดตเมื่อใดก็ตามที่มีการเปลี่ยนแปลง Service API ของพวกเขา น่าจะเป็นไปได้ว่าเราจะได้ประโยชน์จาก API ที่พิมพ์แบบคงที่ซึ่งรหัส UI นั้นสร้างขึ้นมา หาก API ของไลบรารีไคลเอ็นต์เปลี่ยนแปลงรหัส UI …
9 rest  django 

3
เหตุผลใดที่จะไม่ใช้ระบบควบคุมหลายเวอร์ชัน?
ฉันกำลังทำงานในโครงการที่ใช้ GIT เป็นระบบควบคุมเวอร์ชันหลักสำหรับ trunk, สาขาอย่างเป็นทางการและสาขาย่อย / โครงการที่ไม่เป็นทางการส่วนใหญ่ ดังนั้นฉันต้องการทำให้สาขาของตัวเองใช้ GIT เพื่อให้ชุมชนที่เหลือสามารถเข้าถึงสาขาของฉันโดยใช้ระบบที่พวกเขารู้ อย่างไรก็ตามฉันกำลังทำงานในส่วนหนึ่งของโครงการที่ทับซ้อนทั้งสาขาอย่างเป็นทางการและไม่เป็นทางการพร้อมกับแพทช์บางอย่างที่จะไม่เข้าลำตัว - เช่นนี้ฉันต้องแยกแพทช์ของฉันออกเพื่อให้สามารถใช้งานได้ทั้งหมด กิ่งไม้และแพทช์เลือกของฉันที่จะนำไปใช้ในลำตัว สิ่งนี้โน้มเอียงไปสู่การใช้คิวปรอทตามธรรมชาติ มีเหตุผลใดบ้างที่ฉันไม่สามารถใช้ Mercurial สำหรับพื้นที่เก็บข้อมูลในพื้นที่ของฉันเอง แต่ผลักดันทั้งหมดไปที่ที่เก็บโฮสต์ GIT และ Mercurial หรือมีเหตุผลที่ดีที่จะไม่ทำฉันแน่ใจว่าเป็นไปได้

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