ฉันควรทำตามระเบียบวิธีซอฟแวร์ใดเมื่อฉันทำการวิจัย?


9

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

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

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

วิธีการซอฟต์แวร์ใดที่เหมาะที่สุดในการวิจัย

โดยทั่วไปฉันถามว่าจะรับประกันคุณภาพและความคืบหน้าของเวลาได้อย่างไรรวมถึงรักษาความจำเพาะของการวิจัย

ตัวอย่างการทำงานของฉัน:

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


7
สิ่งที่คุณดงในตอนนี้ก็ดี ไม่มีวิธีการใดที่จะหยุดความผิดพลาดของคุณได้! เพียงตรวจสอบให้แน่ใจว่าคุณใช้ระบบควบคุมเวอร์ชันและจัดระเบียบโค้ดฐานของคุณได้ดี
gbjbaanb

ไม่มีวิธีใดที่จะหยุดความผิดพลาดได้ แต่บางคนจะจับความผิดพลาดได้เร็วกว่านี้! ออกแบบตามสัญญาหรือตามสัญญาออกแบบ
Frank Hileman

คุณช่วยอธิบายประโยคสุดท้ายของคุณให้ละเอียดหน่อยได้ไหม? ฉันไม่ได้รับมันเลย
llrs

บางทีen.wikipedia.org/wiki/Test-driven_developmentด้วยกรอบการทดสอบอัตโนมัติบางประเภท - การทดสอบขนาดเล็กมีประโยชน์สำหรับการจับข้อบกพร่องและการทดสอบขนาดใหญ่อาจทำแผนที่ (ประมาณ) บนสมมติฐานของคุณ
david.libremone

1
@Llopis นึกคิดคุณเขียนการทดสอบก่อนมันล้มเหลวแล้วเขียนรหัสการทดสอบผ่านแล้วคุณยอมรับรหัสของคุณ - หากคุณพบข้อผิดพลาดในภายหลังบรรทัดคุณเขียนการทดสอบที่จะจับข้อผิดพลาดมันล้มเหลว แก้ไขรหัสผ่านการทดสอบจากนั้นคุณยอมรับรหัส - คุณไม่สามารถละทิ้งทุกสิ่งได้ แต่คุณสามารถมั่นใจได้ว่าสิ่งเดียวกันจะไม่เกิดขึ้นอีก
david.libremone

คำตอบ:


6

สิ่งที่จำเป็นต้องใช้อาจไม่ใช่วิธีการซอฟต์แวร์ แต่เป็นการเปลี่ยนแปลงทางการเมืองในสถาบันการศึกษาที่แก้ไขปัญหาการขาดการรับรู้บทบาทที่ได้รับจากการพัฒนาซอฟต์แวร์ในสาขาวิทยาศาสตร์

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

นอกจากนี้ยังมีตัวชี้ข้อมูลสำหรับผู้ที่สนใจวิธีการพัฒนาซอฟต์แวร์

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


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


ที่ทำงานของคุณมีสิ่งที่ขาดหายไปและสิ่งที่คุณสามารถทำได้

สิ่งที่ขาดหายไป:

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

กล่าวโดยสรุปวัฒนธรรมโดยรวมคือผู้คนที่เกี่ยวข้องไม่สนใจ ... คุณเดาได้ว่า ... การใช้โปรแกรมคอมพิวเตอร์ในการวิจัยทางวิทยาศาสตร์อย่างมีมโนธรรม


สิ่งที่คุณสามารถทำได้:

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

สำหรับนักพัฒนาซอฟต์แวร์มืออาชีพสามารถดูแนวทางในลักษณะนี้ได้ใน:

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


ผู้ที่สนใจต่อการพัฒนาอย่างยั่งยืนของ Software ขอบคุณ! ฉันจะเขียนแนวทางของตัวเองเกี่ยวกับรหัสและการจัดการข้อมูลฉันมีหัวหน้างาน แต่เขาดูเหมือนจะไม่มี "ความรู้เกี่ยวกับเครื่องมือ" ฉันใช้ git แต่ฉันจะพยายามทำตามคำแนะนำของคุณในเอกสาร
llrs

ฮ่า ๆ ๆ wiki ... ที่ได้ลองไปซักสองสามครั้งฉันจะแนะนำdokuwiki.org/dokuwiki #ที่นี่ ง่ายต่อการติดตั้งและเก็บเอกสารเป็นไฟล์ข้อความแทนที่จะอยู่ในฐานข้อมูล ฉันพบว่ามันเป็นความสมดุลที่ดีที่สุดระหว่างความง่ายในการตั้งค่าความง่ายในการใช้งานและความยั่งยืนของข้อมูล
Newtopian

ปัญหาในวิทยาศาสตร์คอมพิวเตอร์ช่วยที่ @rwong อธิบายอยู่ในสถาบันส่วนใหญ่ที่ฉันได้ทำงาน (ฟิสิกส์และดาราศาสตร์)
steffen

2

อย่ากังวลกับวิธีการมากนัก แต่ลองและมุ่งเน้นไปที่สิ่งที่คุณต้องติดตามความต้องการของคุณสำหรับการพัฒนาซอฟต์แวร์เอง

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

ความแม่นยำของอัลกอริทึม

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

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

รุ่น

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

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

สร้างอัตโนมัติ

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

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

การแยกสิ่งแวดล้อม

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

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


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

คุณสามารถทำได้แม้ว่าฉันเคยทำการทดสอบกับการพึ่งพาจากภายนอกมาก่อน แต่มันก็ไม่ค่อยเกิดขึ้น ... มันเป็นรหัสของคุณเองที่คุณควรทำการทดสอบ แต่คุณใช้ห้องสมุดอย่างถูกต้องหรือไม่? มันไม่สามารถ redictably (รหัสของคุณ)? ฯลฯ
Newtopian

0
  1. คุณสามารถใช้ R ได้ไหม? นั่นคือสิ่งที่มันมีไว้เพื่อ

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

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


1
ฉันใช้ R หวังว่าโค้ดของฉันนั้นง่ายพอที่จะตรวจพบจุดบกพร่องที่ฉันสามารถเขียนได้และความผิดพลาดใด ๆ ที่ฉันสามารถทำได้ ฉันทำตามสไตล์การจัดรูปแบบโค้ดของ Google R และฉันคิดว่าข้อคิดเห็นมีประโยชน์ในการอธิบายว่าทำไมฉันจึงต้องตัดสินใจในโค้ดดังกล่าว
llrs

@Llopis: งั้นฉันจะบอกว่าคุณอยู่ในเส้นทางที่ถูกต้อง
Mike Dunlavey

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

1
@rwong อันที่จริงตอนนี้ฉันได้รับอนุญาตให้แบ่งปันรหัสการวิจัยของฉันดังนั้นใครก็ตามที่สามารถตรวจสอบได้ใน github
llrs

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