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

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

4
ใช้ #ifdef เพื่อสลับไปมาระหว่างพฤติกรรมประเภทต่าง ๆ ในระหว่างการพัฒนา
เป็นวิธีปฏิบัติที่ดีหรือไม่ที่จะใช้ #ifdef ระหว่างการพัฒนาเพื่อสลับไปมาระหว่างพฤติกรรมประเภทต่าง ๆ ? ตัวอย่างเช่นฉันต้องการเปลี่ยนพฤติกรรมของรหัสที่มีอยู่ฉันมีความคิดหลายอย่างเกี่ยวกับวิธีการเปลี่ยนพฤติกรรมและจำเป็นต้องสลับระหว่างการใช้งานที่แตกต่างกันเพื่อทดสอบและเปรียบเทียบวิธีการที่แตกต่างกัน การเปลี่ยนแปลงรหัสมักจะซับซ้อนและมีผลต่อวิธีการต่าง ๆ ในไฟล์ที่แตกต่างกัน ฉันมักจะแนะนำตัวระบุหลายตัวและทำอะไรแบบนั้น void foo() { doSomething1(); #ifdef APPROACH1 foo_approach1(); #endif doSomething2(); #ifdef APPROACH2 foo_approach2(); #endif } void bar() { doSomething3(); #ifndef APPROACH3 doSomething4(); #endif doSomething5(); #ifdef APPROACH2 bar_approach2(); #endif } int main() { foo(); bar(); return 0; } วิธีนี้ช่วยให้สามารถสลับไปมาระหว่างวิธีการต่าง ๆ ได้อย่างรวดเร็วและทำทุกอย่างในสำเนาของซอร์สโค้ดเดียว มันเป็นแนวทางที่ดีสำหรับการพัฒนาหรือมีแนวปฏิบัติที่ดีกว่านี้หรือไม่?

7
บริษัท ของฉันรวมสาขาผิดหรือเปล่า?
ฉันเพิ่งมาข้ามบทความ MSDN เกี่ยวกับการแยกทางและการผสานและ SCM: การแตกแขนงและผสานรองพื้น - คริส Birmele ในบทความพวกเขาบอกว่า 'บิ๊กแบงผสาน' เป็นปฏิปักษ์ต่อการรวม: Big Bang Merge - ชะลอการรวมสาขาเพื่อสิ้นสุดความพยายามในการพัฒนาและพยายามรวมสาขาทั้งหมดพร้อมกัน ฉันรู้ว่านี่คล้ายกับสิ่งที่ บริษัท ของฉันทำกับสาขาการพัฒนาทั้งหมดที่ผลิต ฉันทำงานที่ บริษัท ขนาดเล็กมากโดยมีคนคนหนึ่งทำหน้าที่เป็นผู้ตรวจสอบขั้นสุดท้าย + มีอำนาจในการรวมลำตัว เรามีนักพัฒนา 5 คน (รวมถึงฉันด้วย) เราแต่ละคนจะได้รับมอบหมายภารกิจ / ข้อบกพร่อง / โครงการแยกจากกันและเราจะแยกแต่ละสาขาออกจากเส้นทางปัจจุบัน (การโค่นล้ม) จากนั้นทำการพัฒนาในสาขาของเราทดสอบผลลัพธ์เขียนเอกสาร หากจำเป็นให้ดำเนินการตรวจสอบแบบเพียร์และข้อเสนอแนะกับนักพัฒนาอื่น ๆ แล้วส่งสาขาสำหรับความคิดเห็น + ผสานในซอฟต์แวร์การจัดการโครงการของเรา เจ้านายของฉันซึ่งเป็นผู้มีอำนาจ แต่เพียงผู้เดียวในที่เก็บ trunk จะทำการตรวจสอบความคิดเห็นทั้งหมดของสาขาจนกว่าจะถึงจุดเดียวในเวลาที่เขาจะแสดงความคิดเห็นให้มากที่สุดเท่าที่จะทำได้บางสาขาจะถูกโยนทิ้งเพื่อปรับปรุง / แก้ไข กิ่งไม้จะถูกรวมเข้ากับลำต้นบางสาขาจะถูกโยนกลับเนื่องจากความขัดแย้ง ฯลฯ ไม่ใช่เรื่องแปลกที่เราจะมีสาขาที่ใช้งานอยู่ 10-20 …

7
อาจมีการเปลี่ยนแปลงค่าคงที่เมื่อเวลาผ่านไป?
ในระหว่างขั้นตอนการพัฒนามีตัวแปรบางอย่างที่จำเป็นต้องได้รับการแก้ไขในการรันเดียวกัน แต่อาจจำเป็นต้องแก้ไขตลอดเวลา เช่น a booleanto signal debug mode ดังนั้นเราจึงทำสิ่งต่าง ๆ ในโปรแกรมที่ปกติแล้วเราจะไม่ทำ มันเป็นสไตล์ที่ไม่ดีหรือไม่ที่มีค่าเหล่านี้ในค่าคงที่เช่นfinal static int CONSTANT = 0ใน Java? ฉันรู้ว่าค่าคงที่ยังคงเหมือนเดิมในช่วงรันไทม์ แต่มันควรจะเหมือนกันในระหว่างการพัฒนาทั้งหมดยกเว้นการเปลี่ยนแปลงที่ไม่ได้วางแผนไว้แน่นอน? ฉันค้นหาคำถามที่คล้ายกัน แต่ไม่พบสิ่งใดที่ตรงกับของฉันอย่างแน่นอน
28 const  constants 

6
ทำไมฉันไม่สามารถตรวจสอบว่า Mutex ถูกล็อคหรือไม่
C ++ 14 ดูเหมือนจะไม่ได้ใช้กลไกสำหรับตรวจสอบว่ามีการstd::mutexล็อกอยู่หรือไม่ ดูคำถาม SO นี้: https://stackoverflow.com/questions/21892934/how-to-assert-if-a-stdmutex-is-locked มีหลายวิธีเช่นนี้โดยใช้; std::mutex::try_lock() std::unique_lock::owns_lock() แต่สิ่งเหล่านี้ไม่ได้เป็นโซลูชั่นที่น่าพึงพอใจโดยเฉพาะ try_lock()ได้รับอนุญาตให้ส่งคืนค่าลบที่เป็นเท็จและมีพฤติกรรมที่ไม่ได้กำหนดหากเธรดปัจจุบันล็อค mutex นอกจากนี้ยังมีผลข้างเคียง owns_lock()ต้องมีการก่อสร้างที่อยู่ด้านบนของเดิมunique_lockstd::mutex เห็นได้ชัดว่าฉันสามารถม้วนตัวเอง แต่ฉันค่อนข้างเข้าใจแรงจูงใจสำหรับอินเทอร์เฟซปัจจุบัน ความสามารถในการตรวจสอบสถานะของ mutex (เช่นstd::mutex::is_locked()) ดูเหมือนจะไม่เป็นการร้องขอที่ลึกลับสำหรับฉันดังนั้นฉันจึงสงสัยว่าคณะกรรมการมาตรฐานได้ละเว้นคุณลักษณะนี้โดยไม่ได้ตั้งใจ ทำไม? แก้ไข:ตกลงดังนั้นกรณีการใช้งานนี้อาจไม่เหมือนที่ฉันคาดไว้ดังนั้นฉันจะอธิบายสถานการณ์ของฉันโดยเฉพาะ ฉันมีอัลกอริทึมการเรียนรู้ของเครื่องซึ่งกระจายอยู่ในหลายเธรด แต่ละเธรดทำงานแบบอะซิงโครนัสและกลับไปยังพูลต้นแบบเมื่อปัญหาการปรับให้เหมาะสมเสร็จสมบูรณ์ จากนั้นล็อคมาสเตอร์ mutex จากนั้นเธรดต้องเลือกพาเรนต์ใหม่ที่จะทำการกลายพันธุ์ของลูกหลาน แต่อาจเลือกจากพาเรนต์ที่ยังไม่มีลูกในขณะนี้ซึ่งถูกปรับให้เหมาะสมโดยเธรดอื่น ฉันจึงต้องทำการค้นหาเพื่อค้นหาผู้ปกครองที่ไม่ได้ล็อคโดยเธรดอื่นในขณะนี้ ไม่มีความเสี่ยงของสถานะของการเปลี่ยนแปลง mutex ระหว่างการค้นหาเนื่องจากมาสเตอร์เธรด mutex ถูกล็อก เห็นได้ชัดว่ามีวิธีแก้ปัญหาอื่น ๆ (ขณะนี้ฉันใช้แฟล็กบูลีน) แต่ฉันคิดว่า mutex เสนอวิธีแก้ปัญหาแบบลอจิคัลกับปัญหานี้เนื่องจากมีอยู่เพื่อจุดประสงค์ในการซิงโครไนซ์ระหว่างเธรด
28 c++ 

8
จะเถียงกับการลดมาตรฐานคุณภาพสำหรับ codebase แบบเดิมได้อย่างไร [ปิด]
เรามีฐานรหัสดั้งเดิมขนาดใหญ่ที่มีรหัสไม่ดีซึ่งคุณไม่สามารถจินตนาการได้ ตอนนี้เรากำหนดมาตรฐานคุณภาพบางอย่างและต้องการให้ได้มาตรฐานที่สมบูรณ์ใน codebase ใหม่ที่สมบูรณ์ แต่ถ้าคุณแตะรหัสเดิม และเราบังคับใช้กับ Sonar (เครื่องมือวิเคราะห์รหัส) ซึ่งมีการละเมิดหลายพันครั้งแล้ว ตอนนี้การสนทนาขึ้นมาเพื่อลดการละเมิดเหล่านั้นสำหรับมรดก เพราะมันเป็นมรดก การสนทนาเป็นเรื่องเกี่ยวกับกฎของการอ่าน ชอบจำนวน ifs ที่ซ้อนกัน / for .. มันสามารถมีได้ ตอนนี้ฉันจะเถียงกับการลดคุณภาพการเข้ารหัสของเราลงบนรหัสดั้งเดิมได้อย่างไร

3
เว็บเซิร์ฟเวอร์โหมดเคอร์เนล: การเพิ่มประสิทธิภาพที่ฉลาดหรือฝันร้ายด้านความปลอดภัย?
ฉันอ่านเธรด Hacker Newsที่ผู้ใช้รายหนึ่งโพสต์ลิงก์จาก 2011 อธิบายว่าIIS เร็วกว่าเว็บเซิร์ฟเวอร์ (* nix) ส่วนใหญ่ ตอบกลับผู้ใช้คนอื่นอธิบายว่า IIS ได้รับประโยชน์ที่โดยมีเคอร์เนลโมดูลที่เรียกว่า HTTP.sys ตามความรู้ของฉันเว็บเซิร์ฟเวอร์ยอดนิยมอื่น ๆ ส่วนใหญ่ในปี 2015 ไม่ได้ทำเช่นนี้ ฉันจะไม่ต้องการเขียนเว็บเซิร์ฟเวอร์ในโหมดเคอร์เนลเพราะฉันไม่สามารถเชื่อใจตัวเองได้ว่าจะทำให้ปราศจากช่องโหว่ด้านความปลอดภัย (ซึ่งจะทำงานน้อยลงในวงแหวนป้องกันที่ต่ำกว่า) จากมุมมองของวิศวกรซอฟต์แวร์ (เมื่อเทียบกับลูกค้าสำหรับเว็บเซิร์ฟเวอร์) การทำงานในโหมดเคอร์เนลเป็นการตัดสินใจที่มีประสิทธิภาพหรือไม่? ความกังวลด้านความปลอดภัยสามารถลดลงในการพัฒนาแอปพลิเคชันจนถึงจุดที่ทำให้เซิร์ฟเวอร์โหมดเคอร์เนลเป็นกำไรสุทธิสำหรับผู้บริโภคได้หรือไม่?

2
NoSQL ภายใน SQL Server
คำถามนี้ไม่เกี่ยวกับความแตกต่างระหว่าง SQL และ NoSQL ฉันกำลังมองหาเหตุผลบางอย่างสำหรับบางสิ่งบางอย่างที่ไม่สมเหตุสมผลกับฉันในขณะนี้ (อาจเป็นเพราะการขาดความเข้าใจหรือการชื่นชมของฉัน) เราได้เริ่มโครงการใหม่ตั้งแต่เริ่มต้นโดยใช้ MVC5, Entity Framework 6 code ก่อนและ SQL Server 2008 เมื่อสถาปนิกตรวจสอบ schema ฐานข้อมูลมีการระบุว่าคีย์ต่างประเทศทั้งหมดและข้อ จำกัด อื่น ๆ ควรถูกลบออกเพราะนี่คือ "ตรรกะทางธุรกิจ" และ ควรใช้ภายในเลเยอร์ธุรกิจของรหัสแอปพลิเคชัน ความคิดเห็นของฉันคือว่าคีย์ต่างประเทศเป็นส่วนหนึ่งของข้อมูล / การอ้างอิงที่สมบูรณ์และไม่ได้เลียนแบบตรรกะทางธุรกิจจริงๆ ฉันเห็นตรรกะทางธุรกิจเป็นกระบวนการและการตรวจสอบความถูกต้องซึ่งควบคุมว่าจะใช้การอ้างอิงแบบใด / เมื่อใด / อย่างไร / ทำไม ฉันสามารถเข้าใจได้ว่าข้อ จำกัด ที่ไม่เหมือนใครนั้นเป็นกระบวนการทางธุรกิจที่มีเนื้อหา แต่สำหรับฉันนี่เป็นการเติมเต็มตรรกะและเป็นส่วนหนึ่งของความซื่อสัตย์ อาร์กิวเมนต์ที่สองคือเป้าหมายคือการใช้วิธี NoSQL กับข้อมูล ฉันพบสิ่งผิดปกติและผิดพลาดจริง ๆ นี้: พิจารณาการใช้ SQL-Server 2008, ความจำเป็นในการรายงาน, …
28 sql  sql-server  nosql 

7
วิธีการตรวจสอบการตรวจสอบรหัสอย่างมีประสิทธิภาพ?
ฉันสงสัยว่ารหัสตรวจสอบที่สำคัญครอบคลุมในทีมของฉัน มีการรวมความเห็นรหัสมากเกินไปโดยไม่มีความคิดเห็นใด ๆ ดูเหมือนว่าฉันจะไม่มีสิ่งเช่นรหัสตรวจสอบโดยไม่ต้องแสดงความคิดเห็นเดียว ฉันในฐานะหัวหน้าทีมจะตรวจสอบอย่างถูกต้องได้อย่างไรว่าทีมของฉันกำลังทำกระบวนการตรวจสอบโค้ดที่เหมาะสมและฉันจะช่วยให้พวกเขาได้รับประโยชน์สูงสุดจากกระบวนการได้อย่างไร ปรับปรุง คนที่คิดว่าอาจต้องการทราบเกี่ยวกับการปรับปรุงใด ๆ ฉันลองคำแนะนำมากมายที่ให้ไว้ที่นี่ ส่วนใหญ่มีการใช้งานแล้ว บางคนช่วยเล็กน้อย อย่างไรก็ตามปัญหายังคงอยู่ - บางคนได้รับรหัสที่ไม่ดีอย่างต่อเนื่องเมื่อฉันไม่ได้มอง ฉันพบว่าการตรวจสอบการตรวจสอบรหัสไม่เป็นประโยชน์เท่ากับการมอบเครื่องมือของทีมของฉันเพื่อให้เริ่มต้นโค้ดได้ดียิ่งขึ้น ดังนั้นฉันจึงเพิ่มห้องสมุดชื่อ "jscpd" เพื่อตรวจจับการคัดลอก บิลด์ล้มเหลวเมื่อคัดลอกวาง นั่นเป็นการขจัดปัญหาหนึ่งทันที ต่อไปเราจะลองแปลงสภาพ ฉันยังทำรีวิวด้วยตนเองกับรีวิวรหัสเก่าครั้งเดียววิ่งครึ่งวัน ฉันกำลังแปลงtodos เป็นปัญหา / ตั๋ว - เนื่องจากฉันพบว่าผู้คนกำลังเขียนพวกเขา แต่พวกเขาไม่เคยได้รับการจัดการในภายหลัง ฉันกำลังประชุมกับทั้งทีมเพื่อตรวจสอบรหัสเมื่อเหมาะสม โดยทั่วไปแล้วรู้สึกว่าเรากำลังเคลื่อนไหวในทิศทางที่ถูกต้อง

2
วิธีการบังคับใช้วิธีปฏิบัติในการควบคุมซอร์สโค้ดที่ดี / ดีกว่า
ฉันสงสัยว่าฉันกำลังมุ่งเน้นไปที่ปัญหาที่ไม่ถูกต้องดังนั้นฉันจะอธิบายสิ่งที่ฉันคิดว่าเป็นปัญหาก่อนที่จะนำเสนอวิธีการแก้ปัญหาที่อาจเป็นผลเสียน้อยที่สุดที่ฉันจินตนาการ สถานการณ์ปัจจุบัน: ใน ปัจจุบันเพื่อนร่วมงานของฉันยอมรับการเปลี่ยนแปลงรหัสของพวกเขาหลังจากช่วงเวลา loooong เป็นระยะเวลานานโดยมีการเปลี่ยนแปลงกระจายไปทั่วทั้งโครงการ นั่นเป็นความคืบหน้าฉันเดาเพราะไม่นานมานี้พวกเขาเพิ่งวางไฟล์. zip ไว้ในเครือข่าย ยังคงการรวมกันเป็นฝันร้าย - และตรงไปตรงมาที่ฉันมีเพียงพอ และฉันก็เบื่อที่จะพูดคุยและอธิบายและขอร้องด้วย สิ่งนี้ต้องหยุด - ถ้าไม่มีฉันก็จะเป็น "คนเลว" ตลอดเวลา ทางออกของฉัน: เนื่องจากดูเหมือนว่าจะไม่รับรู้และ / หรือไม่มีความสนใจในปัญหาและฉันไม่สามารถคาดหวังความพยายามใด ๆ ที่จะใช้เวลานานกว่าสองสามวัน ... หยุดงานชั่วคราว, ชั่วโมง, ฉันต้องการเซิร์ฟเวอร์โค่นล้ม ซึ่งจู้จี้ คำถามของฉัน: ฉันไปทางฐานที่นี่หรือฉันกำลังดูปัญหาที่ผิด? ดูเหมือนว่าฉันขาดอะไรบางอย่างไปและฉันคิดว่าฉันกำลังถามสิ่งที่ผิดโดยดูที่เครื่องมือในการแก้ปัญหาของฉัน ฉันควรจะมองหาเครื่องมือในการแก้ปัญหานี้หรือฉันควรทำอย่างไรเพื่อแก้ไขปัญหานี้

6
เปลี่ยนโปรเจค Python ส่วนตัวให้กลายเป็นไลบรารี่
ฉันเป็นนักวิชาการมากกว่าโปรแกรมเมอร์และฉันมีประสบการณ์หลายปีในการเขียนโปรแกรม Python สำหรับใช้เองเพื่อสนับสนุนงานวิจัยของฉัน โปรเจ็กต์ล่าสุดของฉันน่าจะมีประโยชน์กับคนอื่น ๆ เช่นฉันและฉันกำลังคิดว่าจะปล่อยมันเป็นไลบรารี่แบบโอเพ่นซอร์ส อย่างไรก็ตามดูเหมือนว่ามีอุปสรรคบางอย่างที่จะข้ามไปจากโครงการส่วนตัวที่ใช้งานได้ไปจนถึงห้องสมุดที่สามารถติดตั้งและใช้งานได้โดยไม่เจ็บปวด คำถามนี้เกี่ยวกับขั้นตอนแรกที่ฉันควรทำเพื่อเริ่มทำงานสู่รุ่นสาธารณะ ขณะนี้ฉันมีที่เก็บคอมไพล์เดียวซึ่งมีรหัสของฉันที่ใช้ไลบรารีรวมทั้งไลบรารีเองและฉันใช้ git เป็นปุ่มเลิกทำฉุกเฉินในกรณีที่มีอะไรผิดพลาด ทั้งหมดนี้ใช้งานได้ดีสำหรับผู้ใช้คนเดียว แต่เห็นได้ชัดว่าไม่เหมาะสมถ้าฉันต้องการปล่อย ที่ฉันต้องการจะจบคือห้องสมุดของฉันอยู่ในที่เก็บแยกต่างหากและสามารถติดตั้งโดยผู้อื่นโดยใช้pipและมี API ที่มั่นคง การเรียนรู้ที่จะใช้ setuptools เป็นต้นอาจไม่ยากเมื่อฉันถึงจุดที่ต้องการเผยแพร่มัน - ปัญหาของฉันคือการรู้ว่าฉันควรทำงานอย่างไรเพื่อที่จะไปถึงจุดนั้น ดังนั้นคำถามของฉันคือขั้นตอนแรกที่ควรทำเพื่อเริ่มเตรียมโครงการห้องสมุด Python สำหรับการบริโภคสาธารณะคืออะไร ฉันจะจัดระเบียบโครงสร้างไดเรกทอรีของฉัน, git repository และอื่น ๆ เพื่อที่จะเริ่มทำงานในที่สาธารณะต่อการเปิดตัวไลบรารี่? โดยทั่วไปแล้วจะมีประโยชน์มากหากมีทรัพยากรที่ทราบว่ามีประโยชน์เมื่อพยายามทำสิ่งนี้เป็นครั้งแรก ตัวชี้ไปยังแนวปฏิบัติที่ดีที่สุดและข้อผิดพลาดที่ควรหลีกเลี่ยง ฯลฯ จะเป็นประโยชน์อย่างมาก การชี้แจงบางอย่าง:คำตอบปัจจุบันกำลังตอบคำถามตามแนวของ "ฉันจะทำให้ห้องสมุด Python ของฉันเป็นที่ดีสำหรับผู้อื่นในการใช้งานได้อย่างไร" สิ่งนี้มีประโยชน์ แต่แตกต่างจากคำถามที่ฉันตั้งใจจะถาม ขณะนี้ฉันกำลังเริ่มต้นการเดินทางที่ยาวนานเพื่อปล่อยโครงการของฉัน แกนกลางของการทำงานของฉัน (และทำงานได้ดีจริงๆ) แต่ฉันรู้สึกท่วมท้นจากจำนวนงานที่ทำอยู่ข้างหน้าของฉันและฉันกำลังมองหาคำแนะนำเกี่ยวกับวิธีนำทางกระบวนการ ตัวอย่างเช่น: ขณะนี้รหัสห้องสมุดของฉันอยู่คู่กับรหัสเฉพาะโดเมนของฉันที่ใช้งาน มันอาศัยอยู่ในโฟลเดอร์ย่อยและแชร์ที่เก็บ git เดียวกัน ในที่สุดมันจะต้องถูกทำให้เป็นไลบรารีแบบสแตนด์อะโลนและใส่ลงในที่เก็บของมันเอง …

1
วิธีการจัดการกับฟังก์ชั่นที่ผิดในรหัสการผลิต?
ฉันเพิ่งเจอห้องสมุด Python ใน GitHub ไลบรารี่นั้นยอดเยี่ยม แต่มีการพิมพ์ผิดที่หนึ่งในชื่อฟังก์ชั่น ขอเรียกว่าในขณะที่มันควรจะเป็นdummy_fuction() dummy_function()ฟังก์ชั่นนี้ "แน่นอน" และมักใช้ในระบบฝังตัว สิ่งแรกที่ควรคำนึงถึงคือการเพิ่มรุ่นที่สองของฟังก์ชั่นที่มีชื่อที่ถูกต้องและเพิ่มคำเตือนการเลิกใช้ในรุ่นแรกสำหรับรุ่นถัดไป คำถามสามข้อ: แนวทางข้างต้นอาจมีผลที่ไม่ตั้งใจหรือไม่? มีวิธีการมาตรฐานในการแก้ไขปัญหานี้หรือไม่? ควรมีคำเตือนใด ๆ เกี่ยวกับการคัดค้านทิ้งไว้นานเท่าใด

4
อะไรคือต้นกำเนิดของคำว่า "รหัสดั้งเดิม" ที่เป็นลบ
ทุกคนพูดเกี่ยวกับรหัสดั้งเดิมในการพัฒนาซอฟต์แวร์และฉันเคยได้ยินคำว่าในช่วงสิบปีที่ผ่านมาใช้ในการวาด codebase ใด ๆ ที่ไม่ดี คำนี้อยู่ที่ไหนซึ่งมีความหมายแฝงอันทรงพลังเช่นนี้สำหรับโปรแกรมเมอร์ ฉันแน่ใจว่าต้องมีหนังสือเกี่ยวกับการพัฒนาซอฟต์แวร์ที่เป็นผู้บุกเบิกคำนี้ ฉันชอบที่จะหาที่มาของคำว่า "รหัสมรดก"

6
ทำไมเราต้องรอ I / O
เป็นที่ทราบกันดีอยู่แล้วว่าการทำงานของดิสก์ช้าและเรารู้สาเหตุที่ทำให้การทำงานช้า ดังนั้นคำถามที่นี่คือเหตุผลที่เราต้องรอ I / O หรือทำไมมีสิ่งเช่น IOWait ฯลฯ ฉันหมายถึงฉันสังเกตเห็นว่าเมื่อคุณทำงาน I / O บางส่วนในพื้นหลังโดยทั่วไปคอมพิวเตอร์ของคุณจะช้าลงมากฉันสังเกตว่าโดยเฉพาะอย่างยิ่งเมื่อใช้ Linux ถ้าคุณทำภารกิจ I / O อีกต่อไป ระบบปฏิบัติการเกือบจะไม่สามารถใช้งานได้จนกว่าจะเสร็จสิ้น ที่จริงฉันยังพบหัวข้อนี้ในบทความมีตัวอย่าง: การรอ I / O คือ 12.1% เซิร์ฟเวอร์นี้มี 8 คอร์ (ผ่าน cat / proc / cpuinfo) สิ่งนี้อยู่ใกล้กับ (1/8 คอร์ = 0.125) โดยพื้นฐานแล้วมันหมายความว่ามันทำให้คอมพิวเตอร์ช้าลงมากทำไมล่ะ? ฉันหมายถึงตกลงตอนนี้คอมพิวเตอร์ทั่วไปมีอย่างน้อย 2 คอร์บางครั้ง 4 หรือบางครั้งพวกเขามีมากขึ้นเพราะการทำไฮเปอร์เธรดหรืออะไรแบบนั้น แต่ตอนนี้คำถามคือทำไม CPU ถึงต้องอยู่ที่นั่นจริง …
28 cpu  io  operations 

6
ความรู้สึกของการทดสอบหน่วยโดยไม่ต้อง TDD
เรามีโครงการใหม่ (ค่อนข้างใหญ่) เริ่มต้นที่เราวางแผนที่จะพัฒนาโดยใช้ TDD แนวคิดของ TDD ล้มเหลว (ด้วยเหตุผลทางธุรกิจและไม่ใช่ธุรกิจ) แต่ตอนนี้เรามีการสนทนาเราควรจะเขียนบททดสอบต่อไปหรือไม่ เพื่อนของฉันบอกว่าไม่มีความรู้สึก (หรือใกล้ถึงศูนย์) ในการเขียนการทดสอบหน่วยที่ไม่มี TDD เราควรเน้นเฉพาะการทดสอบการรวมเข้าด้วยกัน ฉันเชื่อว่าตรงกันข้ามว่ายังมีความรู้สึกบางอย่างในการเขียนการทดสอบหน่วยธรรมดาเพียงเพื่อให้รหัสในอนาคตมากขึ้น คุณคิดอย่างไร? เพิ่มเติม: ฉันคิดว่านี่ไม่ใช่คำถามที่ซ้ำกัน>> คำถามนี้ << - ฉันเข้าใจความแตกต่างระหว่าง UT และ TDD คำถามของฉันไม่เกี่ยวกับความแตกต่างแต่เกี่ยวกับความรู้สึกในการเขียนการทดสอบหน่วยที่ไม่มี TDD
28 unit-testing  tdd 

3
ฉันควรสร้างบัญชี GitHub ที่ทำงานและส่วนตัวแยกจากกันหรือไม่ [ปิด]
ฉันค่อนข้างใหม่ในการเขียนโปรแกรมและฉันได้ทำงานในหลายโครงการส่วนตัวซึ่งฉันกังวลสามารถเจอโง่และไม่เป็นมืออาชีพ ประเภทของโครงการที่ฉันมีคือ Reddit Image Downloader และเครื่องมือสำหรับGMที่ใช้ในเกมสวมบทบาท ฉันต้องการเริ่มสร้างบัญชีGitHubสำหรับโครงการในสาขาการวิเคราะห์ข้อมูลที่ฉันเลือกแต่ฉันไม่แน่ใจว่าจะจัดการโครงการในบัญชี GitHub ของฉันได้อย่างไร ฉันควรสร้าง GitHub "มืออาชีพ" ซึ่งส่วนใหญ่มีสคริปต์การวิเคราะห์ที่แตกต่างกันและมีบัญชี "ส่วนตัว" แยกต่างหากสำหรับโครงการสนุก ๆ ของฉัน หรือฉันเพิ่งคิดมากเรื่องนี้และฉันควรจะรักษาบัญชีเดียวหรือไม่
28 github 

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