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

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

4
เหตุใด“ เกมแห่งชีวิต” ของ Conway จึงถูกใช้เพื่อการใช้รหัส
Code Retreat เป็นกิจกรรมการฝึกอบรมตลอดทั้งวันที่มุ่งเน้นไปที่พื้นฐานของการพัฒนาซอฟต์แวร์ มีวันล่าถอยรหัส "ทั่วโลก" ที่กำลังจะมาถึงและฉันรอคอยมันอยู่ ที่กล่าวว่าฉันเคยเป็นหนึ่งก่อนและต้องบอกว่ามีจำนวนมากของความโกลาหล ... ซึ่งเป็นเรื่องปกติ สิ่งหนึ่งที่ฉันยังไม่เข้าใจคือทำไม "เกมแห่งชีวิต" เป็นปัญหาที่ดีสำหรับ TDD และสิ่งที่ดีและไม่ดีสำหรับ TDD สำหรับมันรู้สึก ตระหนักว่านี่เป็นคำถามที่เปิดกว้างดังนั้นอย่าลังเลที่จะแสดงความคิดเห็น
15 tdd 

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

10
ใครควรฝึกอบรมโปรแกรมเมอร์ใหม่ โปรแกรมเมอร์รุ่นพี่หรือรุ่นพี่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ในทีมของฉันเรามักจะต้องการโปรแกรมเมอร์อาวุโสที่สุดในการฝึกอบรม / ให้คำปรึกษาแก่โปรแกรมเมอร์รุ่นใหม่ อย่างไรก็ตามโปรแกรมเมอร์อาวุโสคนเดียวกันนี้เป็นคนที่ทำงานจริงและสำคัญจำนวนมาก ฉันพยายามที่จะโต้แย้งกับผู้จัดการของฉันว่ามันมีเหตุผลที่จะมีโปรแกรมเมอร์รุ่นเยาว์ที่แสดงความสามารถสูงใช้โปรแกรมเมอร์ใหม่ภายใต้ปีกของพวกเขา ก่อนอื่นมันจะเพิ่มนักพัฒนาอาวุโสให้ทำงานในโครงการที่สำคัญกว่าเดิม (ไม่ใช่การให้คำปรึกษานั้นไม่สำคัญ) ต่อไปก็จะทำให้โปรแกรมเมอร์ผู้น้อยรู้สึกภาคภูมิใจในงานที่พวกเขาจะถูกมองว่าเป็นความรับผิดชอบและพวกเขาอาจเรียนรู้บางอย่างในการสอน ในที่สุดมันจะประหยัดเงินของ บริษัท เนื่องจากผู้พัฒนาระดับสูงต้องเสียค่าใช้จ่ายมากกว่ารุ่นน้อง เจ้านายของฉันล้มเหลวในการชักชวนเนื่องจากนี่เป็นวิธีการทำงานกับทีมนี้ตั้งแต่เริ่มต้นเวลา สมมติว่ามีการตัดสินใจว่าการฝึกอบรม / การให้คำปรึกษาบางอย่างนั้นเป็นสิ่งจำเป็นทุกคนสามารถให้ข้อโต้แย้งที่ดีกว่าหรือบอกฉันได้ว่าทำไมฉันถึงทำผิด ทีมของคุณทำอะไร ** เราทุกคนเห็นพ้องต้องกันว่ารุ่นพี่ไม่จำเป็นต้องหมายถึงความสามารถดังนั้นเพียงแค่สมมติโดย "โปรแกรมเมอร์อาวุโส" ฉันหมายถึง "โปรแกรมเมอร์ยอดนิยม"

2
(Dis-) ข้อดีของการพิมพ์โครงสร้าง
ผมเคยดูเพียงแค่การพูดคุยนี้โดยแดเนียล Spiewakที่เขาพูดเกี่ยวกับข้อดีของการพิมพ์โครงสร้างเมื่อเทียบกับสกาล่าของ ans ของ Java พิมพ์เล็กน้อย ตัวอย่างหนึ่งสำหรับความแตกต่างนี้จะเป็นรหัส Java ต่อไปนี้ public interface Foo { public int length(); } public interface Bar { public int length(); } Foo f = ...; Bar b = f; ซึ่งแน่นอนว่าจะไม่รวบรวมเพราะความเข้ากันได้ระหว่างประเภทFooและBarจะถูกกำหนดโดยชื่อ ระบบประเภทโครงสร้างในอีกด้านหนึ่งสามารถประกาศว่าทั้งสองประเภทมีความเท่าเทียมกันหรือเข้ากันได้และดังนั้นในกรณีอื่น ๆ อนุญาตให้มีการตรวจสอบการพิมพ์เป็ด ตอนนี้ฉันคิดว่าฉันเข้าใจถึงข้อดีของระบบโครงสร้างแบบส่วนใหญ่แล้ว แต่ฉันสงสัยว่ามันจะไม่ทำให้ความปลอดภัยของประเภทจากตัวอย่างเช่นต่อไปนี้เป็นโมฆะ class Foo { class Bar { /* ... */ } def …

8
ทำไมเราไม่ใช้ CSS (สร้างฝั่งเซิร์ฟเวอร์) แบบไดนามิก?
เนื่องจาก HTML ที่สร้างโดยฝั่งเซิร์ฟเวอร์นั้นเป็นเรื่องเล็กน้อย (และเป็นวิธีเดียวที่จะสร้างเว็บเพจแบบไดนามิกก่อน AJAX) CSS ที่สร้างขึ้นฝั่งเซิร์ฟเวอร์จึงไม่ใช่ จริงๆแล้วฉันไม่เคยเห็นเลย มีคอมไพเลอร์ CSS แต่สร้างไฟล์ CSS ซึ่งสามารถใช้เป็นแบบคงที่ได้ ในทางเทคนิคแล้วมันไม่จำเป็นต้องมีไลบรารีพิเศษแท็กสไตล์ HTML ควรอ้างอิงถึงสคริปต์ templater PHP (/ ASP / อะไรก็ตาม) แทนไฟล์ CSS แบบคงที่และสคริปต์ควรส่งส่วนหัวชนิดเนื้อหา CSS - นั่นคือทั้งหมด มันมีปัญหาแคชหรือไม่? ฉันไม่คิดอย่างนั้น สคริปต์ควรส่งส่วนหัวที่ไม่มีแคชฯลฯ มันเป็นปัญหาสำหรับนักออกแบบหรือไม่? ไม่พวกเขาควรแก้ไขเทมเพลต CSS (เนื่องจากพวกเขาแก้ไขเทมเพลต HTML) ทำไมเราไม่ใช้ตัวสร้าง CSS แบบไดนามิก? หรือถ้ามีโปรดแจ้งให้เราทราบ

2
สคริปต์ขนาดเล็กจำนวนมากหนึ่งที่เก็บหรือหลาย ๆ
เพื่อนร่วมงานและตัวฉันเองพบเจอปัญหาที่เรามีความคิดเห็นหลายอย่าง ขณะนี้เรามีพื้นที่เก็บข้อมูล git ที่เราเก็บ cronjobs ของเราทั้งหมดมีประมาณ 20 crons และมันไม่เกี่ยวข้องจริงๆยกเว้นว่าพวกมันเป็นสคริปต์ python ขนาดเล็กและจำเป็นสำหรับกิจกรรมบางอย่าง เรากำลังใช้fabric.pyไฟล์เพื่อปรับใช้และrequirements.txtไฟล์เพื่อจัดการข้อกำหนดสำหรับสคริปต์ทั้งหมด ปัญหาของเราคือโดยพื้นฐานแล้วเราจะเก็บสคริปต์เหล่านี้ทั้งหมดไว้ในที่เก็บคอมไพล์เดียวหรือเราควรแยกพวกมันออกเป็นที่เก็บของพวกเขาเองเหรอ? โดยทำให้พวกมันอยู่ในที่เก็บเดียวทำให้ง่ายต่อการปรับใช้กับเซิร์ฟเวอร์เดียว เราสามารถใช้ไฟล์ cron เพียงไฟล์เดียวสำหรับสคริปต์ทั้งหมด อย่างไรก็ตามเรื่องนี้รู้สึกผิดเนื่องจาก cronjobs 20 คนไม่เกี่ยวข้องกับเหตุผล นอกจากนี้เมื่อใช้หนึ่งrequirements.txtไฟล์สำหรับสคริปต์ทั้งหมดมันยากที่จะเข้าใจว่าการอ้างอิงสำหรับสคริปต์นั้น ๆ และพวกเขาทั้งหมดต้องใช้แพ็คเกจรุ่นเดียวกัน เราสามารถแยกสคริปต์ทั้งหมดออกเป็นที่เก็บข้อมูลของตนเอง แต่สิ่งนี้จะสร้างที่เก็บข้อมูลที่แตกต่างกัน 20 แห่งซึ่งจำเป็นต้องจดจำและจัดการ สคริปต์เหล่านี้ส่วนใหญ่ไม่ได้มีขนาดใหญ่มากและวิธีการแก้ปัญหานั้นดูเหมือนจะเกินความจริง คำถามที่เกี่ยวข้องคือเราจะใช้ไฟล์ crontab ขนาดใหญ่หนึ่งไฟล์สำหรับ cronjobs ทั้งหมดหรือแยกไฟล์สำหรับแต่ละไฟล์หรือไม่ หากแต่ละคนมีของตัวเองการติดตั้งของ crontab จะหลีกเลี่ยงการเขียนทับอีก 19 รายการได้อย่างไร นี่ก็ดูเหมือนจะเป็นความเจ็บปวดเพราะในตอนนั้นมีไฟล์ cron 20 ไฟล์ที่แตกต่างกันเพื่อติดตาม กล่าวโดยย่อคำถามและปัญหาหลักของเราคือเรารวบรวมพวกเขาทั้งหมดอย่างใกล้ชิดเป็นที่เก็บหนึ่งหรือเราแยกพวกเขาออกเป็นพื้นที่เก็บข้อมูลของตัวเองด้วยความต้องการของตัวเอง.txtและ fabfile.py? เรารู้สึกว่าเราอาจจะมองหาวิธีแก้ปัญหาที่ง่ายมาก มีวิธีที่ง่ายกว่าในการจัดการกับปัญหานี้หรือไม่?


5
วิธีง่ายๆในการปรับปรุงคุณภาพการเผยแพร่ในสภาพแวดล้อม RAD
พื้นหลังเล็กน้อยที่นี่ - เราเป็นทีมเล็ก ๆ (จาก 5) ของนักพัฒนา RAD ที่รับผิดชอบการพัฒนาซอฟต์แวร์ภายใน บริษัท ที่ไม่ใช่ซอฟต์แวร์ขนาดใหญ่ "ซอฟต์แวร์ภายใน" แตกต่างจากแอพพลิเคชันเดสก์ท็อป. NET ที่ใช้เซิร์ฟเวอร์ MSSQL เป็นแบ็กเอนด์ไปยังสคริปต์ Python ที่ทำงานบนพื้นหลังไปยังเอกสารและแม่แบบ MS Word - สวนสัตว์ของเทคโนโลยี ทีมงานทั้งหมดประกอบด้วยผู้รอบรู้ทุกคนสามารถรับข้อกำหนดจากผู้ใช้รหัสมันทดสอบและปรับใช้ในการผลิต เมื่อซอฟแวร์ในการผลิตมันถูกดูแลโดยทีมอื่น แต่มันมักจะง่ายสำหรับเราที่จะเข้าไปแทรกแซงหากมีอะไรผิดพลาด ทุกอย่างฟังดูดี แต่มีปัญหา - การเป็นทีม RAD ที่เราต้องปล่อยออกมาบ่อยครั้งและไม่มีวันที่เราจะไม่ปล่อยรุ่นใหม่ของแอปพลิเคชั่นหนึ่งหรือสอง (หรืออาจเป็นสคริปต์เอกสารเวิร์ดที่ได้รับการปรับปรุง แอพคอนโซล C ++ ฯลฯ ) ในการผลิต เราทำการทดสอบการพัฒนาและเกี่ยวข้องกับผู้ใช้ปลายทางโดยให้พวกเขาเรียกใช้ซอฟต์แวร์ในสภาพแวดล้อมของเอือด ... ... แต่ข้อบกพร่องกำลังคืบคลานเข้าสู่การผลิตอยู่ดี ผู้ใช้เข้าใจว่าข้อบกพร่องเหล่านี้และความไม่แน่นอนเป็นครั้งคราวคือราคาที่พวกเขาจ่ายเพื่อให้ได้สิ่งที่พวกเขาต้องการได้อย่างรวดเร็ว แต่ในขณะเดียวกันก็ทำให้เราคิด - บางทีเราอาจปรับปรุงการพัฒนาของเราหรือแนวทางปฏิบัติเพื่อปรับปรุงเสถียรภาพของ ซอฟต์แวร์และลดจำนวนข้อบกพร่องที่เราแนะนำเมื่อเพิ่มฟังก์ชันการทำงานใหม่ สิ่งที่ดี - …

1
Groovy ปฏิบัติตามหลักการความสอดคล้องของ Tennent หรือไม่?
นี่คือการสนทนาที่น่าสนใจของหลักการการโต้ตอบของ Tennentและคำอธิบายสั้น ๆ จากNeal Gafter : หลักการกำหนดว่าการแสดงออกหรือคำพูดเมื่อห่อในการปิดและเรียกใช้ทันทีควรมีความหมายเช่นเดียวกับก่อนที่จะถูกห่อในการปิด การเปลี่ยนแปลงความหมายใด ๆ เมื่อการปิดโค้ดในการปิดอาจเป็นข้อบกพร่องในภาษา ภาษา Groovy ปฏิบัติตามหลักการนี้หรือไม่

5
ฉันจะออกแบบเคสทดสอบเพื่อให้ครอบคลุมโค้ดตามเหตุการณ์สุ่มได้อย่างไร
ตัวอย่างเช่นหากรหัสสร้าง int แบบสุ่มจาก 0-10 และรับสาขาที่แตกต่างกันในแต่ละผลลัพธ์หนึ่งจะออกแบบชุดทดสอบเพื่อรับประกันความครอบคลุมคำสั่ง 100% ในรหัสดังกล่าวได้อย่างไร ใน Java โค้ดอาจมีลักษณะดังนี้: int i = new Random().nextInt(10); switch(i) { //11 case statements }

2
ค่าใช้จ่ายวิธีการของวัตถุประสงค์ -c ทำให้วิธีการออกแบบ 'เล็ก ๆ น้อย ๆ หลายวิธี' ไม่สามารถมองเห็นได้หรือไม่?
ฉันมักโปรดปรานโดยใช้วิธีการเล็ก ๆ ตามคำแนะนำของหมู่คนบ๊อบมาร์ตินรหัสสะอาด ฉันได้อ่านยังเพียงพอเกี่ยวกับ internals Objective-C ที่จะมีอย่างน้อยความคิดบางอย่างเกี่ยวกับวิธีการจัดส่งข้อความการทำงานของมัน ( ชุด bbumsเป็นข้อมูลโดยเฉพาะอย่างยิ่งเกี่ยวกับเรื่องนี้) ความกังวลเกี่ยวกับการปรับให้เหมาะสมก่อนวัยอันควรถึงกระนั้นฉันอยากจะรู้ว่าสิ่งที่การทำงานของ Objective-c ทำกับ objc_msgSend หรือไม่นั้นในทางปฏิบัตินั้นมีความหมายเพียงพอสำหรับแนวทาง 'วิธีเล็ก ๆ น้อย ๆ ' การค้นพบเชิงประจักษ์นั้นน่ายินดีเป็นอย่างยิ่ง (บางทีฉันอาจตั้งค่าการทดสอบด้วยตัวเอง) ประสบการณ์จากผู้ที่เขียนโครงการวัตถุประสงค์ขนาดใหญ่ก็คงจะยอดเยี่ยมเช่นกัน การอธิบาย น้ำเสียงทั่วไปของคำถามนั้นมีเจตนา ฉันไม่ได้ถามเกี่ยวกับการปรับแต่งประสิทธิภาพของแอพเฉพาะ (ซึ่งเป็นเหตุผลที่ฉันถามที่นี่มากกว่า SO) แต่เพิ่มเติมเกี่ยวกับว่าลักษณะภาษาของ Objective-C กีดกันวิธีการออกแบบที่แน่นอนหรือไม่ ฉันได้สังเกตว่ารหัสส่วนใหญ่ที่ฉันเห็นจาก Apple และฝ่ายอื่น ๆ (ใน GitHub ฯลฯ ) มีแนวโน้มที่จะใช้วิธีการขนาดใหญ่ (และคลาส) และฉันสงสัยว่านี่เป็นอคติที่ได้พุ่งขึ้นเพราะภาษา ตัวเอง แน่นอนฉันอาจได้อ่านรหัสผิดหรืออาจเป็นวัฒนธรรมมากกว่าปัจจัยทางเทคนิคที่นำไปสู่แนวโน้มถ้ามันมีอยู่ (สำหรับสิ่งที่คุ้มค่าฉันกำลังเขียน Objective-C และฉันใช้วิธีการเล็ก ๆ ) ขอเพิ่มเติม …

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

16
จะใช้เวลาในการดีบักน้อยลงได้อย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ตามกฎของ Pareto โปรแกรมเมอร์ใช้เวลาเพียง 20% ในการทำสิ่งที่มีประโยชน์จริงๆ ฉันใช้เวลา 80% ในการดีบักแก้ไขสิ่งเล็ก ๆ เพื่อให้ทุกอย่างทำงานได้ มีวิธีการแก้จุดบกพร่องใช้เวลาน้อยลงหรือไม่

2
B-Trees และโครงสร้างข้อมูลอื่น ๆ จะล้าสมัยเมื่อมีการถือกำเนิดของ Solid State Drive หรือไม่?
ปัจจุบันแอพพลิเคชั่นฐานข้อมูลจำนวนมาก (อาจจะมากที่สุด) ใช้ B-Trees และรูปแบบที่หลากหลายในการจัดเก็บข้อมูลเนื่องจากโครงสร้างข้อมูลนี้ปรับการดำเนินการอ่านเขียนและค้นหาบนฮาร์ดดิสก์ให้เหมาะสม (และการดำเนินการเหล่านี้จะมีบทบาทสำคัญในประสิทธิภาพโดยรวมของ ฐานข้อมูล) Solid State Drives (SSDs) ควรจะแทนที่ฮาร์ดดิสก์แบบดั้งเดิม (HDDs) อย่างสมบูรณ์หรือไม่เราสามารถพูดได้ว่า B-Trees และรูปแบบต่างๆจะล้าสมัยทำให้มีที่ว่างสำหรับโครงสร้างข้อมูลที่มีประสิทธิภาพมากขึ้นในหน่วยความจำโดยตรง ถ้าเป็นเช่นนั้นโครงสร้างเหล่านั้นจะเป็นอย่างไร (เช่นตารางแฮชต้นไม้ AVL)

2
หากมีการระบุแหล่งที่มาผ่านนามแฝงใครเป็นเจ้าของสิทธิ์ในรหัส [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันตระหนักถึงบางกรณีที่ผู้ใช้โคดี่ใช้นามแฝงเพื่อระบุแหล่งที่มาแทนที่จะเป็นชื่อจริงของพวกเขา ตัวอย่างรวมถึง: Satoshi Nakamoto (Bitcoin) ทำไม (ทับทิม) สิ่งหนึ่งที่ฉันสงสัยคือถ้ามีการระบุแหล่งที่มาผ่านทางนามแฝงใครเป็นเจ้าของสิทธิ์ในรหัส

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