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

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

8
เป็นเรื่องปกติหรือไม่ที่จะใช้คลาสบางส่วนเพื่อให้ได้ 'แบบแยกส่วนย่อย'?
ฉันเพิ่งพบสถานการณ์ใน codebase ของเราที่ทีมอื่นสร้าง 'god class' ที่มีประมาณ 800 วิธีแบ่งเป็น 135 ไฟล์เป็นคลาสบางส่วน ฉันถามทีมอื่นเกี่ยวกับเรื่องนี้ ในขณะที่ปฏิกิริยาทางเดินอาหารของฉันคือการทำให้มันออกมาจากวงโคจรพวกเขายืนยันว่ามันเป็นการออกแบบที่ดีการใช้งานทั่วไปและมันส่งเสริม 'modularity' และ 'ความง่ายในการใช้งาน' เพราะนักพัฒนาใหม่สามารถใส่กลอนในการทำงานได้ ของระบบ นี่เป็นเรื่องธรรมดาหรือเป็นความคิดที่ดีหรือไม่? ฉันอยากจะทำตามขั้นตอนทันทีเพื่อทำให้สัตว์ร้ายนี้ (หรืออย่างน้อยก็ป้องกันไม่ให้มันเติบโตต่อไป) แต่ฉันก็เต็มใจที่จะเชื่อว่าฉันผิด
24 c#  .net 

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

4
BDD เขียนได้จริง ๆ โดยผู้ที่ไม่ใช่โปรแกรมเมอร์หรือไม่?
การพัฒนาพฤติกรรมที่ขับเคลื่อนด้วยสัญลักษณ์ของสถานการณ์“ ที่ได้รับเมื่อนั้น” ได้รับการเน้นย้ำอย่างมากสำหรับการใช้ที่เป็นไปได้ในฐานะวัตถุขอบเขตสำหรับการประเมินการทำงานของซอฟต์แวร์ ฉันยอมรับอย่างแน่นอนว่าGherkinหรือสคริปต์การกำหนดคุณสมบัติที่คุณต้องการเป็นDSL ที่สามารถอ่านได้ทางธุรกิจและมอบคุณค่าเช่นนี้แล้ว อย่างไรก็ตามฉันไม่เห็นด้วยที่จะไม่สามารถเขียนโปรแกรมได้ (เช่นMartin Fowler ) ใครบ้างมีบัญชีของสถานการณ์ที่เขียนโดยไม่ใช่โปรแกรมเมอร์แล้ว instrumented โดยนักพัฒนา หากมีความเห็นพ้องต้องกันเกี่ยวกับการขาดความสามารถในการเขียนคุณจะเห็นปัญหากับเครื่องมือที่แทนที่จะเริ่มต้นด้วยสถานการณ์และการใช้เครื่องมือพวกเขาจะสร้างสถานการณ์ที่สามารถอ่านได้ทางธุรกิจจากการทดสอบจริงหรือไม่ อัปเดต:เกี่ยวกับเครื่องมือ“ ตัวสร้างสถานการณ์จำลอง” แน่นอนว่ามันจะไม่เดาภาษาธุรกิจอย่างน่าอัศจรรย์;) แต่เหมือนกับที่เราใช้ regexp matchers ในการสร้างแบบทดสอบจากบนลงล่าง (ในมิติที่เป็นนามธรรม) เราสามารถใช้ ผู้สร้างสตริงเพื่อสร้างสถานการณ์ในแนวทางจากล่างขึ้นบน ตัวอย่าง“ เพื่อให้ความคิดเท่านั้น”: Given I am on page ${test.currentPage.name} And I click on element ${test.currentAction.element} …

10
วิธีเพิ่มนักพัฒนาใหม่ให้กับทีม
ฉันเป็น บริษัท เล็ก ๆ ที่ประกอบไปด้วยนักพัฒนาเพียง 2 คน เรากำลังสร้างแอปพลิเคชันขนาดใหญ่มากสำหรับลูกค้าของเรา การพัฒนาในโครงการนี้ดำเนินต่อไปเป็นเวลา 1.5 ปี ตอนนี้ลูกค้ารายนี้มีหลักประกันสปอนเซอร์ที่สำคัญและพวกเขากำลังจัดกิจกรรมที่เกี่ยวข้องกับโครงการนี้ ดังนั้นตอนนี้เรามีกำหนดส่งภายใน 2 เดือนและเราไม่ควรพลาด เรากำลังคิดที่จะเพิ่มนักพัฒนาใหม่ให้กับทีมและฉันสงสัยว่าเราสามารถทำอะไรได้บ้างเพื่อช่วยให้เขาทำงานร่วมกัน นี่คือสถานการณ์: เรากำลังเข้าใกล้เกณฑ์ของกฎหมายของ Brooks - จุดที่เพิ่มนักพัฒนาใหม่จะเป็นการต่อต้าน แอปพลิเคชันค่อนข้างออกแบบมาอย่างดี แต่การใช้งานนั้นไม่เป็นระเบียบในบางจุด (โดยเฉพาะโค้ดที่เก่ากว่า) มีการทดสอบหน่วยสำหรับรหัสล่าสุดเท่านั้น เมื่อโครงการนี้เริ่มต้นเราไม่ได้ทำการทดสอบเป็นประจำ เอกสารและความคิดเห็นไม่สมบูรณ์ แอปพลิเคชั่นมีทั้งขนาดใหญ่และซับซ้อน ลูกค้าเขียนรายละเอียดเกี่ยวกับโครงการของเขาเกือบทุกอย่างอย่างชัดเจนและ "เป็นมิตรกับโปรแกรมเมอร์" เป็นความคิดที่ดีที่จะเพิ่มคนตอนนี้หรือไม่? ถ้าเป็นเช่นนั้นเราจะทำอะไรได้บ้างเพื่อช่วยให้นักพัฒนาใหม่รวมเข้ากับทีม? แก้ไข: สปอนเซอร์กำลังจัดการแข่งขันกีฬาทางอินเทอร์เน็ตสำหรับฤดูใบไม้ผลิหน้า มันจะต้องเริ่มในวันที่เฉพาะเจาะจงของปี เราไม่สามารถเปลี่ยนได้ สิ่งที่นักพัฒนาของเรา (ฉันเป็นหนึ่งในสองคน) ต้องทำคือ: กรอกใบสมัครที่มีอยู่ให้เสร็จ (ประมาณ 25% ของงานที่ต้องทำ) การสร้างโมดูลใหม่ที่จำเป็นสำหรับองค์กรของเหตุการณ์นี้ (ประมาณ 75% ของงานที่ต้องทำ) โมดูลใหม่นี้ไม่สามารถพัฒนาโดยไม่เข้าใจ API ของโปรแกรมหลัก …

6
ทำความเข้าใจกับปัญหาเมื่อสิ่งต่าง ๆ ในการผลิต
สถานการณ์: คุณผลักดันการผลิต แรงผลักดันแตกหลายอย่าง งานสร้างเดียวกันนั้นไม่ได้ทำลาย qa หรือ dev ในฐานะนักพัฒนาคุณไม่มีสิทธิ์เข้าถึงแยง มีแรงกดดันมากมายจากด้านบนเพื่อให้สิ่งต่าง ๆ เป็นไปอย่างวุ่นวาย ข้อมูลจำเพาะ: แอปพลิเคชั่น PHP / MVC ที่ใช้ API ใน Zend ปรับใช้กับเซิร์ฟเวอร์ไม่กี่แห่ง คำถามของฉัน: ในขณะที่ตรวจสอบสมมติว่าฉันมีลางสังหรณ์ว่ามีบางอย่างผิดปกติ แต่ฉันไม่รู้แน่ และแน่นอนฉันไม่สามารถทดสอบสิ่งต่าง ๆ ในการผลิตได้ หากฉันมีวิธีแก้ไขที่แนะนำตามลางสังหรณ์นั้นจะเป็นการดีถ้าลองใช้และดูว่ามันใช้งานได้หรือไม่ก่อนที่จะเข้าใจว่าปัญหาคืออะไร
24 bug  production 

6
อะไรคือข้อโต้แย้งต่อต้านการแยกทางคธูลู?
ฉันได้รับมอบหมายงานให้ใช้ภาษาเฉพาะโดเมนสำหรับเครื่องมือที่อาจมีความสำคัญต่อ บริษัท ภาษาที่เรียบง่าย แต่ไม่น่ารำคาญแล้วมันช่วยให้ลูปซ้อนกันสตริง ฯลฯ และมันเป็นจริงให้แน่ใจว่าโครงสร้างอื่น ๆ จะถูกเพิ่มเป็นความก้าวหน้าโครงการ ฉันรู้โดยประสบการณ์ว่าการเขียน lexer / parser ด้วยมือ - ยกเว้นว่าไวยากรณ์เป็นเรื่องเล็กน้อย - เป็นกระบวนการที่ใช้เวลานานและเกิดข้อผิดพลาดได้ง่าย ดังนั้นฉันจึงเหลือสองตัวเลือก: ตัวแยกวิเคราะห์เครื่องปั่นà la yacc หรือห้องสมุด combinator เช่น Parsec อดีตก็ดีเช่นกัน แต่ฉันเลือกอย่างหลังด้วยเหตุผลต่าง ๆ และนำโซลูชันมาใช้ในภาษาที่ใช้งานได้ ผลลัพธ์ที่ได้นั้นค่อนข้างน่าประทับใจต่อสายตาของฉันรหัสนั้นสั้นกระชับหรูหราและอ่านง่าย / คล่องแคล่ว ฉันยอมรับว่ามันอาจดูแปลก ๆ ถ้าคุณไม่เคยตั้งโปรแกรมในสิ่งอื่นนอกจาก java / c # แต่สิ่งนี้จะเป็นจริงกับสิ่งที่ไม่ได้เขียนใน java / c # ถึงจุดหนึ่งฉันถูกเพื่อนร่วมงานจู่โจมอย่างแท้จริง หลังจากเหลียวดูหน้าจอของฉันอย่างรวดเร็วเขาก็ประกาศว่ารหัสนั้นไม่สามารถเข้าใจได้และฉันไม่ควรบูรณาการแยกวิเคราะห์ แต่ใช้ stack และ String.Split …

9
การเพิ่มความซับซ้อนในการลบรหัสที่ซ้ำกัน
ฉันมีหลายคลาสที่สืบทอดมาจากคลาสพื้นฐานทั่วไป Tชั้นฐานมีการเก็บรวบรวมวัตถุหลายของชนิด แต่ละคลาสเด็กต้องสามารถคำนวณค่าที่สอดแทรกจากการรวบรวมวัตถุ แต่เนื่องจากคลาสย่อยใช้ชนิดที่แตกต่างกันการคำนวณจึงแตกต่างกันเล็กน้อยจากคลาสหนึ่งไปอีกชั้น จนถึงตอนนี้ฉันได้คัดลอก / วางรหัสของฉันจากชั้นหนึ่งไปอีกชั้นหนึ่งและทำการแก้ไขเล็กน้อยกับแต่ละรายการ แต่ตอนนี้ฉันกำลังพยายามลบรหัสที่ซ้ำกันและแทนที่ด้วยวิธีการแก้ไขทั่วไปในคลาสพื้นฐานของฉัน อย่างไรก็ตามนั่นเป็นการพิสูจน์ว่าเป็นเรื่องยากมากและวิธีแก้ปัญหาทั้งหมดที่ฉันคิดว่าดูเหมือนซับซ้อนเกินไป ฉันเริ่มคิดว่าหลักการ DRY ไม่ได้นำไปใช้มากในสถานการณ์แบบนี้ แต่ฟังดูเหมือนเป็นการดูหมิ่น ความซับซ้อนเท่าไหร่เมื่อพยายามลบการทำสำเนารหัสมากเกินไป? แก้ไข: ทางออกที่ดีที่สุดที่ฉันสามารถทำได้คือ: ชั้นฐาน: protected T GetInterpolated(int frame) { var index = SortedFrames.BinarySearch(frame); if (index >= 0) return Data[index]; index = ~index; if (index == 0) return Data[index]; if (index >= Data.Count) return Data[Data.Count - 1]; return …

7
สร้าง / พบกำหนดเวลาเมื่อฉันทำงานกับแพลตฟอร์มและกรอบงานที่ไม่คุ้นเคยอยู่ตลอดเวลา [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการ4 ปีที่แล้ว ฉันทำงานให้กับองค์กรพัฒนาผลิตภัณฑ์ที่อยู่ในการโฆษณาออนไลน์ งานที่ฉันได้รับนั้นมักจะอยู่บนแพลตฟอร์มหรือเครื่องมือที่ฉันไม่เคยทำมาก่อน ตอนแรกมันเป็น Android จากนั้น node.js จากนั้นโทรศัพท์ windows จากนั้นบรรจุภัณฑ์ debian จากนั้น python, hadoop, ganglia วิศวกรรมย้อนกลับ geo PostgreSQL และรายการจะดำเนินต่อไป ฉันมีความสุขที่ได้เรียนรู้มากในขณะที่ทำงาน ปัญหาที่ฉันยังคงดำเนินต่อไปคือการประชุมกำหนดเวลา บ่อยครั้งที่มันไม่ชัดเจนว่าต้องทำอะไรเพื่อให้งานสำเร็จ ฉันจะต้องตั้งค่า SDK ที่เกี่ยวข้องเรียกใช้ประเด็นปัญหาภายในอินเทอร์เน็ตอ่านแบบออนไลน์ตรวจสอบเอกสารการวิจัยออนไลน์สำหรับงานทุกรายการในแพลตฟอร์มนั้น บางครั้งฉันได้รับกำหนดเวลาบางครั้งฉันสร้างกำหนดเวลาเหล่านั้น ฉันพบว่ามันยากมากที่จะทำตามกำหนดเวลาได้หลายครั้ง หนึ่งจะกลายเป็นเร็วกว่าในการทำสิ่งที่สองรอบ แต่ฉันไม่เคยทำงานกับภาษาหรือกรอบงานนานกว่าหนึ่งหรือสอง และนี่คือความเครียดและความเจ็บปวดที่จะจัดการกับ ฉันได้รับสะเก็ดระเบิดและความอับอายของประชาชนที่มาพร้อมกับกำหนดส่งที่หายไป ฉันสงสัยว่าสิ่งนี้ไม่ปกติ เป็นไปไม่ได้ที่จะส่งมอบแอพมือถือ windows 7 แอปโดยไม่รู้เรื่อง c # ในหนึ่งสัปดาห์ แต่ฉันจัดการเพื่อทำมันหนึ่งวันหลังจากกำหนด …

3
มันสมเหตุสมผลหรือไม่ที่จะสร้างแอปพลิเคชั่น (ไม่ใช่เกม) โดยใช้สถาปัตยกรรมส่วนประกอบ - เอนทิตี้ของระบบ?
ฉันรู้ว่าเมื่อสร้างแอปพลิเคชั่น (ดั้งเดิมหรือเว็บ) เช่นใน Apple AppStore หรือ Google Play app store นั้นเป็นเรื่องธรรมดามากที่จะใช้สถาปัตยกรรม Model-View-Controller อย่างไรก็ตามมันมีเหตุผลที่จะสร้างแอพพลิเคชั่นที่ใช้สถาปัตยกรรม Component-Entity-System ทั่วไปในเอ็นจิ้นเกมหรือไม่?

3
Datetime vs Timestamp ใน MySQL และ PHP ในทางปฏิบัติ
ฉันไม่แน่ใจว่าจะระบุประเภทข้อมูลของฉันเป็น datetime หรือ timestamp ฉันคิดว่าฉันจะต้องการทั้งสองอย่าง แต่ในเหตุการณ์ที่แตกต่างกัน เว็บไซต์ของฉันขายสินค้าและบริการทั่วโลกและยังมีระบบบัญชีสำหรับผู้ใช้เพื่อเข้าสู่ระบบ กรุณาชี้แจงต่อไปนี้: วันที่และเวลาปัจจุบันที่ลูกค้าซื้อผลิตภัณฑ์จากเว็บไซต์ของฉัน: วันที่และเวลา วันที่และเวลาจัดส่งตามสถานที่และวันที่ / เวลาที่จัดซื้อคำนวณจากระบบของเรา: วันที่และเวลา ครั้งล่าสุดที่พวกเขาลงชื่อเข้าใช้บัญชี: Timestamp? รหัสใน php เพื่อจัดเก็บวันที่ซื้อ (วันที่ปัจจุบัน) จากนั้นเก็บไว้ในฐานข้อมูลคืออะไร? โปรดอธิบายวิธีใช้แต่ละอย่างให้ละเอียดหลังจากอ่านคำอธิบายมากมายบนอินเทอร์เน็ตฉันยังไม่เข้าใจเลย
24 php  mysql 

3
การพัฒนาโดเมนขับเคลื่อนในแง่การปฏิบัติคืออะไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันได้ยินเกี่ยวกับ Domain Driven Development จากผู้พัฒนาในพื้นที่ เขาพูดถึงมันเหมือนเป็นเรื่องเกี่ยวกับกระสุนเงินกับความต้องการที่เปลี่ยนแปลง ผมอ่านวิกิพีเดีย ยังไม่ชัดเจนเกินไป "3D" ในแง่การปฏิบัติคืออะไร? น่าทึ่งจริง ๆ ที่ตอนนี้การสร้างไดอะแกรมคลาส UML ล้าสมัยไปแล้วหรือ

5
แนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบฐานข้อมูลใหม่
ฉันตระหนักถึงแนวปฏิบัติที่ดีที่สุดทั่วไปบางอย่างเมื่อออกแบบฐานข้อมูลสำหรับแอปพลิเคชัน แต่สิ่งที่เกี่ยวกับการออกแบบใหม่? ฉันอยู่ในทีมที่มอบหมายการออกแบบแอปพลิเคชันธุรกิจภายในใหม่ถึงแม้ว่าฉันจะพูดว่า "ภายใน" แต่ฉันก็ยังโชคร้ายที่มีคนจำนวนมากที่ไม่ได้ติดต่อกับผู้ใช้จริงของระบบ โปรแกรมปัจจุบันอยู่ใน Oracle Forms ซึ่งกระจายอยู่ในตารางที่ไม่ได้ถูกทำให้เป็นมาตรฐานซึ่งบางครั้งมีตารางที่ใกล้เคียงกันหลายชุดซึ่งมีข้อมูลที่แตกต่างกันเล็กน้อย ข้อ จำกัด มักจะอยู่ในรูปแบบของขั้นตอนการจัดเก็บที่มีการบังคับใช้ไม่ดี แม้แต่ประเภทก็ดูเหมือนจะไม่ถูกจัดเก็บไว้อย่างถูกต้อง ฉันพบข้อมูลที่ไม่ดีทุกประเภทที่ Oracle ดูเหมือนว่าจะเพิกเฉย แต่ได้ให้ตัวช่วยสร้างการนำเข้าและส่งออกของ SQL Server (และถูกต้องแล้ว) (ตัวอย่างเช่นจำนวนเต็มสองหลักไม่ได้เป็นการ datetime ที่สมบูรณ์!) โปรแกรมดั้งเดิมอาจย้อนกลับไปเมื่อยี่สิบปีที่แล้วและนักพัฒนาดั้งเดิมทั้งหมดได้เลิกใช้งานไปนานแล้วแม้แต่ผู้สูงอายุที่นี่ก็ยังไม่รู้เลยว่าพวกเขาเป็นใคร ด้วยเหตุนี้จึงไม่มีข้อกำหนดที่ชัดเจนใด ๆ ที่จะต้องกำจัด - เราเพียง แต่ควรทำซ้ำฟังก์ชันการทำงานของแอปพลิเคชันที่มีอยู่และเก็บข้อมูลที่มีอยู่ ผลลัพธ์สุดท้ายของการเขียนซ้ำจะเป็นเวอร์ชั่นที่ทำงานบนเว็บที่ทำงานบน ASP.NET พร้อมกับ MS SQL Server สำหรับด้านหลัง เพื่อนร่วมทีมนักพัฒนาซอฟต์แวร์อีกสองคนของฉันอายุมากกว่าฉันมากทั้งสองมีภูมิหลังทางธุรกิจ / MIS ในขณะที่ฉันเป็น CS ประสบการณ์ของสมาชิกอาวุโสนั้นเกือบจะเป็นรูปแบบของออราเคิลเท่านั้นและสมาชิกคนอื่น ๆ ส่วนใหญ่ได้ทำแอปพลิเคชันทางธุรกิจใน Visual Basic แม้ว่าพื้นหลังฐานข้อมูลของฉันจะถูก จำกัด ให้ออกแบบฐานข้อมูลใหม่สำหรับโครงการใน …

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

9
C ++ สำหรับนักพัฒนา C #
ฉันรู้ว่า C # ค่อนข้างดี (เรียนรู้ด้วยตนเองเศร้า) และจำเป็นต้องเขียนโปรแกรม C ++ บางอย่างสำหรับแอปพลิเคชัน Windows ฉันสามารถค้นหาข้อมูลมากมายสำหรับนักพัฒนา C ++ ที่เรียนรู้ C # แต่ไม่สามารถเรียนรู้ C ++ ได้มากนักเมื่อคุณรู้จัก C # แล้ว มีใครบ้างที่รู้พื้นฐานที่ดีบ้างไหม? MSDN มีการเปรียบเทียบแต่ไม่ลึกมาก ฉันสามารถแยกแหล่งที่มาหลายแห่งด้วยกัน แต่คิดว่ามีบางอย่างอยู่ข้างนอก - ฉันแค่หามันไม่เจอ ขอบคุณสำหรับความช่วยเหลือของคุณ.
24 c#  c++ 

13
กลายเป็นดีกว่า Bug-ผู้ให้บริการ
ฉันรักการเป็นโปรแกรมเมอร์ ที่นั่นฉันพูดมัน อย่างไรก็ตามด้วยที่กล่าวว่าฉันได้ตระหนักว่าเมื่อเร็ว ๆ นี้ว่าฉันไม่สามารถยืนแก้ไขข้อผิดพลาด เลย ในความเป็นจริงในขณะที่ฉันกำลังพัฒนาบางสิ่งบางอย่างผลผลิตของฉันสูงมาก แม้ว่าการเขียนการทดสอบหน่วยและทำการทดสอบด้วยตนเองของการพัฒนาของฉันฉันมักจะมีประสิทธิผลจริงๆ ฉันสามารถโฟกัสได้ดีและสามารถทำงานให้เสร็จได้ อย่างไรก็ตามเมื่อเวลา QA มาถึงและฉันกำลังทำงานเพื่อแก้ไขข้อบกพร่องแรงบันดาลใจของฉันใช้จิกหัวอย่างมาก ฉันต้องบังคับตัวเองด้วยมาตรการที่รุนแรง (คุณรู้ว่าเพลง BPM สูงคาเฟอีนในปริมาณที่มากเกินไป ฯลฯ ) เพื่อทำสิ่งใดให้เสร็จ งานของฉันมักจะเกี่ยวข้องกับการก้าวเข้าสู่โครงการขนาดใหญ่ที่มีอยู่และเพิ่มคุณสมบัติใหม่หรือแก้ไขข้อบกพร่องดังนั้นฉันจึงไม่สามารถบอกนายจ้างของฉันว่าฉันต้องการสองสามสัปดาห์ในการเขียนการทดสอบหน่วยสำหรับรหัสทั้งหมดของพวกเขา :) นอกจากนี้ เทคโนโลยีเซิร์ฟเวอร์ที่เรามักใช้นั้นเป็นสิ่งที่ห้ามไม่ให้ทดสอบและรวมเข้าด้วยกันเนื่องจากมีปัญหาเกี่ยวกับตัวโหลดคลาส Java เล็กน้อย ฉันไม่ได้ต่อต้านการแก้ไขบั๊กอย่างสมบูรณ์บางครั้งมันก็สนุก แต่ก็ไม่สนุกเลย เมื่อคุณต้องทำการเปลี่ยนแปลงเล็กน้อยและรอ 30 วินาทีถึง 3 นาทีเพื่อให้สามารถดูว่าพวกเขาทำงานหรือไม่ (เนื่องจากวิธีการทำงานของระบบ) ฉันจะปรับปรุงประสิทธิภาพและแรงจูงใจในการแก้ไขข้อผิดพลาดได้อย่างไร เป็นสิ่งที่โปรแกรมเมอร์ส่วนใหญ่จัดการกับนี้หรือไม่?

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