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

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

4
การจับคู่รูปแบบกับประเภทการออกแบบที่ใช้สำนวนหรือไม่ดีหรือไม่?
ดูเหมือนว่ารหัส F # มักจะจับคู่รูปแบบกับประเภท อย่างแน่นอน match opt with | Some val -> Something(val) | None -> Different() ดูเหมือนทั่วไป แต่จากมุมมองของ OOP ที่ดูน่ากลัวอย่างมากเช่นโฟลว์ควบคุมตามการตรวจสอบประเภทรันไทม์ซึ่งโดยทั่วไปแล้วจะขมวดคิ้ว หากต้องการสะกดคำใน OOP คุณอาจต้องการใช้การโหลดมากเกินไป: type T = abstract member Route : unit -> unit type Foo() = interface T with member this.Route() = printfn "Go left" type Bar() = interface …

3
อะไรคือโมดูลในวิศวกรรมซอฟต์แวร์ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ตามที่สตีเฟ่น Schach "วิศวกรรมซอฟต์แวร์คลาสสิกและเชิงวัตถุ" บทที่ 6: โมดูลประกอบด้วยบล็อกของรหัสเดียวที่สามารถเรียกใช้ในวิธีที่มีการเรียกใช้โพรซีเดอร์ฟังก์ชันหรือเมธอด ดูเหมือนจะคลุมเครือและกว้างมาก ดังนั้นทุกคนสามารถอธิบายได้อย่างชัดเจนและแสดงตัวอย่างจริงของวิธีแบ่งข้อกำหนดเป็นโมดูล ขอบคุณ
18 software  modules 

1
PHP แสดงสตริงภายในได้อย่างไร
UTF8? UTF16? สตริงใน PHP ติดตามการเข้ารหัสที่ใช้หรือไม่ ลองดูตัวอย่างสคริปต์นี้ พูดว่าฉันวิ่ง: $original = "शक्नोम्यत्तुम्"; เกิดอะไรขึ้นจริงหรือ เห็นได้ชัดว่าฉันคิดว่า$originalจะไม่มีเพียง 7 ตัวอักษร ร่ายมนตร์เหล่านั้นจะต้องถูกแทนด้วยหลายไบต์ที่นั่น จากนั้นฉันก็: $converted = mb_convert_encoding ($original , "UTF-8"); จะเกิดอะไรขึ้น$converted? จะ$convertedแตกต่างจาก$originalอย่างไร มันจะเป็นเพียงลำดับไบต์ที่แน่นอนเหมือนกัน$originalแต่มีการเข้ารหัสที่แตกต่างกันหรือไม่?
18 php  strings 

6
เป็นไปได้ไหมที่จะใช้ C ++ กับ. NET Framework
ฉันได้อ่านความคิดเห็นมากมายเกี่ยวกับการเขียนโปรแกรม GUI ทั้งใน C # และ C ++ และฉันสังเกตเห็นว่า. NET Framework ของ Microsoft นั้นทรงพลังสำหรับการเขียนโปรแกรม GUI เป็นไปได้ไหมที่จะใช้ C ++ และ. NET Framework ฉันคิดว่ามันจะเป็นการผสมผสานที่ยอดเยี่ยมเนื่องจาก C ++ เป็นภาษาที่ทรงพลังและ .NET Framework เป็นที่ต้องการสำหรับการเขียนโปรแกรม GUI บน Windows อย่างที่ฉันได้อ่าน เป็นไปได้ที่จะเขียน GUI ใน C # และฟังก์ชั่นใน C ++ หรือไม่?
18 c++  .net 

4
การเขียน lexer ใน C ++
แหล่งข้อมูลที่ดีในการเขียน lexer ใน C ++ คืออะไร (หนังสือบทเรียนแบบฝึกหัดเอกสาร) เทคนิคและวิธีปฏิบัติที่ดีมีอะไรบ้าง ฉันดูบนอินเทอร์เน็ตและทุกคนบอกว่าจะใช้ตัวสร้าง lexer เช่น lex ฉันไม่ต้องการทำอย่างนั้นฉันต้องการเขียน lexer ด้วยมือ
18 c++  compiler  lexer 

3
“ สถานะ” หรือ“ สถานะ”? เมื่อใดที่ชื่อตัวแปรควรมีคำว่า "state" และเมื่อใดที่ชื่อตัวแปรควรมีคำว่า "สถานะ" แทน? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา การอ่านรหัสและการอภิปรายเกี่ยวกับรหัสฉันมักจะเห็นคำว่า "สถานะ" และ "สถานะ" ใช้แทนกันได้ แต่มีแนวโน้มต่อไปนี้: เมื่อตัวแปรมีค่าไว้เพื่อแสดงว่ามีบางสิ่งอยู่ในสถานะหนึ่งชื่อของตัวแปรนั้นมักจะไม่ประกอบด้วยคำว่า "สถานะ" หรือตัวย่อของตัวแปรนั้น อย่างไรก็ตามเมื่อค่าส่งคืนของฟังก์ชันทำหน้าที่เพื่อระบุสถานะบางอย่างเรามักจะเรียกค่านั้นว่า "รหัสสถานะ" และเมื่อค่านั้นถูกเก็บไว้ในตัวแปรตัวแปรนี้มักมีชื่อว่า "สถานะ" หรือบางอย่างที่คล้ายกัน การแยกนั้นเป็นสิ่งที่ดีฉันเดา แต่เมื่อตัวแปรดังกล่าวเป็นจริงและตัวเลือกจะต้องเลือกที่เกี่ยวข้องกับความซับซ้อนในทางที่ผิดของภาษาอังกฤษ (หรือภาษามนุษย์โดยทั่วไป) อะไรคือรหัสมาตรฐานหรือแบบแผนที่เด่นชัดเมื่อพูดถึงการแก้ปัญหาระหว่างทั้งสอง หรือควรหลีกเลี่ยงหนึ่งในสองอย่างนี้เสมอ? คำถาม english.stackexchangeนี้เกี่ยวข้องด้วยฉันคิดว่า

9
วิธีจัดเก็บสถานะการบันทึก (เช่นรอดำเนินการเสร็จสมบูรณ์แบบร่างยกเลิก ... )
มีแอปพลิเคชันจำนวนมากที่ต้องการบันทึกในตารางเพื่อให้มีสถานะเช่น 'สมบูรณ์', 'ร่าง', 'ยกเลิก' วิธีที่ดีที่สุดในการจัดเก็บสถานะเหล่านี้คืออะไร เพื่อแสดงให้เห็นถึงสิ่งที่ฉันได้รับที่นี่เป็นตัวอย่างที่สั้นมาก) ฉันมีแอปพลิเคชันบล็อกที่เรียบง่ายและโพสต์แต่ละรายการมีสถานะหนึ่งใน: เผยแพร่ร่างหรือรอดำเนินการ วิธีที่ฉันเห็นมันมี 2 วิธีในการสร้างแบบจำลองนี้ในฐานข้อมูล ตารางโพสต์มีฟิลด์ข้อความที่มีข้อความสถานะ ตารางโพสต์มีฟิลด์สถานะที่มี ID ของบันทึกในตาราง PostStatus ตัวอย่างบล็อกที่นี่เป็นตัวอย่างที่ง่ายมาก ที่ enum (ถ้าสนับสนุน) อาจพอเพียง อย่างไรก็ตามฉันต้องการคำตอบสำหรับคำถามเพื่อพิจารณาว่ารายการสถานะสามารถเปลี่ยนแปลงได้ตลอดเวลาดังนั้นสามารถเพิ่มหรือลบได้อีก ทุกคนสามารถอธิบายข้อดี / ข้อเสียของแต่ละคนได้หรือไม่? ไชโย! การเลือกเริ่มต้นของฉันในเรื่องนี้ดีกว่าที่จะใช้ตารางอื่นและค้นหาสถานะว่าดีกว่าสำหรับการทำให้เป็นมาตรฐานและฉันได้รับการสอนเสมอว่าการทำให้เป็นมาตรฐานนั้นดีสำหรับฐานข้อมูล

3
วิธีจัดการกับข้อ จำกัด กุญแจต่างประเทศเมื่อทำการย้ายจากก้อนหินใหญ่ไปเป็นไมโครเซอร์วิซ?
ทีมของฉันกำลังย้ายจากแอปพลิเคชัน ASP.NET แบบเสาหินไปยัง. NET Core และ Kubernetes การเปลี่ยนแปลงรหัสดูเหมือนจะเป็นไปตามคาด แต่ทีมของฉันกำลังเผชิญกับความไม่ลงรอยกันอยู่รอบฐานข้อมูล ขณะนี้เรามีฐานข้อมูล SQL Server ค่อนข้างใหญ่ที่รวบรวมข้อมูลทั้งหมดสำหรับธุรกิจทั้งหมดของเรา ฉันเสนอให้เราแยกฐานข้อมูลในลักษณะที่คล้ายคลึงกับการแยกรหัส - ข้อมูลแคตตาล็อกในฐานข้อมูลหนึ่ง (ตรรกะ) ข้อมูลสินค้าคงคลังในอีกคำสั่งซื้อในอื่นและอื่น ๆ - และแต่ละ microservice จะเป็นผู้ดูแลฐานข้อมูลของมัน . ความหมายที่นี่คือกุญแจต่างประเทศที่ข้ามขอบเขตการให้บริการจะต้องถูกลบออก แบบจำลองข้อมูลทั้งหมดอาจหรือไม่อาจอยู่ในฐานข้อมูลทางกายภาพเดียวกัน แต่แม้ว่าพวกเขาทำแบบนั้นพวกเขาไม่ควรโต้ตอบกันโดยตรง คำสั่งซื้ออาจยังคงอ้างอิงรายการแคตตาล็อกโดย Id แต่ความสมบูรณ์ของข้อมูลจะไม่ถูกบังคับใช้อย่างเคร่งครัดในระดับฐานข้อมูลและข้อมูลนั้นจะต้องเข้าร่วมในรหัสมากกว่าใน SQL ฉันเห็นการสูญเสียสิ่งเหล่านี้เมื่อมีการแลกเปลี่ยนที่จำเป็นเมื่อต้องย้ายไปที่ไมโครเซอร์วิสและรับผลประโยชน์ที่ปรับขนาดได้ที่มาพร้อมกับ ตราบใดที่เราเลือกตะเข็บของเราอย่างชาญฉลาดและพัฒนาไปรอบ ๆ มันก็น่าจะดี สมาชิกในทีมคนอื่น ๆ ยืนกรานว่าทุกอย่างจะต้องอยู่ในฐานข้อมูลเสาหินเดียวกันดังนั้นทุกอย่างสามารถเป็นกรดและรักษาความสมบูรณ์ของการอ้างอิงได้ทุกที่ สิ่งนี้นำมาสู่คำถามของฉัน ก่อนอื่นท่าทางของฉันเกี่ยวกับข้อ จำกัด ของคีย์ต่างประเทศและเข้าร่วมเป็นไปได้หรือไม่ ถ้าเป็นเช่นนั้นมีใครรู้บ้างเกี่ยวกับวัสดุการอ่านที่น่าเชื่อถือที่ฉันสามารถเสนอให้เพื่อนร่วมงานของฉันได้หรือไม่? ตำแหน่งของพวกเขาเกือบจะเป็นศาสนาและพวกเขาดูเหมือนว่าพวกเขาจะถูกครอบงำด้วยอะไรก็ตามที่สั้น ๆ ของ Martin Fowler เขาบอกพวกเขาว่าพวกเขาผิด

1
การใช้ DTO คืออะไรแทนที่จะใช้ Entity
ฉันกำลังทำงานกับแอปพลิเคชัน RCP ฉันยังใหม่กับแอปพลิเคชันนี้ Spring beans ใช้เพื่อเขียนตรรกะทางธุรกิจเพื่อบันทึก / ดึงเอนทิตี แต่แทนที่จะส่งเอนทิตีโดยตรงไปยังไคลเอนต์เรากำลังแปลงเป็น DTOsและเติมลูกค้า ในขณะที่ประหยัดเรากำลังแปลง DTO เป็นเอนทิตีและประหยัดอีกครั้ง ประโยชน์ของการแปลงเหล่านี้คืออะไร มีคนอธิบายได้ไหม
18 java  spring  entity  map  dto 

5
ทำไมการทดสอบหน่วยวิธีส่วนตัวจึงถือว่าเป็นการปฏิบัติที่ไม่ดี?
บริบท: ฉันกำลังทำงานในโครงการขนาดเล็กใน Python ฉันมักจะจัดโครงสร้างชั้นเรียนของฉันด้วยวิธีสาธารณะบางอย่างที่มีการจัดทำเป็นเอกสาร แต่ส่วนใหญ่จะจัดการกับแนวคิดระดับสูง (สิ่งที่ผู้ใช้ของชั้นเรียนควรรู้และใช้) และวิธีซ่อนเร้น (เริ่มต้นด้วยขีดเส้นใต้) ซึ่งรับผิดชอบ การประมวลผลที่ซับซ้อนหรือระดับต่ำ ฉันรู้ว่าการทดสอบมีความสำคัญต่อความมั่นใจในโค้ดและเพื่อให้แน่ใจว่าการดัดแปลงใด ๆ ในภายหลังจะไม่ทำให้พฤติกรรมก่อนหน้านี้เสียหาย ปัญหา: เพื่อสร้างวิธีสาธารณะในระดับที่สูงขึ้นบนฐานที่เชื่อถือได้ฉันมักจะทดสอบวิธีส่วนตัว ฉันพบว่าการแก้ไขรหัสได้แนะนำการถดถอยและตำแหน่งที่ง่ายขึ้นหรือไม่ หมายความว่าการทดสอบภายในเหล่านั้นสามารถทำลายการแก้ไขเล็กน้อยและจะต้องแก้ไข / แทนที่ แต่ฉันก็รู้ด้วยเช่นกันว่าการทดสอบหน่วยวิธีส่วนตัวนั้นเป็นแนวคิดที่ขัดแย้งกันหรืออย่างน้อยก็ถือว่าเป็นแนวปฏิบัติที่ไม่ดี เหตุผล: เป็นเพียงพฤติกรรมสาธารณะเท่านั้นที่ควรได้รับการทดสอบ ( อ้างอิง ) คำถาม: ฉันสนใจเกี่ยวกับการปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดและต้องการที่จะเข้าใจ: เหตุใดการใช้การทดสอบหน่วยในวิธีส่วนตัว / ซ่อนเร้นจึงไม่ดี (ความเสี่ยงคืออะไร) แนวปฏิบัติที่ดีที่สุดคืออะไรเมื่อวิธีสาธารณะสามารถใช้ระดับต่ำและ / หรือการประมวลผลที่ซับซ้อน ความแม่นยำ: มันไม่ได้เป็นวิธีการที่จะคำถาม Python ไม่มีแนวคิดเรื่องความเป็นส่วนตัวที่แท้จริงและวิธีการซ่อนเร้นไม่ได้อยู่ในรายการ แต่สามารถใช้เมื่อคุณทราบชื่อ ฉันไม่เคยได้รับการสอนกฎและรูปแบบการเขียนโปรแกรม: ชั้นเรียนสุดท้ายของฉันมาจากยุค 80 ... ฉันได้เรียนรู้ภาษาเป็นหลักด้วยการลองผิดลองถูกและการอ้างอิงบนอินเทอร์เน็ต

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

3
Robustness กับการแข่งขัน Correctness [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว การอ่าน "รหัสสมบูรณ์ 2" ในย่อหน้าข้อกำหนดคุณภาพฉันพบสิ่งนี้: มีการแลกเปลี่ยนที่ยอมรับได้ระหว่างแอตทริบิวต์การแข่งขันที่ระบุตัวอย่างเช่นระหว่างความแข็งแกร่งและความถูกต้องหรือไม่ (นี่คือจุดของรายการช่องทำเครื่องหมายขนาดใหญ่เพื่อตรวจสอบคุณภาพของข้อกำหนด) ดังนั้นฉันจึงพบคำจำกัดความของความทนทานและความถูกต้องจำนวนมากในเว็บหนังสือวิชาการ ฯลฯ เช่น : ในหนังสือ "Object Oriented Software Construction, 2nd Edition, Bertrand Meyer, Prentice-Hall, 1997" หนังสือ: ความถูกต้อง: ระดับที่ระบบเป็นอิสระจาก [ข้อบกพร่อง] ในข้อมูลจำเพาะการออกแบบและการใช้งาน ความทนทาน: ระดับที่ระบบยังคงทำงานต่อเมื่อมีอินพุตไม่ถูกต้องหรือสภาวะแวดล้อมที่ตึงเครียด อย่างไรก็ตามเรื่องนี้ยังไม่ชัดเจนว่าทำไมและในสถานการณ์ทั้งสองนี้อาจขัดแย้งกัน คำถามของฉันคือทำไมคุณสมบัติทั้งสองนี้ในการแข่งขัน ?

9
polymorphism ใช้ในโลกแห่งความเป็นจริงอย่างไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว ฉันพยายามที่จะเข้าใจว่า Polymorphism ใช้ในโครงการชีวิตจริง แต่ฉันสามารถหาตัวอย่างคลาสสิก (หรือบางอย่างที่คล้ายกัน) ของการมีAnimalคลาสผู้ปกครองด้วยวิธีการspeak()และชั้นเรียนเด็กจำนวนมากที่แทนที่วิธีนี้และตอนนี้ คุณสามารถเรียกใช้เมธอดspeak()บนอ็อบเจ็กต์ลูกใด ๆ ตัวอย่างเช่น: Animal animal; animal = dog; animal.speak(); animal = cat; animal.speak();

6
Foreach-loop พร้อม break / return vs. while-loop ที่มี invariant และ post-condition อย่างชัดเจน
นี่เป็นวิธีที่นิยมมากที่สุด (ดูเหมือนฉัน) ในการตรวจสอบว่าค่าอยู่ในอาร์เรย์หรือไม่: for (int x : array) { if (x == value) return true; } return false; อย่างไรก็ตามในหนังสือที่ฉันอ่านเมื่อหลายปีก่อนโดยอาจ Wirth หรือ Dijkstra มันก็บอกว่าสไตล์นี้ดีกว่า (เมื่อเทียบกับ while-loop ที่มีทางออกด้านใน): int i = 0; while (i < array.length && array[i] != value) i++; return i < array.length; วิธีนี้เงื่อนไขการออกเพิ่มเติมกลายเป็นส่วนหนึ่งที่ชัดเจนของลูปค่าคงที่ไม่มีเงื่อนไขที่ซ่อนอยู่และออกจากภายในลูปทุกอย่างชัดเจนมากขึ้นและมากขึ้นด้วยวิธีการเขียนโปรแกรมแบบมีโครงสร้าง ฉันมักจะแนะนำนี้รูปแบบหลังเมื่อใดก็ตามที่เป็นไปได้และใช้for-loop เพียงสำทับจากไปab ถึงกระนั้นฉันก็ไม่สามารถพูดได้ว่ารุ่นแรกนั้นมีความชัดเจนน้อยกว่า บางทีมันอาจจะชัดเจนและเข้าใจง่ายกว่าอย่างน้อยก็สำหรับผู้เริ่มต้น ดังนั้นฉันยังคงถามตัวเองว่าคำถามใดดีกว่ากัน? บางทีใครบางคนสามารถให้เหตุผลที่ดีแก่คนใดคนหนึ่งในวิธีการ? …

3
เหตุใด Mike Pound จึงวัดความสามารถในการคำนวณของคอมพิวเตอร์ของเขาโดยใช้กราฟิกการ์ดไม่ใช่ตัวประมวลผล
เมื่อไม่นานมานี้ฉันได้ดูวิดีโอ Computerphile ที่ยอดเยี่ยมซึ่งเป็นรหัสผ่านที่ Mike Pound อวดในซูเปอร์คอมพิวเตอร์ของ บริษัท ของเขาที่มีการ์ดกราฟิก 4 ตัว (Titan X's เป็นที่แน่นอน) ในฐานะผู้ที่ชื่นชอบการจำลองเชิงตัวเลขฉันฝันที่จะสร้างเดสก์ท็อปสำหรับงานจำลองเท่านั้น เหตุใด Mike Pound จึงวัดความสามารถในการคำนวณของคอมพิวเตอร์ของเขาด้วยกราฟิกการ์ดและไม่ใช่โปรเซสเซอร์ ถ้าฉันกำลังสร้างคอมพิวเตอร์ฉันควรจะดูแลอะไรมากกว่านี้
17 hardware 

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