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

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

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

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

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

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

7
วิธีตั้งชื่อตัวแปรเมื่อคำนั้นเป็นทั้งคำนามและคำกริยา
ฉันพบปัญหากรณีมุมด้วยคำแนะนำทั่วไปของ: คำนามสำหรับตัวแปร คำกริยาสำหรับฟังก์ชั่น โดยเฉพาะฉันมีกรณีที่คำไม่ชัดเจน - มันอาจเป็นทั้งคำกริยาหรือคำนาม และในบางกรณีเมื่อเราพูดถึงแอปพลิเคชันมันจะถูกใช้ทั้งสองวิธีในประโยคเดียวกัน ความตั้งใจของฉันคือเพื่อให้แน่ใจว่าโปรแกรมจะยังคงสามารถอ่านได้สำหรับนักพัฒนาในอนาคตเช่นเดียวกับตัวฉันเองเมื่อฉันกลับไปยังส่วนของรหัสเดือนต่อมา batteryหนึ่งในตัวอย่างที่เป็นด้วย A batteryมีchargeและคุณยังสามารถcharge()ใช้แบตเตอรี่ได้อีกด้วย ฉันคิดว่าการมีทั้งคู่Battery.ChargeและBattery.Charge(value)จะสับสนกับนักพัฒนาในอนาคต โซลูชันปัจจุบันของฉันคือเลือกคำที่แตกต่างสำหรับกรณีเหล่านี้หนึ่งหรือทั้งสองกรณี (ตัวแปรและฟังก์ชัน) ปัญหาของฉันด้วยวิธีการที่เป็นBatteryตัวแปรวัตถุและฟังก์ชั่นจะไม่สอดคล้องกับการอภิปรายการออกแบบที่เกี่ยวข้องกับการ chargeBattery คำถามของฉันคือถ้ามีอีกวิธีที่ดีกว่า / จัดการความขัดแย้งนี้ในการตั้งชื่อแบบแผนการ? อ่านเพิ่มเติมบางเรื่อง ไม่มีใครตอบคำถามของฉันโดยเฉพาะ แนวทางการตั้งชื่อวิธีการกระชับความหมายที่มีความหมาย แบบแผนการตั้งชื่อตัวแปร คำตอบที่เลือกจากhttps://softwareengineering.stackexchange.com/questions/14169/what-naming-guidelines-do-you-follow
48 naming  variables 

8
ฉันควรคาดหวังให้ทีมของฉันมีความสามารถขั้นพื้นฐานมากกว่าด้วยระบบควบคุมแหล่งที่มาของเราหรือไม่?
บริษัท ของฉันเปลี่ยนจากการโค่นล้มเป็น Git เมื่อประมาณสามเดือนที่แล้ว เรามีการแจ้งล่วงหน้าหลายสัปดาห์ก่อนการเปลี่ยน เนื่องจากฉันไม่เคยใช้ Git มาก่อน (หรือ DVCS อื่น ๆ ) ฉันอ่านPro Gitและใช้เวลาเล็กน้อยหมุนที่เก็บของตัวเองและเล่นรอบ ๆ ดังนั้นเมื่อเราเปลี่ยนฉันจะสามารถทำงานด้วยความเจ็บปวดน้อยที่สุด ตอนนี้ฉันเป็น 'Git guy' โดยค่าเริ่มต้น ด้วยข้อยกเว้นบางประการทีมของฉันส่วนใหญ่ยังไม่รู้ว่า Git ทำงานอย่างไร ตัวอย่างเช่นพวกเขายังคงคิดว่ากิ่งเป็นสำเนาที่สมบูรณ์ของซอร์สโค้ดและถึงขั้นที่จะลอกแบบ repo ลงในหลาย ๆ โฟลเดอร์ (หนึ่งรายการต่อสาขา) โดยทั่วไปแล้วพวกเขามองว่า Git เป็นกล่องดำที่น่ากลัว กำหนดลักษณะพื้นฐานของการควบคุมแหล่งที่มาในการทำงานประจำวันของเรา (ไม่พูดถึงจำนวนเงินที่ไร้สาระของการใช้พลังงาน Git กำบังเรา) ผมมีความเห็นว่า dev ใด ๆ ที่ไม่ประสบความสำเร็จในระดับหนึ่งของความสามารถกับมันเป็นความรับผิด ฉันควรคาดหวังให้ทีมของฉันมีความเข้าใจอย่างน้อยเกี่ยวกับวิธีการทำงานของ Git ภายในและวิธีการใช้งานนอกเหนือจากการดำเนินการดึง / ผสาน / การกดพื้นฐานที่สุด? หรือฉันแค่ทำอะไรที่ไร้ค่า?

3
อะไรคือเอกลักษณ์ของ Node.js [ปิด]
เมื่อไม่นานมานี้มีการสรรเสริญ Node.js มากมาย ฉันไม่ได้เป็นนักพัฒนาซอฟต์แวร์ที่มีความเสี่ยงต่อแอปพลิเคชันเครือข่ายมาก จากความเข้าใจของฉันเกี่ยวกับ Nodes.js จุดแข็งของมันคือ: เรามีเธรดเพียงตัวเดียวที่จัดการการเชื่อมต่อได้หลายตัวซึ่งให้สถาปัตยกรรมแบบอิงเหตุการณ์ อย่างไรก็ตามตัวอย่างเช่นใน Java ฉันสามารถสร้างเพียงหนึ่งเธรดโดยใช้ NIO / AIO (ซึ่งไม่ใช่การปิดกั้น APIs จากความเข้าใจที่เปลือยเปล่าของฉัน) และจัดการการเชื่อมต่อจำนวนมากโดยใช้เธรดนั้นและฉันจัดเตรียมสถาปัตยกรรมที่อิงเหตุการณ์ การจัดการกับลอจิก (ไม่ควรจะยากขนาดนี้หากมีการติดต่อกลับ ฯลฯ )? เนื่องจาก JVM เป็น VM ที่เป็นผู้ใหญ่มากกว่า V8 (ฉันคาดว่ามันจะทำงานได้เร็วขึ้น) และสถาปัตยกรรมการจัดการตามเหตุการณ์ดูเหมือนจะเป็นสิ่งที่ไม่ยากที่จะสร้างฉันไม่แน่ใจว่าทำไม Node.js ดึงดูดความสนใจมาก ฉันพลาดจุดสำคัญบางอย่างหรือไม่?

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

9
เป็นไปได้ไหมที่จะใช้ภาษาการเขียนโปรแกรมที่เว็บไซต์ใช้?
ตัวอย่างเช่นหากstackexchange.comไม่มีการขอข้อมูลจากเจ้าของเว็บไซต์หรือ Google เกี่ยวกับการพัฒนาเว็บไซต์เป็นไปได้หรือไม่ที่จะทราบว่าใช้ภาษาใดในส่วนหลัง ดูเหมือนว่าเว็บไซต์ไม่มี.extensionแถบตัวอย่างเช่น.phpที่สามารถระบุได้ว่ามีการพัฒนาอะไรPHPแต่ไม่มีส่วนขยายฉันจะรู้ได้อย่างไร

8
LSP เทียบกับการทดแทน OCP / Liskov VS เปิดปิด
ฉันพยายามที่จะเข้าใจหลักการของ OOP และฉันได้ข้อสรุปว่า LSP และ OCP มีความคล้ายคลึงกัน (ถ้าไม่พูดมากกว่านี้) หลักการเปิด / ปิดระบุ "เอนทิตีของซอฟต์แวร์ (คลาส, โมดูล, ฟังก์ชั่น, อื่น ๆ ) ควรจะเปิดสำหรับการขยาย แต่ปิดสำหรับการปรับเปลี่ยน" ในคำง่ายๆ LSP ระบุว่าอินสแตนซ์ใด ๆ ของFooสามารถถูกแทนที่ด้วยอินสแตนซ์ใด ๆBarที่ได้มาจากFooและโปรแกรมจะทำงานในลักษณะเดียวกัน ฉันไม่ใช่โปรแกรมเมอร์ OOP มืออาชีพ แต่สำหรับฉันแล้วดูเหมือนว่า LSP จะเป็นไปได้ก็ต่อเมื่อBarได้รับมาจากFooไม่ได้เปลี่ยนแปลงอะไรเลย แต่จะขยายออกไปเท่านั้น นั่นหมายความว่าโดยเฉพาะอย่างยิ่งโปรแกรม LSP จะเป็นจริงเฉพาะเมื่อ OCP เป็นจริงและ OCP เป็นจริงเฉพาะในกรณีที่ LSP เป็นจริง นั่นหมายความว่าพวกเขาเท่าเทียมกัน ช่วยแก้ให้ด้วยนะถ้าฉันผิด. ฉันต้องการเข้าใจแนวคิดเหล่านี้จริงๆ ขอบคุณมากสำหรับคำตอบ

9
การทดสอบหน่วยหรือการพัฒนาขับเคลื่อนทดสอบนั้นคุ้มค่าหรือไม่?
ทีมที่ทำงานของฉันกำลังจะย้ายไปยังการต่อสู้และทีมอื่น ๆ เริ่มทำการพัฒนาโดยใช้การทดสอบโดยใช้การทดสอบหน่วยและการทดสอบการยอมรับของผู้ใช้ ฉันชอบ UATs แต่ฉันไม่ได้ขายในการทดสอบหน่วยสำหรับการพัฒนาที่ขับเคลื่อนด้วยการทดสอบหรือการพัฒนาที่ขับเคลื่อนด้วยการทดสอบโดยทั่วไป ดูเหมือนว่าการทดสอบการเขียนเป็นงานพิเศษให้ผู้คนจำนวนมากเมื่อพวกเขาเขียนรหัสจริงและอาจไม่ได้ผลบ่อยนัก ฉันเข้าใจว่าการทดสอบหน่วยใช้งานอย่างไรและเขียนอย่างไร แต่ทุกคนสามารถทำให้เป็นกรณีได้ว่าเป็นความคิดที่ดีและคุ้มค่ากับความพยายามและเวลา นอกจากนี้มีอะไรที่ทำให้ TDD ดีเป็นพิเศษสำหรับ Scrum หรือไม่?

4
ทำไมตัววนซ้ำใน Python จึงทำให้เกิดข้อยกเว้น?
นี่คือไวยากรณ์สำหรับตัววนซ้ำใน Java (ค่อนข้างคล้ายไวยากรณ์ใน C #): Iterator it = sequence.iterator(); while (it.hasNext()) { System.out.println(it.next()); } ซึ่งทำให้รู้สึก นี่คือไวยากรณ์ที่เทียบเท่าใน Python: it = iter(sequence) while True: try: value = it.next() except StopIteration: break print(value) ฉันคิดว่ามีการใช้ข้อยกเว้นในกรณีพิเศษเท่านั้น ทำไมไพ ธ อนใช้ข้อยกเว้นเพื่อหยุดย้ำ?

3
วิธีใดเป็นวิธีปฏิบัติที่ดีกว่าสำหรับตัวอย่างหรือแบบสถิต?
คำถามนี้เป็นเรื่องส่วนตัว แต่ฉันแค่อยากรู้ว่าโปรแกรมเมอร์ส่วนใหญ่เข้าหานี้อย่างไร ตัวอย่างด้านล่างเป็นแบบหลอก -C # แต่ควรใช้กับ Java, C ++ และภาษา OOP อื่น ๆ ด้วย อย่างไรก็ตามเมื่อเขียนวิธีการช่วยเหลือในชั้นเรียนของฉันฉันมักจะประกาศให้พวกเขาเป็นแบบคงที่และเพียงผ่านเขตข้อมูลหากวิธีการช่วยเหลือที่พวกเขาต้องการ ตัวอย่างเช่นกำหนดรหัสข้างล่างนี้ผมชอบที่จะใช้วิธีการโทร # 2 class Foo { Bar _bar; public void DoSomethingWithBar() { // Method Call #1. DoSomethingWithBarImpl(); // Method Call #2. DoSomethingWithBarImpl(_bar); } private void DoSomethingWithBarImpl() { _bar.DoSomething(); } private static void DoSomethingWithBarImpl(Bar bar) { …

17
มีงานใด ๆ ในสาขาการเขียนโปรแกรมที่ไม่ต้องการให้คุณนั่งที่โต๊ะทำงานทั้งวันหรือไม่? [ปิด]
ฉันใหม่ในด้านการเขียนโปรแกรม ฉันสนุกกับการเป็นอาชีพจริงๆ แต่ฉันไม่แน่ใจว่าฉันสามารถนั่งที่โต๊ะทำงานได้แปดชั่วโมงต่อวัน แน่นอนว่าฉันไม่รังเกียจที่จะต้องยืดเวลาออกไป แต่ฉันไม่สามารถทำมันได้ทั้งวัน มีการเขียนโปรแกรมที่อาจมีงานที่ต้องใช้เวลาน้อยลงที่โต๊ะทำงานหรือไม่?

4
คอมไพเลอร์ C ++ ตัวแรกสามารถเขียนเป็น C ++ ได้อย่างไร?
Stroustrup อ้างว่า Cfront ซึ่งเป็นคอมไพเลอร์ C ++ ตัวแรกเขียนด้วย C ++ ( คำถามที่พบบ่อยของ Stroustrup ) อย่างไรก็ตามเป็นไปได้อย่างไรที่คอมไพเลอร์ C ++ แรกจะถูกเขียนใน C ++ โค้ดที่ประกอบเป็นคอมไพเลอร์จำเป็นต้องถูกคอมไพล์ด้วยและทำให้คอมไพเลอร์ C ++ ตัวแรกไม่สามารถเขียนใน C ++ ได้ใช่ไหม

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