นักพัฒนาควรคาดว่าจะรวบรวมห้องสมุดภายในก่อนที่โปรแกรมจริง?


10

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

นักพัฒนาอาวุโสมีข้อโต้แย้งที่ถูกต้องหรือไม่? หรือผู้พัฒนาต้องการที่จะอ่านซอร์สโค้ดไลบรารี่ที่รันกับปรัชญาพื้นฐานของการห่อหุ้มและแม้แต่การมีไลบรารี่ในตอนแรก?

คำตอบ:


15

อาร์กิวเมนต์ของนักพัฒนาอาวุโสคนนี้ไม่สมเหตุสมผลกับฉัน

พวกเขาต้องการเพิ่มค่าใช้จ่ายในการดึงและรวบรวมไลบรารีภายในอย่างต่อเนื่องเพื่อให้ devs สามารถอ่านซอร์สโค้ดเป็นครั้งคราวได้หรือไม่ นั่นจะทำให้เสียเวลามากกว่าที่มี devs ไปดูซอร์สโค้ดเฉพาะเมื่อพวกเขาต้องการตรวจสอบว่ามีฟีเจอร์หรือไม่

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

ฉันไม่เห็นว่าทำไมซอร์สโค้ดไม่สามารถใช้งานได้กับนักพัฒนาโดยไม่บังคับให้พวกเขาเป็นส่วนหนึ่งของบิลด์ปกติ


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

1
ฉันเห็นด้วยบางส่วนเท่านั้น IMHO มันขึ้นอยู่กับนโยบายการพัฒนาสำหรับ lib หาก lib อยู่ภายใต้การพัฒนาของทีมที่สองคุณจะถูกต้อง 100% หาก lib สามารถเปลี่ยนแปลงได้โดยทุกคนในทีมปัจจุบันและหากนโยบายคือ lib ที่ควรเก็บไว้ข้างหลังเข้ากันไม่ว่าด้วยวิธีใดก็ตามการใช้เวอร์ชันล่าสุดเสมอจะช่วยระบุปัญหาการรวมได้เร็วขึ้นซึ่งเป็นสิ่งที่ดี
Doc Brown

หมอบราวน์ - ฉันเห็นด้วย คำตอบของฉันอยู่บนพื้นฐานของข้อเท็จจริงที่ว่าคำถามนั้นถูกใช้เป็นวลีซึ่งเหตุผลเดียวที่ต้องมีการรวบรวม & รวบรวมเพื่อให้นักพัฒนาสามารถอ่านซอร์สโค้ดได้
17 ของ 26

4

ข้อเสนอแนะคือ

เราสามารถประหยัดเวลาโดยนักพัฒนาฝั่งไคลเอ็นต์ที่อ่านซอร์สโค้ดของไลบรารีเพื่อตรวจสอบว่ามีฟังก์ชันการทำงานที่จำเป็นหรือไม่

คุณสามารถเสนอแนะทางเลือกอื่น

เราสามารถประหยัดเวลาโดยมีคนทำเอกสารในห้องสมุดเพื่อระบุว่ามีฟังก์ชั่นอะไรบ้าง


นั่นเป็นความพยายามและข้อโต้แย้งคือนักพัฒนาห้องสมุดไม่ว่างเพิ่มคุณสมบัติใหม่
rjzii

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

3

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

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


1

ฉันเคยทำงานให้กับ บริษัท ซอฟต์แวร์ขนาดใหญ่ที่มักจะ "dogfooding" ซอฟต์แวร์ของตัวเองด้วยระบบธุรกิจภายใน

พวกเขาเห็นว่านี่เป็นการทดสอบในระดับอื่น

ที่ฉันเห็นด้วยกับ บริษัท เป็นสิ่งที่ดี

ฉันคิดว่าการบังคับให้คุณดาวน์โหลดและรวบรวมรุ่นล่าสุดนั้นเป็นขั้นตอนที่ไกลเกินไปเว้นแต่ขั้นตอนการรวบรวมเป็นส่วนสำคัญของ บริษัท ของคุณที่เสนอขายหรือแม้แต่จ้างห้องสมุด


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

1

ในขณะที่การมีซอร์สโค้ดพร้อมใช้งานอาจเป็นประโยชน์ถ้าคุณมีเอเจนต์การบิลด์ CI สร้างการมอนิเตอร์ที่เก็บมันจะเหมาะสมกว่าที่จะให้เอเจนต์นั้นคอมไพล์ไลบรารีนี้และคัดลอกลงในโปรเจ็กต์ที่ต้องพึ่งพาเป็นภายนอก รันสองขั้นตอนการรวบรวมที่แตกต่างกันเมื่อสร้างสำเนา

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


1

เนื่องจากผู้คนจำนวนมากตอบว่ามันไม่สมเหตุสมผลเลยที่จะให้ทุกคนสร้างห้องสมุดภายในขึ้นมาฉันจะเสนอมุมมองตรงข้ามซึ่งอาจแสดงเหตุผล:

  1. คุณใช้ห้องสมุดเป็นจำนวนมากและไม่มีเอกสารประกอบ ดังนั้นทุกคนควรมีแหล่งอ้างอิง หากนี่เป็นห้องสมุดที่มีการใช้งานบ่อยมากการมีการอ้างอิงที่มีประโยชน์อาจมีประโยชน์

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

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

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


1

การทดสอบแบบนี้น่าจะดีกว่าแน่นอน สิ่งที่เป็น แต่มันควรจะทำโดยการทดสอบกับไม่ได้โดยนักพัฒนา ในแง่นั้นมันไม่ใช่งานของคุณหรือนักพัฒนาห้องสมุด

จากสิ่งที่คุณอธิบายดูเหมือนว่าไม่มีผู้ทดสอบในโครงการ - ในกรณีนี้นั่นเป็นปัญหาการจัดการและค่อนข้างจริงจัง

... ประหยัดเวลาเนื่องจากสามารถอ่านซอร์สโค้ดของห้องสมุดเพื่อตรวจสอบว่ามีฟังก์ชั่นที่จำเป็นหรือไม่

เหตุผลค่อนข้างง่อย เมื่อไลบรารี่เวอร์ชันล่าสุดไม่สามารถคอมไพล์กับโปรเจ็กต์เวอร์ชันล่าสุดอาจมีหลายสาเหตุด้วยกัน - การเจาะเข้าไปในซอร์สโค้ด lib อาจเสียเวลา

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

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


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

เมื่อมีการเปลี่ยนแปลงกับโครงการหรือไลบรารีทุกครั้งตรวจสอบให้แน่ใจว่าบิลด์นั้นสำเร็จแล้ว

ขั้นตอนในการดำเนินการต่อจากกิจกรรมทั่วไปของ QA: ชี้แจงรายละเอียดความต้องการออกแบบสถานการณ์การทดสอบที่เป็นทางการเจรจาต่อรองเกี่ยวกับวิธีจัดการกับความล้มเหลวในการทดสอบ

  • จากมุมมองของSQAนี่เป็นงานประจำของการออกแบบติดตั้งและบำรุงรักษาขั้นตอนการทดสอบการถดถอยอย่างง่ายซึ่งอาจเป็นไปโดยอัตโนมัติสูง - จนถึงจุดที่กิจกรรมด้วยตนเองเท่านั้นที่จะสร้างและบำรุงรักษาตั๋วในการติดตามปัญหาและการตรวจสอบ แก้ไข

0

สิ่งที่ Sr Dev แนะนำนั้นทำให้ฉันรู้สึกดีที่สุด เป็นการดีที่สามารถเรียกดูแหล่งข้อมูลได้ แต่มีวิธีที่ดีกว่าในการทำเช่นนั้น

คุณใช้คลังเก็บสิ่งประดิษฐ์ใดอยู่ คุณควรจะสามารถปรับใช้ jar ต้นทางเพื่อให้แต่ละเวอร์ชันถ่ายทอดสดถัดจากไลบรารีที่คอมไพล์แล้ว IDEs ส่วนใหญ่จะอนุญาตให้คุณแนบไฟล์นี้กับไลบรารีที่คอมไพล์เพื่อเรียกดูแหล่งที่มา Eclipse กับปลั๊กอิน Maven จะทำสิ่งนี้โดยอัตโนมัติ

หากคุณต้องการรหัสล่าสุดคุณสามารถปรับใช้สแนปชอตของเวอร์ชันได้


Maven กำลังถูกใช้เป็นที่เก็บข้อมูลและโครงการส่วนใหญ่ใช้อย่างนั้นหรือ Ivy สำหรับการจัดการการพึ่งพา
rjzii

@ RobZ คุณไม่ได้ใช้ repo สิ่งประดิษฐ์กลางเช่น Artifactory หรือ Nexus?
smp7d

เรากำลังใช้ Archiva
rjzii

@RobZ ตกลงจากนั้นคุณสามารถตั้งค่า poms ของคุณเพื่อปรับใช้ src jar และแนบไปกับไลบรารี่ใน IDE ถ้ามันไม่ทำโดยอัตโนมัติ ดูmaven.apache.org/plugins/maven-source-plugin
smp7d

0

สิ่งนี้ควรเกิดขึ้นในสคริปต์การสร้างของคุณ:

  1. ตรวจสอบว่ามีเวอร์ชั่นใหม่หรือไม่ ข้าม 2 เป็นอย่างอื่น
  2. ดาวน์โหลดและรวบรวมและเรียกใช้เครื่องมือใด ๆ ที่คุณต้องสร้างการอ้างอิง API จากซอร์สโค้ดในเครื่อง แสดงบันทึกการเปลี่ยนแปลง
  3. สร้างแอปของคุณ

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


จากมุมมองของเซิร์ฟเวอร์รวมอย่างต่อเนื่องไลบรารีเองไม่เล็กและใช้เวลาสองสามนาทีในการสร้าง
rjzii

@RobZ: งั้นเหรอ? ตราบใดที่ห้องสมุดไม่เปลี่ยนแปลงคุณไม่จำเป็นต้องสร้างใหม่ใช่ไหม
back2dos

ตอนนี้มันยังอยู่ระหว่างการพัฒนา
rjzii

@RobZ: ใช่นั่นอาจเป็นเช่นนั้น แต่ถ้าทีมห้องสมุดกำลังแท็กเวอร์ชันทุก ๆ 10 นาทีแสดงว่าพวกเขาทำผิด การรวมอย่างต่อเนื่องเป็นสิ่งที่ดี แต่การเปิดตัวควรประกอบด้วยการทดสอบการใช้งานบางประเภท ในกรณีของห้องสมุดนั่นเป็นการตรวจสอบโค้ด สิ่งนี้ไม่สามารถเป็นแบบอัตโนมัติได้ อย่างไรก็ตามกระบวนการที่คุณได้รับเวอร์ชันที่ผ่านการตรวจสอบและติดแท็กครั้งล่าสุดนั้นอาจเป็นไปโดยอัตโนมัติและหากความเห็นนั้นทำอย่างถูกต้องและการติดแท็กนั้นมีความรับผิดชอบฉันก็จะไม่เห็นปัญหา แต่จริงๆแล้วเป็นการปรับปรุง
back2dos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.