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

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

3
มีการประยุกต์ใช้มาตรการความซับซ้อนของ Halstead ในการพิจารณาคุณภาพซอฟต์แวร์หรือไม่
ในปี 1977 Maurice Howard Halstead ได้แนะนำมาตรการความซับซ้อนของระบบซอฟต์แวร์ซึ่งรวมถึงการวัดคำศัพท์ของโปรแกรมความยาวของโปรแกรมปริมาตรความยากความพยายามและจำนวนข้อผิดพลาดโดยประมาณในโมดูล ตามวิกิพีเดียความยากลำบากเกี่ยวข้องกับความยากลำบากในการทำความเข้าใจโปรแกรมเมื่ออ่านหรือเขียนและความพยายามสามารถแปลเป็นเวลาที่ใช้ในการเขียนโปรแกรมประยุกต์ที่เวลา = (ความพยายาม / 18) วินาที การวัดไม่มีประโยชน์เว้นแต่ว่าข้อมูลและการคำนวณจะเกี่ยวข้องกับการพัฒนาซอฟต์แวร์ อย่างไรก็ตามฉันไม่พบงานใด ๆ ที่ระบุว่าความยากลำบากของค่าบางค่าหรือสูงกว่ามีแนวโน้มเพิ่มขึ้นอย่างมีนัยสำคัญทางสถิติในข้อบกพร่องหรือความสัมพันธ์ระหว่างความยากลำบากและเวลาในการอ่านรหัส (ความยากลำบากของ N การทำความเข้าใจฐานรหัส) หรือการวิเคราะห์ใด ๆ ที่สามารถคำนวณเวลาหลังจากข้อเท็จจริงที่เป็นประโยชน์ในการกำหนดคุณภาพ (โดยเฉพาะตั้งแต่เวลาที่จะเขียนควรได้รับการบันทึกเป็นการวัดแล้ว) ฉันสนใจโดยเฉพาะอย่างยิ่งในการประเมินข้อผิดพลาดของ Halstead (ซึ่งไม่ได้กล่าวถึงใน Wikipedia) - จำนวนข้อบกพร่องในแอปพลิเคชันสามารถประมาณได้โดย Volume / 3000 หรือ Effort ^ (2/3) / 3000 ฉันกำลังมองหาสองสิ่ง: มีใครบ้างที่ใช้มาตรการความซับซ้อนของซอฟต์แวร์ของ Halstead ในแอปพลิเคชันที่ใช้งานจริงเพื่อประเมินคุณภาพซอฟต์แวร์ ถ้าเป็นเช่นนั้นคุณใช้พวกเขาอย่างไรและพวกเขากลายเป็นการวัดที่มีประโยชน์ถูกต้องและ / หรือเชื่อถือได้หรือไม่ มีงานวิจัยเชิงวิชาการในรูปแบบของการสำรวจวิเคราะห์หรือกรณีศึกษาที่กล่าวถึงความถูกต้อง (หรือความไม่ถูกต้อง) ของมาตรการความซับซ้อนของ Halstead เมื่อนำไปใช้กับคุณภาพของซอฟต์แวร์หรือไม่ …

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

2
สุดยอดโอเพ่นซอร์ส ASP.NET MVC โครงการอีคอมเมิร์ซ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันต้องทำให้ไซต์อีคอมเมิร์ซทำงานได้ แต่ฉันไม่ต้องการตั้งโปรแกรมจากล่างขึ้นบนหากไม่จำเป็น ฉันต้องการโปรแกรมโดยใช้ ASP.NET MVC ฉันกำลังมองหาทางเลือกโอเพนซอร์ซที่ดี (หรืออีกอันสำหรับการซื้อหากเป็นแบบแยกส่วน) ที่ฉันสามารถใช้เป็นฐานและปรับปรุงด้วยฟังก์ชั่นที่จำเป็น? มันต้องมีฟังก์ชั่นอีคอมเมิร์ซ "ปกติ" ทั้งหมดและยังมีความเป็นไปได้ที่จะรวมกับ API บัตรเครดิตที่ฉันเลือก หากใครมีคำแนะนำสำหรับฉันที่นี่ฉันจะขอบคุณมัน :)

5
ภาษาการผลิตที่เข้ากันได้และใช้กันอย่างแพร่หลายที่สุดในการส่งออกความรู้และทักษะที่ได้จาก Haskell คืออะไร?
ฉันชอบ Haskell ธรรมดาและเรียบง่าย แม้ว่า Haskell จะใช้ในซอฟต์แวร์การผลิต แต่ก็ไม่ได้ปรับใช้อย่างกว้างขวางจากสิ่งที่ฉันเคยเห็น อะไรคือภาษาที่คล้ายกันมากที่สุดและยังใช้กันอย่างแพร่หลายเกี่ยวกับโครงการผลิตเพื่อที่ฉันจะได้มีโอกาสสโนว์บอลในการใช้สิ่งที่ยอดเยี่ยมเหมือนกันในอุตสาหกรรม? ภาษาเดียวกันจากส่วนแรกมีให้บนแพลตฟอร์มจำนวนมากหรือไม่ ถ้าไม่เป็นทางเลือกที่ดีที่สุดที่มีการปรับใช้แพลตฟอร์มกว้างอะไร ฉันต้องการภาษาเดียวที่จะใส่ในรายการที่ต้องทำของฉันมากกว่าฝูงใหญ่หรือครอบครัว หลักฐานที่ยากจะเป็นข้อดี

8
ประสบการณ์การทำงานแทนการศึกษา? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ผมอยากจะตั้งชื่อหัวข้อว่า "ประสบการณ์กับการศึกษา" แต่หัวข้อที่มีอยู่แล้ว ฉันได้อ่านการสนทนานั้นแล้วและแม้ว่าสิ่งที่ฉันต้องการจะถามเกี่ยวข้องกับหัวข้อนั้น ฉันเริ่มเรียนรู้การเขียนโปรแกรมประมาณ 12 ปีที่แล้ว ในช่วง 4 ปีที่ผ่านมาฉันทำงานเป็นผู้พัฒนาซอฟแวร์เอาท์ซอร์ส (อยู่ที่รัสเซีย) ฉันกำลังคิดที่จะออกจากรัสเซียและย้ายไปที่อื่นอย่างเช่นออสเตรเลีย (ไม่สำคัญอะไร) ฉันมีตัวอย่างมากมายที่แสดงให้เห็นถึงความสามารถทั่วไปและเรื่องราวความสำเร็จ แต่ก็ยังมีความแตกต่างระหว่างคนเหล่านี้ทั้งหมดกับกรณีของฉัน ฉันมีประสบการณ์ด้านเทคนิคค่อนข้างดี - สาขาหลักคือ C ++ และ. NET ฉันได้เข้าร่วมในโครงการ 7 โครงการตามเทคโนโลยี / แพลตฟอร์มที่แตกต่างกัน (Windows, Linux, Android, Qt, .NET, ฯลฯ ) ดังนั้นฉันเชื่อว่าฉันสามารถทำงานเป็นนักพัฒนาซอฟต์แวร์ได้ มาดูกันดีกว่า - "จากมุมมองทางเทคนิคผู้ชายคนนี้ก็โอเคอย่างแน่นอน" ปัญหาเดียวคือฉันไม่มีการศึกษา …

8
คอมไพเลอร์ถูกใช้นอกการพัฒนาหรือไม่?
เท่าที่ความเข้าใจของฉันไปแล้วคอมไพเลอร์มีความหมายสำหรับนักพัฒนาในการรวบรวมรหัสของพวกเขาลงในไฟล์ปฏิบัติการ (รหัสเครื่อง) คอมไพเลอร์จะไม่ขยายไปยังเครื่องของลูกค้าหรือระบบผู้ใช้ปลายทาง นักพัฒนาซอฟต์แวร์เพียงแค่ใช้คอมไพเลอร์เพื่อแปลงรหัสของพวกเขาเป็นรหัสเครื่องซึ่งจะถูกส่งไปยังเครื่องอื่นเพื่อใช้เป็นแอพพลิเคชั่น คอมไพเลอร์มีฟังก์ชั่นนอกกระบวนการนี้หรือไม่? ถ้าเป็นเช่นนั้นพวกเขาจะใช้เมื่อไหร่?
14 compiler 

5
ทำไม JavaScript ไม่ใช้สำหรับการพัฒนาแอพพลิเคชั่นแบบคลาสสิก (ซอฟต์แวร์ที่รวบรวม) [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ในช่วงหลายปีที่ผ่านการพัฒนาเว็บไซต์ด้วย JavaScript ฉันได้ข้อสรุปว่าเป็นภาษาที่ทรงพลังอย่างเหลือเชื่อและคุณสามารถทำสิ่งที่น่าอัศจรรย์ได้ มันมีชุดคุณสมบัติมากมายเช่น: การพิมพ์แบบไดนามิก ฟังก์ชั่นชั้นหนึ่ง ฟังก์ชั่นที่ซ้อนกัน ปิด ทำหน้าที่เป็นวิธีการ ทำหน้าที่เป็นตัวสร้างวัตถุ ต้นแบบตาม ตามวัตถุ (เกือบทุกอย่างเป็นวัตถุ) regex ตัวอักษร Array และ Object สำหรับฉันแล้วดูเหมือนว่าเกือบทุกอย่างสามารถทำได้ด้วยภาษาแบบนี้คุณยังสามารถเลียนแบบการเขียนโปรแกรม OO เนื่องจากมันให้อิสระที่ดีและรูปแบบการเข้ารหัสที่หลากหลาย ด้วยฟังก์ชั่นที่กำหนดเองที่เน้นซอฟต์แวร์มากขึ้น (I / O, FileSystem, อุปกรณ์อินพุต ฯลฯ ) ฉันคิดว่ามันจะยอดเยี่ยมในการพัฒนาแอปพลิเคชันด้วย แม้ว่าเท่าที่ฉันรู้จะใช้เฉพาะในการพัฒนาเว็บหรือในซอฟต์แวร์ที่มีอยู่เป็นภาษาสคริปต์เท่านั้น เมื่อไม่นานมานี้อาจต้องขอบคุณ V8 Engine ซึ่งถูกใช้มากขึ้นสำหรับงานประเภทอื่น ๆ (ดูตัวอย่าง node.js) ทำไมจนถึงตอนนี้จะได้รับการลดชั้นเพื่อการพัฒนาเว็บไซต์เท่านั้น? สิ่งที่ทำให้มันแตกต่างจากการพัฒนาซอฟต์แวร์?

3
เหตุใดครอบครัว c จึงเป็นมาตรฐานการศึกษา CS สำหรับโปรแกรมคณิตศาสตร์ / CS แทนที่จะเป็นตระกูล LISP [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันทำความคุ้นเคยกับ LISP เพื่อการพัฒนาตนเอง หนึ่งในสิ่งที่ฉันสังเกตเห็นคือเสียงกระเพื่อมมากขึ้นในกระบวนทัศน์ของคณิตศาสตร์กว่าพูด C. โครงสร้างไวยากรณ์และการออกแบบดูเหมือนจะสะท้อนโดยตรงแบบจำลองทางคณิตศาสตร์จริงของอัลกอริทึม ฉันไม่เข้าใจว่าทำไมแม้แต่โปรแกรม CS ที่ดีทางคณิตศาสตร์ก็ยังเรียน C แทน LISP ฉันคิดว่า LISP ใช้แนวคิดทางคณิตศาสตร์ที่สูงกว่า C โดยตรงฉันไม่ได้บอกว่าคุณไม่สามารถสร้างแบบจำลองโครงสร้างทางคณิตศาสตร์ใน C. ฉันแค่สังเกตเห็นว่า LISP ดูเหมือนจะยากสำหรับนักคณิตศาสตร์ ฉันได้อ่านคำด่าของ Joel Spolsky หลายคนในโรงเรียน JAVA และสิ่งที่ไม่ - และฉันเห็นด้วยกับการประเมินของเขา - แต่โรงเรียนของฉันไม่ได้สอน JAVA ด้วยเหตุผลอย่างนั้น พวกเขาเข้มงวดในการสอนแนวคิดพื้นฐานเช่นพอยน์เตอร์การออกแบบอัลกอริทึมการเรียกซ้ำและแม้แต่คำแนะนำการประกอบ อย่างไรก็ตามพวกเขาทำสิ่งนี้ทั้งหมดใน C และ c ++ ไม่มีใครรู้เหตุผลของเรื่องนี้และ / หรือประวัติของมัน?

6
คุณจะเรียนรู้กรอบมาตรฐาน / API / ฟังก์ชันของภาษาได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันเข้าใจวิธีโค้ด ฉันรู้วิธีการใช้ภาษาพื้นฐานที่ฉันใช้เป็นประจำ ฉันรู้วิธีการเขียนนิพจน์ปกติขั้นพื้นฐานเล็กน้อยฉันสามารถพูดคุยกับฐานข้อมูลฉันสามารถรับอินพุตพิมพ์ออกจัดการไฟล์และอื่น ๆ ฉันมั่นใจได้ว่าความสามารถขั้นพื้นฐานของฉันในการคายรหัสที่มาสำหรับ โปรแกรมที่ซับซ้อนปานกลาง ปัญหาของฉันคือฉันไม่เคยรู้สึกว่ามันเพียงพอ ฉันรู้สึกว่าฉันรู้แค่เพียงส่วนเล็ก ๆ ของห้องสมุดมาตรฐานของภาษาของฉันและจนกว่าฉันจะเข้าใจทุกอย่างอย่างน้อยก็ผ่านไปฉันไม่มีสิทธิ์แม้แต่จะพยายามใช้งานด้วยซ้ำ ฉันเพิ่งออกจากวิทยาลัย (ชุมชน / จูเนียร์ / whathaveyou) และเพื่อนของฉันกำลังหางานในอุตสาหกรรม แต่ฉันก็ยังรู้สึกว่าเป็นของปลอมหรือเป็นปัญหาที่ตอบยากและฉันก็ไม่ดีพอ มีเครื่องหมายที่ดีสำหรับ "ฉันรู้เพียงพอ" ที่ฉันสามารถใช้เพื่อรับรองตัวเองว่าฉันสามารถเขียนโค้ดได้หรือไม่? ฉันควรใช้ข้อเท็จจริงที่ว่าอย่างน้อยฉันสามารถเขียนรหัส FizzBuzz เป็นตัวบ่งชี้ว่าไม่เป็นไรที่จะนำไปใช้กับสิ่งต่าง ๆ ? ฉันจะเรียนรู้เพิ่มเติมเกี่ยวกับไลบรารีเฟรมเวิร์กและ / หรือ API มาตรฐานเหล่านี้ได้ง่ายกว่าได้อย่างไร ฉันเขียนโค้ดเป็นประจำฉันอ่านหนังสือ แต่ความรู้ของฉันก็ยังคงตื้นเขิน ช่วยด้วย!

5
การต่อสู้อีกครั้งของการประมาณเรื่องราว
ทุกวันหลังจากยืนหยัดทีมของฉันและฉันจะอัปเดตประมาณการของเราสำหรับแต่ละเรื่อง ฉันรู้สึกว่ามีบางอย่างผิดปกติกับวิธีที่เราทำดังนั้นฉันต้องการความช่วยเหลือจากคุณ นี่คือวิธีที่เรา: เรื่องราวโดยประมาณ: 24 ชั่วโมง (8 ชั่วโมงต่อวันเราใช้ "อุดมคติวัน" เป็นตัววัด) วันที่ N: ผู้พัฒนาเริ่มทำงานในเรื่อง A ในตอนเช้า (8 ชั่วโมงทำงานเสร็จในตอนท้ายของวัน) วันที่ N + 1: การเล่าเรื่องใหม่ = 16 ชั่วโมง (หนึ่งวันทำงานนำออกจาก Story A ตั้งแต่วันที่ N) วันที่ N + 2: การเล่าเรื่องใหม่ = 8 ชั่วโมง (วันทำงานหนึ่งเรื่องถูกนำออกจากเรื่อง A ตั้งแต่วันที่ N + 1) วันที่ N + 3: เรื่อง A …
14 scrum  estimation 

3
การนำอัลกอริธึมกระดาษมาใช้ใน C ++ หรือ MATLAB
ฉันเป็นปริญญาตรีวิศวกรรมไฟฟ้า ฉันได้อ่านเอกสารทางเทคนิคมากมายเกี่ยวกับอัลกอริธึมการประมวลผลสัญญาณและภาพ (การสร้างใหม่การแบ่งส่วนการกรอง ฯลฯ ) อัลกอริทึมส่วนใหญ่ที่แสดงในเอกสารเหล่านี้มีการกำหนดในช่วงเวลาต่อเนื่องและความถี่ต่อเนื่องและมักจะให้คำตอบในรูปของสมการที่ซับซ้อน คุณจะใช้กระดาษด้านเทคนิคตั้งแต่เริ่มต้นใน C ++ หรือ MATLAB เพื่อทำซ้ำผลลัพธ์ที่ได้ในกระดาษดังกล่าวอย่างไร โดยเฉพาะอย่างยิ่งฉันกำลังดูกระดาษ "อัลกอริทึมการฟื้นฟูลำแสงกรวยทั่วไป" โดย Wang et al ( IEEE Trans Med Imaging 1993; 12 (3): 486-96 ) และฉันสงสัยว่าฉันจะเริ่มอย่างไร ใช้อัลกอริทึมของพวกเขา สมการที่ 10 ให้สูตรของภาพที่สร้างขึ้นใหม่ที่ คุณจะเขียนโค้ดอย่างไร คุณจะมีการวนรอบสำหรับแต่ละ voxel และคำนวณสูตรที่สอดคล้องกันหรือไม่ คุณจะเขียนโค้ดฟังก์ชันของฟังก์ชันในสูตรนั้นได้อย่างไร คุณประเมินฟังก์ชั่น ณ จุดใด ๆ ฉันอ่านหนังสือ "การประมวลผลภาพดิจิทัล" โดย Gonzalez and Woods แต่ฉันยังคงเสีย ฉันได้อ่านเกี่ยวกับหนังสือชุดตัวเลขสูตรอาหารแล้ว …
14 c  algorithms  matlab 

6
เหตุใดห้องสมุดจำนวนมากจึงไม่มีเอกสารไม่ดี [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ในทำนองเดียวกันโครงการโอเพ่นซอร์สจะประสบความสำเร็จได้อย่างไรหากไม่มีเอกสารเกี่ยวกับการออกแบบหรือสถาปัตยกรรม? คำถามฉันอยากรู้อยากเห็น: ทำไมห้องสมุดจำนวนมากจึงขาดเอกสารคู่มือผู้ใช้? มุมมองของฉันคือ: ทุกคนส่วนใหญ่ยอมรับว่าการอ่านซอร์สโค้ดนั้นยากกว่าการเขียนซอร์สโค้ด หากไม่มีเอกสารเราจะต้องอ่านซอร์สโค้ดของไลบรารีเพื่อใช้ไลบรารีนั้น ดังนั้นการใช้ไลบรารี่ที่ไม่มีเอกสารจะทำงานได้ดีกว่าการสร้างไลบรารี่ขึ้นใหม่จากศูนย์ ด้วยเหตุนี้หากคุณต้องการให้คนอื่นใช้ห้องสมุดของคุณคุณควรจะมีเอกสารที่ดีกว่า ฉันรู้ว่านักพัฒนาจำนวนมากไม่ชอบเขียนเอกสารและฉันยอมรับว่ามันอาจเป็นงานที่น่าเบื่อ แต่มันเป็นงานที่สำคัญ ฉันยังบอกด้วยว่ามันสำคัญกว่าที่ห้องสมุดมีเอกสารที่ดีกว่ามีส่วนต่อประสานโปรแกรมเมอร์ที่ดีที่สุดในโลก (ผู้คนใช้ไลบรารีที่ไม่เหมาะสมอยู่ตลอดเวลามีผู้ใช้เพียงไม่กี่คนที่ไม่มีเอกสาร) โอ้โปรดทราบว่าเมื่อฉันพูดเอกสารฉันหมายถึงเอกสารจริง ไม่ใช่ Sandcastle / Javadoc / Doxygen boilerplate

5
ควรทดสอบความซับซ้อนของอัลกอริทึมหรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร
สมมติว่าฉันกำลังใช้สิ่งที่ง่ายเช่นการค้นหารายการ / แถวลำดับ ฟังก์ชั่น (ใน c #) จะมีลักษณะคล้ายกับ: static int FindIndex(int[] sortedList, int i); ฉันสามารถนำไปใช้และทดสอบสิ่งนี้ในแง่ของฟังก์ชั่น แต่ด้วยเหตุผลที่ชัดเจนฉันมักจะชอบการค้นหาแบบไบนารีมากกว่าการค้นหาเชิงเส้นหรือบางสิ่งที่โง่โดยเจตนา ดังนั้นคำถามของฉันคือ: เราควรพยายามเขียนการทดสอบที่รับประกันประสิทธิภาพในแง่ของความซับซ้อนของอัลกอริทึมและถ้าเป็นเช่นนั้นได้อย่างไร ฉันได้เริ่มสร้างข้อโต้แย้งทั้งสองด้านของ "คุณ" เป็นส่วนหนึ่งของคำถามนี้ แต่ฉันต้องการเห็นสิ่งที่ผู้คนพูดโดยไม่มีข้อโต้แย้งของฉันเพื่อกระตุ้นพวกเขา ในแง่ของ "วิธี" ที่น่าสนใจมาก :) คุณสามารถดูการกำหนดพารามิเตอร์ของตัวดำเนินการเปรียบเทียบและมีการทดสอบซึ่งตัวดำเนินการเปรียบเทียบนั้นนับการเปรียบเทียบหรืออะไรทำนองนั้น แต่เพียงเพราะคุณไม่สามารถหมายความว่าคุณควร ... มีคนอื่นที่คิดว่าสิ่งนี้ (อาจ)? ขอบคุณ

3
ความตั้งฉากของการทดสอบหน่วยเทียบกับความรัดกุมของการทดสอบหน่วย
ฉันกำลังเขียนบททดสอบสำหรับระบบบังคับเลี้ยวสำหรับวิดีโอเกม ระบบมีพฤติกรรมหลายอย่าง (หลีกเลี่ยงบริเวณนี้เนื่องจากเหตุผล A, หลีกเลี่ยงบริเวณนี้เนื่องจากเหตุผล B แต่ละคนเพิ่มบริบทเล็กน้อยลงในแผนที่ของภูมิภาคจากนั้นฟังก์ชั่นแยกต่างหากจะแยกวิเคราะห์แผนที่และสร้างการเคลื่อนไหวที่ต้องการ ฉันมีปัญหาในการตัดสินใจว่าจะเขียนบททดสอบหน่วยสำหรับพฤติกรรมอย่างไร ในฐานะที่เป็น TDD แนะนำฉันสนใจเฉพาะในพฤติกรรมที่มีผลต่อการเคลื่อนไหวที่ต้องการ ตัวอย่างเช่นการหลีกเลี่ยงเพราะเหตุผลเหตุผลควรส่งผลให้การเคลื่อนไหวอยู่ในตำแหน่งที่ไม่ดีแนะนำ ฉันไม่สนใจจริง ๆ ว่าพฤติกรรมจะเพิ่มบริบทลงในแผนที่ได้อย่างไรเพียง แต่การเคลื่อนไหวที่ต้องการอยู่ห่างจากตำแหน่ง ดังนั้นการทดสอบของฉันสำหรับแต่ละลักษณะการตั้งค่าลักษณะการทำงานทำให้มันเขียนลงในแผนที่จากนั้นดำเนินการฟังก์ชั่นการแยกแผนที่เพื่อคำนวณการเคลื่อนไหวที่ต้องการ หากการเคลื่อนไหวนั้นเป็นไปตามข้อกำหนดของฉันฉันก็มีความสุข อย่างไรก็ตามตอนนี้การทดสอบของฉันขึ้นอยู่กับทั้งพฤติกรรมที่ทำงานอย่างถูกต้องและฟังก์ชั่นการแยกวิเคราะห์แผนที่ทำงานอย่างถูกต้อง หากฟังก์ชั่นการวิเคราะห์คำล้มเหลวฉันจะได้รับการทดสอบที่ล้มเหลวหลายร้อยครั้งแทนที่จะเป็นสองสามครั้ง คู่มือการเขียนการทดสอบจำนวนมากแนะนำว่านี่เป็นความคิดที่ไม่ดี อย่างไรก็ตามถ้าฉันทดสอบโดยตรงกับผลลัพธ์ของพฤติกรรมโดยเยาะเย้ยแผนที่แล้วแน่นอนว่าฉันมีเพศสัมพันธ์กับการใช้งานแน่นเกินไป? หากฉันสามารถรับการเคลื่อนไหวที่ต้องการจากแผนที่โดยใช้พฤติกรรมที่แตกต่างกันเล็กน้อยการทดสอบก็ควรผ่าน ดังนั้นตอนนี้ฉันกำลังทุกข์ทรมานกับความไม่ลงรอยกันทางปัญญา วิธีที่ดีที่สุดในการจัดโครงสร้างการทดสอบเหล่านี้คืออะไร
14 tdd  unit-testing 

9
หนึ่งโปรแกรมเมอร์หลายภาษา - ชื่อขึ้นเขียง
เมื่อคุณทำงานกับการเขียนโปรแกรมหลายภาษามีปัญหาที่คุณประสบ ... ชื่อ (ตัวระบุ) ที่ถูกต้องในภาษาหนึ่งไม่ถูกต้องในภาษาอื่น ตัวอย่างเช่น... var new function thisเป็นคำหลักใน JavaScript แต่คุณสามารถใช้ได้อย่างอิสระใน Python ในทำนองเดียวกันlist dict defสามารถใช้ใน JavaScript ได้โดยไม่มีปัญหา นี่เป็นเรื่องธรรมดามากและบางสิ่งบางอย่างโปรแกรมเมอร์โดยทั่วไปจะคุ้นเคยอย่างรวดเร็วเมื่อพวกเขาเขียนโปรแกรมในหลายภาษา อย่างไรก็ตามเมื่อคุณทำงานร่วมกันคุณต้องวางกฎ / แนวทางบางประการสำหรับสมาชิกในทีมของคุณเพื่อให้แน่ใจว่ามีความสอดคล้องและสม่ำเสมอในรหัส เมื่อใช้ทีมปัญหานี้จะมีความสำคัญมากกว่าการจดจำสิ่งที่ถูกต้องและไม่มีอะไรในขณะที่คุณตั้งโปรแกรม ดังนั้นคำถามของฉันคือกลยุทธ์ใดที่คุณใช้ ... เพียงแค่รวมคำที่สงวนไว้ทั้งหมดที่มีอยู่ในทุกภาษาที่คุณใช้ส่งรายการให้ทุกคนและงดใช้? ยอมรับความหลากหลายและเจ็บปวดเป็นพิเศษเมื่อ "การสลับบริบท" ใช้พื้นกลางซึ่งภาษาหนึ่งสามารถใช้อีกภาษาหนึ่งได้ แต่ไม่ใช่ในทางกลับกัน (หมายเหตุ: ฉันกำลังพูดถึง Python และ JavaScript ในคำถามนี้เท่านั้น แต่โปรดตอบคำถามให้กว้างขึ้น) - อัปเดต - ขอบคุณสำหรับคำตอบทั้งหมด ดังนั้นฉันทามติทั่วไปที่ฉันเห็นว่าเกิดขึ้นก็คือเพื่อให้โปรแกรมเมอร์ใช้ชื่อใด ๆ โดยไม่คำนึงถึงสิ่งที่พวกเขาทำภาษาอื่น ๆ - ตราบใดที่ชื่อนั้นเป็นคำอธิบายมันไม่เจ็บ
14 polyglot 

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