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

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

7
คุณจัดการความปลอดภัยฐานข้อมูลจากแอปพลิเคชันบนเดสก์ท็อปได้อย่างไร
เป็นเวลาประมาณ 10 ปีที่ฉันได้ทำงานกับแอพพลิเคชั่นไคลเอนต์เดสก์ท็อปภายในพร้อมที่เก็บข้อมูล SQL Server ฉันเริ่มทำโครงการเหล่านี้บ่อยครั้ง - ส่วนใหญ่เป็นงานเทคโอเวอร์ สิ่งหนึ่งที่ดูเหมือนว่าคงที่ทุกหนทุกแห่งก็คือมีบัญชีผู้ใช้ SQL Server ส่วนกลางเดียวที่แอปพลิเคชันนี้ใช้ที่ให้สิทธิ์แก่ฐานข้อมูลทั่วไปและใช่ในบางสถานการณ์ที่ไร้เดียงสาที่saใช้บัญชีผู้ใช้ซึ่งโดยทั่วไปฉันพยายามแก้ไขเมื่อทำได้ . คุณไม่สามารถซ่อนชื่อผู้ใช้และรหัสผ่านนี้ได้อย่างมีประสิทธิภาพซึ่งแอปพลิเคชันใช้ในการเข้าถึงฐานข้อมูล พวกเขามักจะเก็บไว้ในiniหรือconfigไฟล์หรืออาจอบลงในตัวปฏิบัติการ ในทุกกรณีผู้ใช้จะมองเห็นได้หากผู้ใช้ทำการขุดเล็กน้อย ในกรณีหนึ่งเราใช้configไฟล์จริงแต่เข้ารหัสมัน แต่แน่นอนว่าต้องมีการเข้ารหัสคีย์การเข้ารหัสไว้ในแฟ้มที่ปฏิบัติการได้ (เราไม่ไร้เดียงสาถึงข้อ จำกัด ของเรื่องนี้ แต่มันก็หยุดผู้คนไม่ให้พูดเล่น เพื่อดูconfigไฟล์) ระบบทั้งหมดเหล่านี้มีระบบการพิสูจน์ตัวตนผู้ใช้ที่สร้างไว้ในแอปพลิเคชัน แต่แน่นอนว่าพวกเขาทั้งหมดได้รับการจัดการผ่านแอปพลิเคชันเองซึ่งหมายความว่าข้อมูลผู้ใช้ถูกเก็บไว้ในฐานข้อมูล แอปพลิเคชัน จำกัด สิ่งที่คุณสามารถทำได้ตามระดับการเข้าถึงของคุณ แต่เป็นสิ่งที่สงสัยหากคุณสามารถเชื่อมต่อกับฐานข้อมูลและเรียกใช้คิวรีแบบเฉพาะกิจ ฉันสนใจที่จะรู้ว่าระบบอื่น ๆ จะแก้ไขปัญหานี้ได้อย่างไร นี่คือตัวเลือกที่ฉันรู้: ใช้กลไกความปลอดภัยของ SQL Server เพื่อรักษาผู้ใช้และรายการบทบาทและทำให้แอปพลิเคชันเดสก์ท็อปเพิ่มและลบผู้ใช้ผ่านการสอบถาม T-SQL แทนที่จะเชื่อมต่อกับฐานข้อมูลโดยตรงให้สร้างบริการบนเว็บบางประเภทที่ทำงานบนเซิร์ฟเวอร์และวางตรรกะการตรวจสอบสิทธิ์ลงในนั้น ทำให้ทุกคำขอทำการตรวจสอบความปลอดภัย ตัวเลือกแรกนั้นค่อนข้างน่าเกลียดเพราะคุณแยกผู้ใช้ออกจากฐานข้อมูลดังนั้นผู้ใช้จึงไม่ได้เป็นเอนทิตีชั้นหนึ่งอีกต่อไปและคุณไม่สามารถอ้างอิงพวกเขาด้วยความสัมพันธ์กับกุญแจต่างประเทศเป็นต้น ครั้งที่สองดูเหมือนว่าจะเป็นปัญหาด้านประสิทธิภาพที่สำคัญและมีงานพิเศษมากมายรวมถึงคุณไม่สามารถใช้โปรแกรมแมป ORM อย่าง NHibernate ได้อย่างง่ายดาย (ฉันคิดว่า) ใครบ้างมีประสบการณ์กับสิ่งนี้หรือไม่? ปฏิบัติที่ดีที่สุด? แก้ไข …

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

4
รูปแบบการออกแบบ / กลยุทธ์สำหรับฟิลด์ที่กำหนดเองและประเภทข้อมูล
มีกลยุทธ์ทั่วไปหรือรูปแบบการออกแบบสำหรับการออกแบบแอปพลิเคชันที่มีความสามารถในการเพิ่มเขตข้อมูลที่กำหนดเองไปยังวัตถุข้อมูลหรือสำหรับการสร้างคำจำกัดความที่กำหนดเองของวัตถุ ตัวอย่างเช่นฉันกำลังคิดเกี่ยวกับผลิตภัณฑ์เช่น SalesForce ซึ่งคุณสามารถมีข้อมูลประเภทของคุณกรอบงานเช่น Expression Engine และวิธีการจัดการช่องทางและกลุ่มเขตข้อมูลช่อง(ตัวอย่าง)หรือวิธี CMSes Like wordpress มีความสามารถในการ เพิ่มฟิลด์ลงในประเภทโพสต์ที่กำหนดเอง

4
ปัจจุบันระบบควบคุมเวอร์ชันแจกจ่ายอยู่ที่ไหนในรอบ hype ของ Gartner [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา แก้ไข : จากการ downvoting ล่าสุด (+ 8 / -6 ณ จุดนี้) มันชัดเจนสำหรับฉันว่าวงจรชีวิตของ Gartner เป็นตัวชี้วัดเอนเอียงจากมุมมองของโปรแกรมเมอร์ นี่คือสิ่งที่เป็นส่วนหนึ่งของบทความที่ฉันจะนำเสนอต่อฝ่ายบริหารและประเภทการจัดการเป็นส่วนหนึ่งของผู้ชมของการ์ทเนอร์ การเปิดรับ DVCS & ความกระตือรือร้น (ซึ่ง "ถือว่า" ถือว่าขัดต่อความเป็นจริงหรืออย่างน้อยก็ถูกโจมตี ) ให้คิดถึงคำถามต่อไปนี้เมื่ออ่านคำถามนี้: "ฉันจะใช้วงจร hype ของ Gartner อย่างไรเพื่อโน้มน้าวให้ฝ่ายบริหารจัดการว่า DVCS นั้นพร้อมแล้ว (หรือ พร้อมแล้ว) สำหรับเราและมันไม่ใช่แค่โฆษณา " เพียงแค่ถามว่า DVCS นั้นเป็น hype จะไม่สร้างสรรค์หรือไม่วัฏจักรของ hype ของ Gartner …
12 research  dvcs  cvcs 

5
การบรรทุกเกินพิกัดเป็นตัวอย่างของหลักการเปิด / ปิดหรือไม่
Wikipedia พูดว่า "เอนทิตีของซอฟต์แวร์ (คลาส, โมดูล, ฟังก์ชั่น, ฯลฯ ) ควรเปิดเพื่อขยาย แต่ปิดเพื่อแก้ไข" ฟังก์ชั่นคำดึงดูดสายตาของฉันและตอนนี้ฉันสงสัยว่าเราสามารถสันนิษฐานได้ว่าการสร้างเกินพิกัดสำหรับวิธีการสามารถถือได้ว่าเป็นตัวอย่างของหลักการเปิด / ปิดหรือไม่? ให้ฉันอธิบายตัวอย่าง พิจารณาว่าคุณมีวิธีการในชั้นบริการซึ่งใช้ในสถานที่เกือบ 1,000 แห่ง วิธีการได้รับ userId และกำหนดว่าผู้ใช้เป็นผู้ดูแลหรือไม่: bool IsAdmin(userId) ตอนนี้ให้พิจารณาว่ามีบางสิ่งที่จำเป็นในการพิจารณาว่าผู้ใช้เป็นผู้ดูแลระบบหรือไม่โดยยึดตามชื่อผู้ใช้ไม่ใช่ชื่อผู้ใช้ หากเราเปลี่ยนลายเซ็นของวิธีการที่กล่าวถึงข้างต้นแสดงว่าเรามีรหัสที่ไม่สมบูรณ์ใน 1000 แห่ง (ฟังก์ชั่นควรปิดเพื่อแก้ไข) ดังนั้นเราสามารถสร้างโอเวอร์โหลดเพื่อรับชื่อผู้ใช้ค้นหา userId ตามชื่อผู้ใช้และวิธีการดั้งเดิม: public bool IsAdmin(string username) { int userId = UserManager.GetUser(username).Id; return IsAdmin(userId); } ด้วยวิธีนี้เราได้ขยายฟังก์ชั่นของเราผ่านการสร้างโอเวอร์โหลด (ฟังก์ชั่นควรจะเปิดเพื่อขยาย) มันเป็นตัวอย่างหลักการเปิด / ปิดหรือไม่?

4
ต้นไม้จัดโดยโครงสร้าง“ firstchild, nextsibling” หรือไม่? ถ้าไม่ทำไมล่ะ
โดยปกติแล้วโครงสร้างข้อมูลแบบต้นไม้จะถูกจัดระเบียบในลักษณะที่แต่ละโหนดมีตัวชี้ไปยังลูกทั้งหมด +-----------------------------------------+ | root | | child1 child2 child3 | +--+------------------+----------------+--+ | | | +---------------+ +---------------+ +---------------+ | node1 | | node2 | | node3 | | child1 child2 | | child1 child2 | | child1 child2 | +--+---------+--+ +--+---------+--+ +--+---------+--+ | | | | | | มันดูเป็นธรรมชาติ แต่มันมาพร้อมกับปัญหาบางอย่าง ตัวอย่างเช่นเมื่อจำนวนโหนดย่อยแตกต่างกันไปคุณจำเป็นต้องมีสิ่งต่าง …

3
วิธีการ TDD ว่าผลลัพธ์ที่ถูกต้องจะถูกส่งกลับ
ฉันเริ่มโครงการใหม่และพยายามอย่างหนักที่จะใช้ TDD เพื่อผลักดันการออกแบบ ฉันผลักดันมาหลายปีและในที่สุดก็ได้รับการอนุมัติให้ใช้เวลาเพิ่มในโครงการนี้เพื่อใช้ในขณะที่ฉันเรียนรู้วิธีการทำอย่างถูกต้อง นี่คือโมดูลใหม่เพื่อผูกเข้ากับระบบที่มีอยู่ ขณะนี้การเข้าถึงข้อมูลทั้งหมดเกิดขึ้นผ่าน webservices ซึ่งส่วนใหญ่เป็นเพียงกระดาษห่อหุ้มบาง ๆ ผ่านขั้นตอนการจัดเก็บฐานข้อมูล ข้อกำหนดหนึ่งคือสำหรับร้านค้าที่ระบุฉันส่งคืนใบสั่งซื้อทั้งหมดที่ถือว่าใช้ได้สำหรับแอปพลิเคชันนี้ ใบสั่งซื้อถือว่าสมบูรณ์ถ้าวันที่จัดส่งตรงกับช่วงที่กำหนดจากวันที่เปิดร้านค้า (สำหรับร้านค้าใหม่) ตอนนี้ฉันไม่สามารถใส่ตรรกะนี้ลงในรหัสแอปพลิเคชันได้เนื่องจากฉันจะไม่นำเงินคืน PO นับล้านเพื่อรับโหลที่ใช้กับสามารถนำไปใช้กับร้านนี้ได้เนื่องจากข้อ จำกัด ข้างต้น ฉันคิดว่าฉันสามารถส่งช่วงวันที่ไปยัง GetValidPOs proc และใช้ค่าเหล่านั้นเพื่อส่งคืน PO ที่ถูกต้อง แต่ถ้าเราเพิ่มข้อกำหนดอื่นให้กับสิ่งที่ถือว่าเป็น PO ที่ถูกต้อง และฉันจะทดสอบสิ่งนี้และตรวจสอบว่ามันยังทำงานได้อย่างไร เราไม่ได้ใช้ ORM และไม่น่าจะเกิดขึ้น และฉันไม่สามารถเรียก DB ในการทดสอบของฉันได้ ผมติดอยู่. ความคิดอื่นของฉันคือมี mocks บางตัวที่ส่งคืนข้อมูลที่ถูกต้องส่วนอื่น ๆ ที่ส่งคืนข้อมูลที่ไม่ดีและมีที่เก็บข้อมูลในตัวเครื่องเกิดข้อยกเว้นหากข้อมูลไม่ดีเกิดขึ้นและทดสอบว่าข้อผิดพลาดเกิดขึ้นหาก GetValidPOs proc ล้อเลียนที่ใช้ในการทดสอบ) มันสมเหตุสมผลหรือไม่ หรือมีวิธีที่ดีกว่า UPDATE: ฉันสามารถใช้ภาษา EF ได้ ตอนนี้ฉันเพียงแค่ต้องคิดหาวิธีการใช้และทำให้มันทดสอบได้ในขณะที่ยังสามารถพึ่งพาขั้นตอนการจัดเก็บและความยากลำบากในการมีข้อมูลกระจัดกระจายไปทั่วฐานข้อมูลหลายแห่ง

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

6
แนวทางสถาปัตยกรรมสำหรับ“ หน้าเว็บแอปเดียว”
ฉันจะเริ่มโครงการด้านข้างเพื่อสร้างแอปพลิเคชันเว็บ "หน้าเดียว" แอปพลิเคชันต้องเป็นแบบเรียลไทม์ส่งการอัปเดตไปยังลูกค้าเมื่อมีการเปลี่ยนแปลงเกิดขึ้น มีแหล่งข้อมูลที่ดีสำหรับแนวทางการปฏิบัติที่ดีที่สุดหรือไม่สถาปัตยกรรมสำหรับการใช้งานประเภทนี้ แหล่งข้อมูลที่ดีที่สุดที่ฉันเคยพบคือบทความเกี่ยวกับสถาปัตยกรรม trello ที่นี่: http://blog.fogcreek.com/the-trello-tech-stack/ สำหรับฉันแล้วสถาปัตยกรรมนี้ถึงแม้ว่าจะเซ็กซี่มาก แต่ก็อาจจะเกินความต้องการเฉพาะของฉัน - แม้ว่าฉันจะมีข้อกำหนดที่คล้ายกัน ฉันสงสัยว่าฉันต้องรำคาญกับ sub / pub ที่ฝั่งเซิร์ฟเวอร์ฉันไม่เพียงแค่ผลักดันการอัปเดตจากเซิร์ฟเวอร์เมื่อมีบางอย่างเกิดขึ้น (เช่นเมื่อไคลเอ็นต์ส่งการอัปเดตไปยังเซิร์ฟเวอร์เขียนอัปเดตไปยัง db จากนั้นส่งการอัปเดตไปยังลูกค้า) เป็นเรื่องที่ชาญฉลาดฉันอาจต้องการสร้างสิ่งนี้ใน Node.JS หรืออาจเป็น Ruby แม้ว่าแนวทางสถาปัตยกรรมควรมีผลบังคับใช้กับเทคโนโลยีเซิร์ฟเวอร์พื้นฐานใด ๆ

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

2
Webkit เป็น GUI ใน. Net / Mono
ฉันต้องการสร้างแอปพลิเคชันข้ามแพลตฟอร์มซึ่งจะมีเว็บไซต์ที่แอปพลิเคชันเดสก์ท็อป (Windows, iOS, Linux) จะพูดคุยกับเซิร์ฟเวอร์และทำให้ข้อมูลผู้ใช้ตรงกัน จนถึงตัวเลือกที่ฉันเห็นคือ: เขียน GUI พื้นฐานสำหรับแต่ละ 3 ระบบปฏิบัติการดังนั้นฉันจะมีรหัสฐาน 3 GUI (และระบบแบ็กเอนด์เดียว) ใช้บางอย่างเช่น GTK ดังนั้นฉันจึงสามารถใช้ระบบเดียวได้พร้อมการสนับสนุนในแพลตฟอร์มที่กล่าวถึงทั้งหมด แต่ข้อที่สามที่ฉันไม่สามารถหาข้อมูลได้มากนัก (บางทีฉันไม่ได้ค้นหาคำศัพท์ที่เหมาะสมเนื่องจากฉันยังใหม่กับ C # และ. Net) คือมีหน้าต่างที่มีอินสแตนซ์ WebKit ฝังอยู่ในตัว ซึ่งจะทำให้ฉันสามารถใช้ระบบ GUI เดียวกับที่ฉันจะใช้สำหรับเว็บไซต์ ซึ่งจะทำให้แอปไคลเอนต์และเว็บไซต์ดูใกล้เคียงกันมากที่สุดเพื่อให้ผู้ใช้คุ้นเคยกับอินเทอร์เฟซ ตัวเลือกสุดท้ายนี้มีความน่าเชื่อถือของ WebKit หรือไม่ ฉันรู้จัก JavaScript / HTML ดีแล้วและถ้าฉันสามารถใช้ความรู้นั้นเพื่อสร้างอินเทอร์เฟซได้ นอกจากนี้ยังเป็นวิธีที่ยอดเยี่ยมในการอนุญาตให้ผู้ใช้ปรับแต่งส่วนต่อประสานกับปลั๊กอินและพวกเขาสามารถซิงค์การตั้งค่า UI ใด ๆ จากท้องถิ่นกับเว็บ
12 c#  .net  javascript  gui  mono 

14
วิธีรับสมาชิกในทีมใหม่ให้ทันสมัยกับโครงการได้อย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา เรากำลังจะจ้างวิศวกรใหม่ 1-2 คนสำหรับทีมซอฟต์แวร์ (ประกอบด้วยนักพัฒนา 3 คน, 1 ผู้ทดสอบ) ขั้นตอนในการรวมเข้ากับทีมคืออะไร? ความคิดของฉันคือ: อ่านเอกสาร (มาตรฐานการเข้ารหัส, เอกสารในวิธีการพัฒนาที่เราใช้) ให้พวกเขาอ่านรหัสที่มีอยู่ มอบหมายงานง่ายๆให้พวกเขา ในตอนท้ายทำให้พวกเขารับผิดชอบส่วนของรหัส เราจะทำอะไรได้อีก โครงการอยู่ในภาคการแพทย์ (ระบบอัลตร้าซาวด์) และจะไปแล้ว 5 ปี เรามีการเผยแพร่เป็นประจำทุกปีและเรากำลังจะเสร็จสิ้นการปล่อยหนึ่งครั้งเมื่อเราต้องการเพิ่มวิศวกร 1-2 คน โครงการอยู่ในขั้นตอนการบำรุงรักษา (การเปลี่ยนรหัสดั้งเดิมรวมถึงการเพิ่มคุณสมบัติใหม่) ทุกอย่างเป็นไปตามกำหนดเวลา (มากหรือน้อย)
12 team  integration 

6
ความรับผิดชอบของใครเป็นผู้แก้ไขบั๊ก?
สถานการณ์ที่เกิดขึ้นหลายครั้งในโครงการโอเพ่นซอร์สจะเป็นดังนี้: ฉันสังเกตเห็นข้อผิดพลาดในการปรับใช้ของเราและหาตัวแก้ไขการแฮ็กข้อมูลอย่างรวดเร็ว (ตัวอย่างเช่นเพียงแสดงความคิดเห็นรหัสที่เราไม่ต้องการ) ฉันใช้ความพยายามพิเศษเล็กน้อยเพื่อหาข้อผิดพลาดจริง ๆ มากับชุดข้อมูลแก้ไขและส่งผ่านคำขอ Git pull หรือคล้ายกัน คำขอดึงของฉันถูกปฏิเสธ บางทีแพทช์นั้นไม่สมบูรณ์ (เช่นรวมบรรทัดที่ไม่ควรมี) บางทีมันอาจเป็นการละเมิดรูปแบบการเขียนโค้ด หรือบางทีฉันอาจทำอะไรผิดพลาดใน Git - คำขอดึงควรจะถูกลดระดับหรือบางสิ่งบางอย่าง ผู้ดูแลให้ข้อเสนอแนะเกี่ยวกับวิธีการปรับปรุงโปรแกรมแก้ไขและขอให้ฉันส่งใหม่ เมื่อมาถึงจุดนี้ฉันสับสนเกี่ยวกับวิธีการที่ฉันควรดำเนินการต่อไป เท่าที่ฉันกังวลฉันไม่มีปัญหา: ฉันแก้ไขได้ในขั้นตอนที่ 1 ฉันได้รายงานปัญหาแล้วฉันยังทำตามขั้นตอนเพื่อแก้ไขให้ผู้อื่น แต่ฉันไม่รู้สึกว่ามันเป็นคำขอแบบ "ดึง" ของฉันดังนั้นฉันจึงไม่รู้สึกว่าต้องรับผิดชอบในการปรับปรุงแพตช์ให้ฉัน สถานการณ์เฉพาะอย่างหนึ่งที่ทำให้ฉันโกรธคือหลังจากการหารือเกี่ยวกับความล้มเหลวของแพทช์ของฉันเราได้บรรลุข้อตกลงในรายชื่อผู้รับจดหมายเกี่ยวกับสิ่งที่แพตช์ที่ถูกต้องจะเป็นอย่างไร (เช่นวิธีการทำงาน จากนั้นก็ยังสันนิษฐานว่าเป็นความรับผิดชอบของฉันในการสร้างและส่งแพทช์ มีมารยาทมาตรฐานในสถานการณ์เหล่านี้หรือไม่? พวกเขาจะแก้ไขได้อย่างไร? ปฏิกิริยาของฉันผิดปกติหรือไม่ คุณคาดหวังว่าจะได้รับการแก้ไขข้อบกพร่องนานแค่ไหน? (หมายเหตุเมื่อฉันพูดว่า "โครงการโอเพ่นซอร์ส" บางโครงการมีขนาดเล็กมาก แต่อาจไม่ใช่งานอดิเรก - เป็นเพียงโครงการซอฟต์แวร์ขนาดเล็กที่ใช้กับองค์กรหลายแห่งซึ่งมอบหมายให้นักพัฒนาใช้ทรัพยากรเพื่อทำงานกับพวกเขาในกรณีที่คำตอบชัดเจน คือ "แก้ไขแพทช์และส่งใหม่" เข้าใจว่าฉันมีความรับผิดชอบต่อนายจ้างของฉันในการทำงานกับสิ่งที่เป็นประโยชน์ต่อพวกเขาใช้เวลาแก้ไขข้อผิดพลาดที่ไม่ส่งผลกระทบต่อเราจะผิด ... )

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

3
ข้อผิดพลาดหรือข้อผิดพลาดที่แตกต่างกันเป็นอาร์กิวเมนต์แรกหรือไม่
เรา (และห้องสนทนา JS SO) ได้พูดคุยกับ @rlemon เมื่อหลายวันก่อนเกี่ยวกับห้องสมุดLittle-XHRของเขาเกี่ยวกับการจัดการข้อผิดพลาด โดยทั่วไปเราต้องการตัดสินใจว่าควรใช้รูปแบบการจัดการข้อผิดพลาดใด: xhr.get({ // Some parameters, and then success: function(data) {}, failure: function(data) {} }) หรือ: xhr.get({ // Some parameters, and then callback: function(err, data) {} }) หนึ่งจะเหมือน jQuery มากขึ้นในขณะที่อื่น ๆ ที่เป็นเหมือนโหนด บางคนบอกว่ารูปแบบแรกทำให้คุณคิดมากขึ้นเกี่ยวกับการจัดการข้อผิดพลาด ฉันคิดว่าตรงกันข้ามเพราะคุณอาจลืมฟังก์ชั่นการโทรกลับอื่น ๆ ในขณะที่การโต้แย้งมักจะอยู่ในรูปแบบที่สอง ความเห็น / ข้อได้เปรียบ / ข้อเสียเปรียบเกี่ยวกับทั้งสองรูปแบบเหล่านี้หรือไม่

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