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

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

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

12
“ ถ้าวิธีการถูกนำมาใช้ใหม่โดยไม่มีการเปลี่ยนแปลงให้ใส่วิธีการในคลาสพื้นฐานมิฉะนั้นสร้างอินเทอร์เฟซ” เป็นกฎที่ดี?
เพื่อนร่วมงานของฉันเกิดขึ้นกับกฎง่ายๆสำหรับการเลือกระหว่างการสร้างชั้นฐานหรืออินเตอร์เฟซ เขาพูดว่า: ลองนึกภาพทุกวิธีการใหม่ที่คุณกำลังจะใช้ สำหรับแต่ละของพวกเขาพิจารณานี้จะใช้วิธีการนี้จะดำเนินการโดยระดับมากกว่าหนึ่งในว่ารูปแบบนี้โดยไม่ต้องใด ๆการเปลี่ยนแปลง? หากคำตอบคือ "ใช่" ให้สร้างคลาสพื้นฐาน ในทุกสถานการณ์ให้สร้างอินเทอร์เฟซ ตัวอย่างเช่น: พิจารณาการเรียนcatและdogซึ่งขยายชั้นเรียนและมีวิธีการเดียวmammal pet()จากนั้นเราจะเพิ่มชั้นเรียนซึ่งไม่ขยายอะไรและมีวิธีการเดียวalligatorslither() ตอนนี้เราต้องการเพิ่มeat()วิธีการทั้งหมดของพวกเขา หากการดำเนินการตามeat()วิธีการที่จะตรงเดียวกันcat, dogและalligatorเราควรสร้างชั้นฐาน (สมมุติว่าanimal) ซึ่งใช้วิธีการนี้ อย่างไรก็ตามหากการติดตั้งใช้งานalligatorแตกต่างกันเล็กน้อยเราควรสร้างIEatส่วนต่อประสานและสร้างmammalและalligatorนำไปใช้งาน เขายืนยันว่าวิธีนี้ครอบคลุมทุกกรณี แต่ดูเหมือนว่าฉันจะทำให้เข้าใจง่ายเกินไป การทำตามกฎของหัวแม่มือนี้มีค่าหรือไม่

5
มีทางเลือกอะไรบ้างในการให้ 'รหัสผ่านผู้ดูแลระบบ' สำหรับแอปพลิเคชันเดสก์ท็อป
ขณะนี้ฉันกำลังจัดการและแยกส่วนซอฟต์แวร์ที่ใช้ใน บริษัท ของฉันมานานกว่าทศวรรษแล้ว หนึ่งในองค์ประกอบของแอปพลิเคชั่นนี้คือการเรียงลำดับของโหมดผู้ดูแลระบบหรือผู้ใช้ไฟซึ่งมีสิ่งต่าง ๆ เช่นอินพุตเพิ่มเติม / ภายในบางอย่างรวมถึงความสามารถในการปิดการ จำกัด การป้อนข้อมูล ในอดีตโหมดนี้เปิดใช้งานโดยการวางไฟล์ที่มีชื่อเฉพาะในสถานที่ที่ระบุในไดเรกทอรีระบบ windows (ซึ่งทั้งสองอย่างนั้นถูกเข้ารหัสอย่างหนักในแอปพลิเคชัน) ไฟล์ที่ถูกตั้งชื่อว่า 'something.DLL' แม้ว่ามันจะว่างเปล่า ไฟล์ ASCII ไม่ใช่ dll ดังนั้นเมื่อเร็ว ๆ นี้ฉันได้เพิ่มรหัสและรูปแบบคำกริยาเล็กน้อยที่อนุญาตให้ผู้ใช้ป้อนรหัสผ่านของผู้ดูแลระบบเพื่อเปิดใช้งานฟังก์ชันนี้ เป็นรหัสผ่านที่ตั้งไว้ไม่ใช่เฉพาะผู้ใช้ เมื่อป้อนรหัสผ่านที่ถูกต้องมันจะเรียงลำดับของสิ่งเดียวกันโดยสร้าง 'ไฟล์สำคัญ' ในไดเรกทอรีรากของแอปพลิเคชันเพื่อให้โปรแกรมสามารถเริ่มต้นในโหมดผู้ดูแลระบบหากมีไฟล์นั้นอยู่ ตอนนี้ผู้จัดการของแผนกที่ส่วนใหญ่ซอฟต์แวร์นี้ไม่ชอบความคิดนั้นมาก เขาคิดว่าถ้าเรามีรหัสผ่านง่าย ๆ ที่ตั้งไว้ล่วงหน้าว่ามันจะ 'ออกไป' ได้อย่างง่ายดายและเขาไม่ต้องการให้ผู้ใช้ที่ไม่มีประสบการณ์เข้าถึงคุณลักษณะพิเศษเหล่านั้น ดังนั้นคำถามของฉันคือมีวิธีการอื่นใดอีกบ้างที่ให้การเข้าถึงแบบนี้ที่ค่อนข้างปลอดภัยกว่า? มันเป็นเรื่องของฉันเมื่อพูดถึงการบำรุงรักษาและการจัดการซอฟต์แวร์นี้ดังนั้นสิ่งใดก็ตามที่ไม่ได้ติดตั้งภายในหรือโดยอัตโนมัติก็ไม่ได้ช่วยอะไรเลย (เช่นการส่งคำขอสำหรับ 'คีย์ใบอนุญาต' หรือสิ่งที่คล้ายกัน) หมายเหตุ: แอปพลิเคชันนี้เขียนขึ้นใน VB.NET (.NET 4.0) และขณะนี้ฉันกำลังวางแผนที่จะใช้การปรับใช้แบบคลิกครั้งเดียวเมื่อเสร็จสิ้นเวอร์ชันใหม่
10 .net  passwords 

5
มีข้อดีสำหรับโปรแกรมเมอร์ C ที่จะอ่าน K&R หรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา คำถามนี้หลอกหลอนฉันเพราะตอนนี้ฉันกำลังอ่านKernighan & Ritchie's: The C Programming Language (K&R) แต่ฉันเจอกันมากและฉันหมายถึงโปรแกรมเมอร์ของ C จำนวนมากที่ไม่เคยอ่าน ดังนั้นคำถามของฉันคือ: มีประโยชน์ในการอ่าน K & R หรือไม่? ควรจะมีความจำเป็นหรือไม่?
10 c 

2
หลักการตั้งชื่อของตัวแปรในภาษาการเขียนโปรแกรม C # [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังดูวิดีโอเกี่ยวกับ C # เกี่ยวกับตัวแปร ผู้เขียนประกาศตัวแปรภายในเมธอดและเขาตั้งชื่อดังนี้: string MyName = "James"; คำถามของฉันคือ:. อนุสัญญาใดแนะนำโดย. Net Framework มันเป็นปาสคาลท่อในตัวอย่างข้างต้นหรือเป็นกรณีอูฐ?

2
จะตรวจสอบกฎโมเดลโดเมนที่ขึ้นกับเนื้อหาของฐานข้อมูลได้ที่ไหน
ฉันกำลังทำงานกับระบบที่อนุญาตให้ผู้ดูแลระบบกำหนดฟอร์มที่มีฟิลด์ แบบฟอร์มที่กำหนดจะถูกใช้เพื่อป้อนข้อมูลไปยังระบบ บางครั้งแบบฟอร์มจะถูกกรอกโดยมนุษย์ผ่าน GUI บางครั้งแบบฟอร์มจะถูกกรอกตามค่าที่รายงานโดยระบบอื่น สำหรับแต่ละฟิลด์ผู้ดูแลระบบสามารถกำหนดกฎการตรวจสอบที่ จำกัด ค่าที่อนุญาตสำหรับฟิลด์ กฎการตรวจสอบสามารถเป็นอะไรก็ได้จาก "ค่าที่ป้อนในฟิลด์ต้องเป็นจริงหรือเท็จ" ถึง "ค่าที่ป้อนในฟิลด์ต้องมีอยู่ในคอลัมน์ A ของตาราง B ในฐานข้อมูล" ผู้ดูแลระบบสามารถเปลี่ยนแปลงกฎการตรวจสอบสำหรับฟิลด์ได้ตลอดเวลา ในสถานการณ์นี้ความคิดเห็นของคุณเป็นสถานที่ที่เหมาะสมที่สุดสำหรับการตรวจสอบว่าแต่ละเขตข้อมูลถูกกรอกอย่างถูกต้องหรือไม่ ฉันมีสองวิธีหลักในใจ: ตัวเลือก # 1: ตรวจสอบความถูกต้องในรูปแบบโดเมน แต่ละวัตถุฟิลด์จะมีกฎการตรวจสอบที่ระบุโดยผู้ดูแลระบบ วัตถุฟิลด์จะมีการอ้างอิงถึง IValidator เมื่อมีความพยายามในการตั้งค่าของฟิลด์ฟิลด์จะผ่านค่าที่กำหนดและกฎการตรวจสอบไปยัง IValidator หากค่าที่ระบุไม่ถูกต้องจะมีการโยน ValidationException และจัดการอย่างเหมาะสมใน GUI / อินเตอร์เฟสไปยังระบบอื่น ข้อดี: การป้องกันที่แข็งแกร่งสำหรับฟิลด์ที่ถูกกำหนดค่าโดยไม่ตั้งใจซึ่งละเมิดกฎการตรวจสอบ จุดด้อย: Data Access Layer ต้องสามารถผ่านการตรวจสอบและสร้างเขตข้อมูลที่ละเมิดกฎการตรวจสอบปัจจุบัน แม้ผู้ดูแลระบบจะเปลี่ยนกฎการตรวจสอบสำหรับเขตข้อมูล แต่เรายังจำเป็นต้องสร้างวัตถุเขตข้อมูลตามข้อมูลเก่าเช่นเมื่อแสดงแบบฟอร์มที่กรอกข้อมูลเมื่อหลายปีก่อน สิ่งนี้อาจแก้ไขได้โดยการเก็บกฎการตรวจสอบปัจจุบันเมื่อใดก็ตามที่เราเก็บฟิลด์ ในการออกแบบนี้โมเดลฟิลด์มีลิงก์ทางอ้อมไปยัง Data Access Layer / Repository …

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

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

3
ฉันต้องประนีประนอม: DRY หรือ Command-Query-Separation
ฉันเพิ่ง refactoring วิธีที่ทั้งคำสั่งและวิธีการสืบค้น หลังจากแยกมันเป็นวิธีการหนึ่งคำสั่งและวิธีการค้นหาฉันพบว่าขณะนี้มีหลายสถานที่ในรหัสที่ฉันเรียกคำสั่งแล้วรับค่าจากแบบสอบถามซึ่งดูเหมือนว่าเป็นการละเมิดหลักการ DRY แต่ถ้าฉันจะตัดโค้ดทั่วไปลงในเมธอดเมธอดนั้นจะเป็นทั้งคำสั่งและคิวรี เป็นที่ยอมรับหรือไม่?

4
วิธีประเมินการย้ายไปยังเซิร์ฟเวอร์มูลฐานทีม
ทีมพัฒนาของฉันใช้ซอฟต์แวร์ต่อไปนี้ในเวิร์กโฟลว์ของเราในปัจจุบัน: จิระ Bamboo (การผสมผสานอย่างต่อเนื่อง Atlassian) Greenhopper (การจัดการโครงการ Atileian เปรียว) ที่บรรจบกัน Git โฮสต์บน BitBucket Visual Studio 2012 อย่างที่คุณเห็นเราค่อนข้างลงทุนอย่างหนักในระบบนิเวศของ Atlassian เรากำลังพิจารณาที่จะย้ายไปยัง TFS เพื่อให้เราได้รับประโยชน์จากการผนวกรวม Visual Studio ขั้นสูงเช่นการตรวจสอบโค้ดและที่สำคัญกว่านั้นคือ Microsoft Test Manager ประสบการณ์ที่ผ่านมาของฉันกับ TFS คือเมื่อปี 2005 หรือ 2008 (ฉันจำไม่ได้) และฉันมีความทรงจำที่ไม่ดีแม้ว่ามันจะไม่แย่เท่าเวลาที่ฉันใช้ ClearCase เราควรพิจารณาถึงเกณฑ์ใดบ้างเพื่อประเมินการย้ายไปสู่ ​​TFS อย่างเหมาะสม

3
ข้อใดจะดีกว่าสำหรับการแก้ไขข้อบกพร่องเล็ก ๆ และคุณสมบัติขนาดเล็ก - ตั้งชื่อสาขาตามหมายเลขตั๋วหรือตั้งชื่อพวกเขาตามคำอธิบายคุณลักษณะ?
ฉันอยู่ในช่วงกลางของความไม่ลงรอยกัน (แน่นอน) ด้วยความเป็นผู้นำของฉันเกี่ยวกับการตั้งชื่อสาขาที่เหมาะสม สิ่งนี้ใช้กับสาขาการแก้ไขข้อบกพร่องและสาขาคุณลักษณะขนาดเล็กไม่ใช่สาขาคุณลักษณะระยะยาว สำหรับสาขาคุณลักษณะที่ใช้เวลานานเรายอมรับว่าชื่อที่มนุษย์อ่านได้ดีกว่า ต่อไปนี้เป็นมุมมองสองประการ: เหมืองแร่: การตั้งชื่อสาขาตามทีมและหมายเลขตั๋วจะดีกว่า มันทำให้ง่ายต่อการค้นหาในระบบตั๋วของเราและพิมพ์ให้สั้นลง นอกจากนี้ยังช่วยให้ค้นหาสาขาที่เกี่ยวข้องใน GIT ได้ง่ายขึ้นเมื่อค้นหาข้อมูลประวัติเกี่ยวกับตั๋ว ตัวอย่าง: team-name/12345 team-name/53719 ของพระองค์ การตั้งชื่อสาขาตามคุณสมบัติ / ฟังก์ชั่น มันทำให้การเติมข้อความอัตโนมัติง่ายขึ้นและจดจำได้ง่ายกว่าตัวเลขแต่ละตัว ตัวอย่าง: team-name/fix-that-sql-bug team-name/expand-http-parser การประนีประนอมอย่างหนึ่งที่ฉันเสนอคือ: team-name/12345-fix-that-sql-bug แต่เขาไม่ชอบสิ่งนี้เพราะมันยุ่งกับการเติมข้อความอัตโนมัติของ GIT หากนี่คือพื้นฐานความคิดเห็นโปรดอย่าลังเลที่จะให้คำแนะนำฉันเกี่ยวกับวิธีการนี้เหมาะสำหรับ SO - แต่ฉันคิดว่าเหตุผลที่ฉันให้สามารถแก้ไข / เพิ่มเติมเพื่อให้คำตอบเชิงประจักษ์

5
เมื่อเปรียบเทียบการลอยคุณเรียกเกณฑ์ความแตกต่างว่าอะไร
ฉันเปรียบเทียบลอยใน Java ตอนนี้และสูตรที่ง่ายที่สุดคือ: Math.abs(a - b) < THRESHOLD เมื่อตั้งชื่อตัวแปรของคุณสำหรับเกณฑ์ของความแตกต่างที่คุณควรจะตั้งชื่อมันว่าเดลต้าหรือepsilon ? โดยเฉพาะข้อใดที่เป็นคำที่ถูกต้องสำหรับค่าที่น้อยที่สุดที่ตัวเลขทศนิยมสามารถแทนได้? ภาษาการเขียนโปรแกรมเป็นคำเฉพาะหรือเป็นสากลในภาษา?
10 math 

2
ฉันจะออกแบบเกมการ์ดได้อย่างไร
ฉันไม่สามารถสร้างสถาปัตยกรรมที่ดีสำหรับเกมไพ่ของฉันได้ ฉันต้องการความช่วยเหลือในการทำความเข้าใจว่าเกมได้รับการออกแบบมาอย่างไร ก่อนอื่นฉันจะอธิบายกฎของเกม กฎของเกม ติดตั้ง มีผู้เล่นสี่คนผู้เล่นสองคนรวมกันเป็นทีม ผู้เล่นแต่ละคนจะได้รับไพ่สับ 12 ใบ มีไพ่ตาบอด 4 ใบบนโต๊ะ (ริมแม่น้ำ) คำสั่งของผู้เล่นเป็นเช่นนี้ การพนัน ผู้เล่นแต่ละคนสามารถผ่านหรือเลือกตัวเลขที่มากกว่าเดิมพันปัจจุบันระหว่าง 100 ถึง 160 การเดิมพันเริ่มต้นจากผู้เล่นคนแรกและแวดวงจนกว่าทีมจะผ่าน เมื่อผู้เล่นผ่านพวกเขาไม่สามารถเดิมพันได้อีกต่อไป ทีมที่ชนะในรอบการเดิมพันควรมีคะแนนอย่างน้อยเท่ากับการเดิมพันเพื่อที่จะชนะเกม ทีมที่แพ้ในรอบการเดิมพันไม่ควรอนุญาตให้ทีมของพวกเขาบรรลุเป้าหมาย หากทีมที่ชนะการเดิมพันรอบได้คะแนนทั้งหมดทีมอื่น ๆ จะได้รับคะแนนลบเท่ากับการเดิมพันของพวกเขา หากทีมที่แพ้ในรอบการเดิมพันรวบรวมคะแนนทั้งหมดทีมอื่นจะได้รับคะแนนติดลบสองเท่า การไหลของเกมและคะแนนสะสม ผู้เล่นที่ชนะการเดิมพันรอบ ( ราชา ) จะได้รับไพ่ที่เหลือสี่ใบบนโต๊ะ จากนั้นเธอ / เขาสามารถบันทึกไพ่สี่ใบในธนาคารการ์ดของทีมโดยไม่ต้องเล่น กษัตริย์จะเลือกชุดสูทเป็นชุดไม้บรรทัดและให้คนอื่นรู้ว่า King เริ่มเกมโดยวางไพ่จากมือของเขา / เธอวางบนโต๊ะ ผู้เล่นแต่ละคนควรเล่นตามลำดับนี้ หากพวกเขามีไพ่ชุดเดียวกันในมือพวกเขาจะต้องเล่นไพ่ใบใดใบหนึ่ง หากพวกเขาไม่มีมันพวกเขาสามารถเล่นชุดอื่น ๆ หลังจากผู้เล่นคนอื่น ๆ เล่นด้วยมือผู้ชนะในรอบจะเป็น: ผู้ที่มีไพ่สูงสุดถ้าไพ่ทั้งหมดเหมือนกัน ผู้ที่มีไพ่ …

5
คีย์เวิร์ดการลงทะเบียนจะมีประโยชน์จริงใน C เมื่อใด
ฉันกำลังสับสนเกี่ยวกับการใช้registerคำหลักใน C. มันจะบอกกันโดยทั่วไปว่าการใช้งานไม่จำเป็นต้องเหมือนในคำถามนี้ใน StackOverflow คำหลักนี้ซ้ำซ้อนทั้งหมดใน C เนื่องจากคอมไพเลอร์สมัยใหม่หรือมีสถานการณ์ที่ยังคงมีประโยชน์หรือไม่ ถ้าใช่มีสถานการณ์อะไรบ้างที่การใช้registerคำหลักมีประโยชน์จริง ๆ
10 c  keywords 

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

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