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

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

1
บทบาทการเขียนของผู้จัดการฝ่ายพัฒนาซอฟต์แวร์ [ปิด]
เราทุกคนรู้ว่าสิ่งที่ผู้จัดการฝ่ายพัฒนาซอฟแวร์ไม่ แต่ผมเกรงว่าเราจะรู้ว่ามันคลุมเครือ เราคิดว่าเรารู้ว่าเขากำลังทำอะไรอยู่ แต่เพื่อระบุรายการขอบเขตงานที่ค่อนข้างยาก ในความเห็นของคุณผู้จัดการฝ่ายพัฒนาซอฟต์แวร์มีบทบาทอย่างไร?
62 management 

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

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

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

11
คุณจัดการกับการชุบแข็งในอวกาศหรือไม่?
ฉันกระตือรือร้นที่จะศึกษาวิธีปฏิบัติที่ดีที่สุดเมื่อมันมาถึงการทำให้พื้นที่แข็ง ตัวอย่างเช่นฉันได้อ่าน (แม้ว่าฉันจะไม่สามารถหาบทความได้อีกต่อไป) ว่าบางส่วนหลักของรถแลนด์โรเวอร์ Mars ไม่ได้ใช้การจัดสรรหน่วยความจำแบบไดนามิกในความเป็นจริงมันเป็นสิ่งต้องห้าม ฉันได้อ่านด้วยว่าหน่วยความจำหลักแบบเก่าอาจจะเหมาะสมกว่าในอวกาศ ฉันกำลังดูโปรเจ็กต์บางอย่างที่เกี่ยวข้องกับ Google Lunar Challenge และสงสัยว่ามันจะรู้สึกอย่างไรที่ได้โค้ดบนดวงจันทร์หรือแม้แต่ในอวกาศ ฉันรู้ว่าบอร์ดที่มีพื้นที่แข็งมีความมีสติในสภาพแวดล้อมที่รุนแรงเช่นนี้อย่างไรก็ตามฉันสงสัยว่า (ในฐานะโปรแกรมเมอร์ C) ฉันจะต้องปรับความคิดและรหัสของฉันอย่างไรถ้าฉันเขียนสิ่งที่จะวิ่งในอวกาศ ฉันคิดว่าอีกไม่กี่ปีข้างหน้าอาจมีการเติบโตมากขึ้นใน บริษัท ที่ให้บริการพื้นที่ส่วนตัวฉันต้องการที่จะมีความรู้เกี่ยวกับแนวปฏิบัติที่ดีที่สุด จะเกิดอะไรขึ้นกับโปรแกรมถ้าการแผ่รังสีความเย็นหรือความร้อนถล่มบอร์ดที่สร้างความเสียหายต่อฉนวน ฉันคิดว่าเป้าหมายคือการทำให้มนุษย์อยู่ในยานอวกาศ (เท่าที่ซ่อมหรือเปลี่ยนสิ่งของ) และหลีกเลี่ยงภารกิจเพื่อแก้ไขสิ่งต่าง ๆ นอกจากนี้หากคณะกรรมการรักษาระบบที่สำคัญบางคำเตือนก่อนดูเหมือนยิ่ง เราจะได้รับประสบการณ์นี้ได้อย่างไรจากการทดสอบและทดลองใช้ & ข้อผิดพลาด (ยกเว้นการเปิดตัวดาวเทียมส่วนตัวของคุณเอง)
62 c  memory 

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

14
MVC ต่อต้าน OOP ไม่ใช่หรือ
แนวคิดหลักที่อยู่เบื้องหลัง OOP คือการรวมข้อมูลและพฤติกรรมในเอนทิตีเดียว - วัตถุ ในการเขียนโปรแกรมแบบโพรซีเดอร์จะมีข้อมูลและอัลกอริธึมแยกต่างหากที่แก้ไขข้อมูล ในรูปแบบ Model-View-Controller ข้อมูลและตรรกะ / อัลกอริธึมจะถูกวางไว้ในเอนทิตีที่แตกต่างกันโมเดลและคอนโทรลเลอร์ตามลำดับ ในวิธีการ OOP ที่เทียบเท่ากันไม่ควรวางโมเดลและคอนโทรลเลอร์ไว้ในเอนทิตีแบบโลจิคัลเดียวกัน

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

3
เธรดเดี่ยวทำงานบนหลายคอร์ได้อย่างไร
ฉันพยายามที่จะเข้าใจในระดับสูงว่าเธรดเดี่ยวทำงานในหลายคอร์ได้อย่างไร ด้านล่างเป็นความเข้าใจที่ดีที่สุดของฉัน ฉันไม่เชื่อว่ามันถูกต้อง จากการอ่านHyper-threadingของฉันดูเหมือนว่าระบบปฏิบัติการจะจัดการคำแนะนำของเธรดทั้งหมดในลักษณะที่พวกเขาไม่ได้รอซึ่งกันและกัน จากนั้น Front-end ของ CPU จะจัดระเบียบคำแนะนำเหล่านั้นเพิ่มเติมโดยกระจายเธรดหนึ่งเธรดไปยังแต่ละคอร์และกระจายคำสั่งที่เป็นอิสระจากแต่ละเธรดในทุกรอบที่เปิด ดังนั้นหากมีเพียงเธรดเดียวดังนั้นระบบปฏิบัติการจะไม่ทำการเพิ่มประสิทธิภาพใด ๆ อย่างไรก็ตามส่วนหน้าของ CPU จะแจกจ่ายชุดคำสั่งที่เป็นอิสระในแต่ละคอร์ ตามhttps://stackoverflow.com/a/15936270ภาษาการเขียนโปรแกรมเฉพาะอาจสร้างเธรดมากขึ้นหรือน้อยลง แต่ไม่เกี่ยวข้องเมื่อพิจารณาว่าจะทำอย่างไรกับเธรดเหล่านั้น ระบบปฏิบัติการและ CPU จัดการสิ่งนี้ดังนั้นจึงเกิดขึ้นโดยไม่คำนึงถึงภาษาการเขียนโปรแกรมที่ใช้ เพียงเพื่อชี้แจงฉันถามเกี่ยวกับเธรดเดียวที่รันในหลายคอร์ไม่ใช่เกี่ยวกับการรันหลายเธรดบนแกนเดียว เกิดอะไรขึ้นกับบทสรุปของฉัน คำสั่งของเธรดอยู่ที่ไหนและอย่างไรแบ่งออกเป็นหลายแกน ภาษาการเขียนโปรแกรมสำคัญหรือไม่ ฉันรู้ว่านี่เป็นวิชาที่กว้างขวาง ฉันหวังว่าจะเข้าใจมันในระดับสูง

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

5
การพึ่งพาการฉีด: การฉีดภาคสนามและการฉีดคอนสตรัคเตอร์?
ฉันรู้ว่านี่คือการอภิปรายที่ร้อนแรงและความคิดเห็นมีแนวโน้มที่จะเปลี่ยนแปลงไปตามกาลเวลาเพื่อแนวทางการปฏิบัติที่ดีที่สุด ผมเคยใช้เฉพาะการฉีดฟิลด์สำหรับชั้นเรียนของฉันจนผมเริ่มอ่านบนบล็อกที่แตกต่างกัน (EXS: petrikainulainenและschauderhaftและฟาวเลอร์ ) เกี่ยวกับประโยชน์ของการฉีดสร้าง ฉันได้เปลี่ยนวิธีการของฉันที่จะใช้การฉีดคอนสตรัคสำหรับการพึ่งพาที่จำเป็นและการฉีด Setter สำหรับการพึ่งพาตัวเลือก อย่างไรก็ตามเมื่อไม่นานมานี้ฉันได้มีการถกเถียงกับผู้เขียน JMockit ซึ่งเป็นกรอบการเยาะเย้ยซึ่งเขาเห็นว่าการสร้างคอนสตรัคเตอร์และสุนัขเซทเทอร์เตอร์เป็นการปฏิบัติที่ไม่ดีและบ่งชี้ว่าชุมชน JEE เห็นด้วยกับเขา ในโลกปัจจุบันมีวิธีที่เหมาะสมกว่าในการฉีดหรือไม่? การฉีดภาคสนามเป็นที่ต้องการหรือไม่? หลังจากเปลี่ยนไปใช้คอนสตรัคเตอร์ฉีดจากการฉีดภาคสนามในช่วงสองสามปีที่ผ่านมาฉันพบว่ามันชัดเจนกว่าที่จะใช้ แต่ฉันสงสัยว่าฉันควรตรวจสอบมุมมองของฉันอีกครั้งหรือไม่ ผู้เขียนJMockit (Rogério Liesenfeld)มีความเชี่ยวชาญใน DI อย่างชัดเจนดังนั้นฉันรู้สึกผูกพันที่จะต้องทบทวนวิธีการของฉันเนื่องจากเขารู้สึกอย่างยิ่งกับการฉีดคอนสตรัคเตอร์ / สุนัขเซทเตอร์

7
เหตุใดโมเดลเชิงสัมพันธ์สำหรับฐานข้อมูลจึงมีความสำคัญ
ฉันกำลังเข้าใกล้โครงการที่ฉันจะต้องใช้ฐานข้อมูลกับเจ้านายของฉัน เราเริ่มต้นเพียงเล็กน้อยเพื่อให้สภาพแวดล้อมการทำงานมีความเป็นส่วนตัวอย่างลึกซึ้ง เขาให้ฐานข้อมูล บริษัท หนึ่งฐานแก่ฉันก่อนหน้านี้และตรงข้ามกับสิ่งที่ฉันได้รับการสอน (และอ่าน) ในโรงเรียนสำหรับ RDBMS ตัวอย่างเช่นมีฐานข้อมูลทั้งหมดที่นี่ซึ่งประกอบด้วยหนึ่งตาราง (ต่อฐานข้อมูลอิสระ) หนึ่งในตารางเหล่านั้นมีความยาว 20+ คอลัมน์และสำหรับบริบทนี่คือชื่อคอลัมน์บางส่วนจากตารางเดียว : lngStoreID | vrStoreName | lngCompanyID | vrCompanyName | lngProductID | vrProductName จุดที่เป็นที่ที่เขาควรจะมีตารางบุคคลที่เก็บข้อมูลกิจการ (ชื่อ, ขนาด, วันที่ซื้อ ฯลฯ ) เขาผลักมันทั้งหมดในตารางขนาดใหญ่หนึ่งต่อฐานข้อมูล ฉันต้องการปรับปรุงการออกแบบนี้ แต่ฉันไม่แน่ใจว่าทำไมตัวแบบข้อมูลที่ได้รับการทำให้เป็นมาตรฐานและจัดกลุ่มอย่างถูกต้องจะปรับปรุงผลิตภัณฑ์นี้ได้จริง ในขณะที่ฉันคุ้นเคยกับการออกแบบฐานข้อมูลจากวิทยาลัยและฉันเข้าใจวิธีการทำฉันไม่แน่ใจว่าทำไมสิ่งนี้ถึงช่วยปรับปรุงฐานข้อมูลได้จริง ทำไม schema เชิงสัมพันธ์ที่ดีจึงปรับปรุงฐานข้อมูล

8
การรักษาความปลอดภัยข้อมูลที่สำคัญจากนักพัฒนา
ฉันมีแอพพลิเคชั่นระดับองค์กรที่ใช้ทั้งMySQLและMongoDB datastores ทีมพัฒนาของฉันทุกคนสามารถเข้าใช้งานSSHได้เพื่อดำเนินการรีลีสแอปพลิเคชันการบำรุงรักษา ฯลฯ ฉันเพิ่งเพิ่มความเสี่ยงในธุรกิจเมื่อผู้ใช้เริ่มจัดเก็บข้อมูลที่มีความอ่อนไหวสูงในแอปพลิเคชันที่ผู้พัฒนาสามารถเข้าถึงข้อมูลนี้ทางอ้อมซึ่งก่อให้เกิดพายุเล็กน้อยดังนั้นตอนนี้ฉันจึงได้รับคำสั่งให้รักษาความปลอดภัยของข้อมูล สามารถเข้าถึงได้ สำหรับฉันนี่ดูเหมือนจะเป็นไปไม่ได้เพราะหากแอปพลิเคชันมีการเข้าถึงฐานข้อมูลนักพัฒนาที่มีสิทธิ์เข้าถึงเครื่องและแหล่งที่มาของแอปพลิเคชันจะสามารถเข้าถึงข้อมูลได้เสมอ

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

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

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