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

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

4
วิธีหลีกเลี่ยง“ ผู้จัดการ” ในรหัสของฉัน
คำถามนี้ถูกโยกย้ายจาก Code Exchange Stack Stack เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 6 ปีที่แล้ว ขณะนี้ฉันกำลังออกแบบระบบ Entityของฉันใหม่สำหรับ C ++ และฉันมีผู้จัดการจำนวนมาก ในการออกแบบของฉันฉันมีชั้นเรียนเหล่านี้เพื่อผูกห้องสมุดของฉันเข้าด้วยกัน ฉันได้ยินสิ่งเลวร้ายมากมายเมื่อพูดถึงคลาส "ผู้จัดการ" บางทีฉันอาจไม่ได้ตั้งชื่อชั้นเรียนของฉันอย่างเหมาะสม อย่างไรก็ตามฉันไม่รู้ว่าจะตั้งชื่อพวกเขาอย่างไร ผู้จัดการส่วนใหญ่ในห้องสมุดของฉันประกอบด้วยชั้นเรียนเหล่านี้ (แม้ว่ามันจะแตกต่างกันเล็กน้อย): คอนเทนเนอร์ - คอนเทนเนอร์สำหรับวัตถุในตัวจัดการ คุณสมบัติ - คุณลักษณะสำหรับวัตถุในผู้จัดการ ในการออกแบบใหม่สำหรับห้องสมุดของฉันฉันมีชั้นเรียนเฉพาะเหล่านี้เพื่อผูกห้องสมุดของฉันเข้าด้วยกัน ComponentManager - จัดการส่วนประกอบใน Entity System ComponentContainer ComponentAttributes ฉาก * - อ้างอิงถึงฉาก (ดูด้านล่าง) SystemManager - จัดการระบบในระบบองค์กร SystemContainer ฉาก * …

4
คุณจะจัดการกับผู้ใช้หลายคนในการแก้ไขข้อมูลชิ้นเดียวกันใน webapp ได้อย่างไร?
มีโครงการที่ฉันกำลังทำอยู่ที่ต้องการผลิตเว็บแอปพลิเคชันที่จะจัดการรายการงานระหว่างผู้ใช้หลายคน นี่คือรายการงานหลักที่มีรายการงานกระจายโดยผู้ใช้ที่ได้รับอนุญาต ผู้ใช้แต่ละคนมีบัญชีของตนเองเพื่อเข้าสู่ระบบและดูงานที่ได้รับมอบหมาย เป็นไปได้ที่ผู้ใช้หลายคนจะมีภารกิจเดียวที่เหมือนกัน ฉันกำลังพยายามที่จะออกรายละเอียดของโครงการออกมาจากสิ่งนี้ในขณะที่ฉันกำลังดิ้นรนมากขึ้นด้วยแนวคิดโดยรวมของวิธีการจัดการกับสถานการณ์ต่อไปนี้ แต่ถ้ามันช่วยฉันใช้ Java, EclipseLink และ GWT กับ RequestFactory ฐานข้อมูลคือ PostgreSQL ดังนั้นปัญหาเกี่ยวกับความคิดที่ฉันพยายามจะกระทบยอดคือ: หากงานเดียวที่เกิดขึ้นกับผู้ใช้หลายคนเปลี่ยนแปลงในทางใด ๆ เช่นงานที่ทำเสร็จแล้วถูกลบ ฯลฯ รายการงานของผู้ใช้ทั้งหมดที่มีงานนี้จะได้รับการอัปเดต รูปแบบการออกแบบใดที่ช่วยในการนำฟังก์ชั่นนี้ไปใช้? รูปแบบบางอย่างที่ฉันดูเป็นผู้สังเกตการณ์และผู้ไกล่เกลี่ย - มีรูปแบบอื่น ๆ ที่ควรพิจารณาในสิ่งเหล่านี้หรือไม่? สมมติว่ามีผู้ใช้สองคนเปลี่ยนงานเดียวกันในเวลาเดียวกัน ก่อนอื่นฉันควรอนุญาตให้สถานการณ์นั้นเกิดขึ้นหรือฉันควรล็อคไว้จนกว่าจะมีคนหนึ่งหรืออีกคนหนึ่งทำการเปลี่ยนแปลง? ประการที่สองถ้าฉันไม่ใส่กุญแจฉันจะกระทบยอดการเปลี่ยนแปลงที่จะยอมรับได้อย่างไร สิ่งนี้เกี่ยวข้องกับสถานการณ์ใน 1 เนื่องจากผู้ใช้ 1 สามารถส่งข้อมูลและก่อนที่ผู้ใช้ 2 จะได้รับข้อมูลที่อัปเดตเขา / เธออาจดำเนินการต่อไปและส่งการเปลี่ยนแปลงของเขา / เธอ ฉันกำลังมองหาจุดชี้แนะคำแนะนำหรือเคล็ดลับใด ๆ ที่คุณสามารถให้ในการซิงค์ข้อมูลระหว่างอินสแตนซ์ต่าง ๆ ของเว็บแอพนี้อย่างถูกต้อง ฉันจะขอบคุณมันมาก!

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

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

5
เหตุใดชุมชน Lisp จึงต้องการสะสมวงเล็บทั้งหมดเมื่อสิ้นสุดฟังก์ชัน
เหตุใดชุมชน Lisp จึงต้องการสะสมวงเล็บทั้งหมดเมื่อสิ้นสุดฟังก์ชัน: (defn defer-expensive [cheap expensive] (if-let [good-enough (force cheap)] good-enough (force expensive))) ทำไมไม่ใช้การประชุมเช่น C หรือ Java โอเค Lisp มีอายุมากกว่าภาษาเหล่านั้นมาก แต่ฉันกำลังพูดถึง Lispers ร่วมสมัย (defn defer-expensive [cheap expensive] (if-let [good-enough (force cheap)] good-enough (force expensive) ) ) หมายเหตุ: ข้อมูลโค้ดมาจากหนังสือ "ความสุขของ Clojure"

6
การกำเนิดของ SSD มีความหมายสำหรับการปรับฐานข้อมูลหรือไม่?
วันนี้ฉันกำลังอ่านหนังสือเกี่ยวกับการปรับให้เหมาะสมของ SQL Server และดูเหมือนว่าความคิดบางอย่างนั้นขึ้นอยู่กับโมเดลเชิงเส้นของที่เก็บข้อมูล เนื่องจาก SSD มีรูปแบบการจัดเก็บที่แตกต่างกันโดยสิ้นเชิงพวกเขาจะเปลี่ยนเกมด้วยความคำนึงถึงวิธีการปรับแต่งฐานข้อมูลหรือการปรับให้เหมาะสมที่สุดหรือไม่

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

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

11
จะทำอย่างไรเมื่อการประมาณเวลาผิดพลาด
สมมติว่าคุณประเมินเวลาสำหรับกรณีเป็น 3 วัน ในวันที่สองคุณสังเกตเห็นว่าคดีนี้กำลังเติบโตและสถานการณ์ใหม่กำลังโผล่ขึ้นมาซึ่งไม่ได้ถูกนับเมื่อการประมาณเวลาเสร็จสิ้น การค้นพบใหม่นำไปสู่การเพิ่มอีก 2 วัน (รวม 5 วัน) นี่เป็นปัญหาทั่วไปที่คุณจะต้องเผชิญไม่ช้าก็เร็วในฐานะนักพัฒนาซอฟต์แวร์ กลยุทธ์ใดที่สามารถใช้เมื่อคุณจะแจ้งหัวหน้าโครงการถึงเวลาใหม่ในการจัดส่ง บ่อยครั้งที่คุณได้รับคำถามว่าทำไม คุณกระตุ้นเวลาการส่งมอบใหม่อย่างไร ความจริงก็คือโครงการจำนวนมากไม่ต้องใช้เวลามากในการวิเคราะห์และออกแบบในระหว่าง SDLC แก้ไข: ในโครงการที่ซับซ้อนมากไม่ว่าคุณจะใช้เวลาในการวิเคราะห์และออกแบบมานานเท่าไหร่ก็มีความประหลาดใจอยู่เสมอเนื่องจากกฎเกณฑ์ทางธุรกิจนั้นซับซ้อนเกินไป อย่างไรก็ตามในกรณีเช่นนี้ฉันเชื่อว่าหัวหน้าโครงการจะต้องตระหนักถึงความซับซ้อนและมีทัศนคติที่ถูกต้องเมื่อมีเรื่องประหลาดใจที่ไม่คาดคิดเกิดขึ้น คำถามคือวิธีจัดการกับผู้นำโครงการที่ไม่เข้าใจความซับซ้อน

3
มีความแตกต่างอะไรระหว่างการใช้ struct และ std :: pair
ฉันเป็นโปรแกรมเมอร์ C ++ ที่มีประสบการณ์ จำกัด สมมติว่าฉันต้องการใช้STL mapเพื่อจัดเก็บและจัดการกับข้อมูลบางอย่างฉันต้องการทราบว่ามีความแตกต่างที่มีความหมาย (ในประสิทธิภาพ) ระหว่างโครงสร้างข้อมูล 2 วิธี: Choice 1: map<int, pair<string, bool> > Choice 2: struct Ente { string name; bool flag; } map<int, Ente> โดยเฉพาะมีค่าใช้จ่ายใด ๆ ที่ใช้structแทนง่ายpairหรือไม่

2
Python Runtime ทำงานอย่างไร
ฉันมีปัญหาบางอย่างที่เข้าใจแนวคิดของ a runtime libraryโดยเฉพาะ Python ดังนั้นผมจึงได้เขียนบางโปรแกรม Hello World python ./hello_world.pyหลามและตั้งใจที่จะดำเนินการได้ดังนั้นฉันเขียน เกิดอะไรขึ้นระหว่างฉันกดปุ่ม Enter และรหัสเครื่องที่สร้างจากรหัสไพ ธ อนของฉันที่ถูกเรียกใช้งานบน CPU ของฉัน และสิ่งนี้เกี่ยวข้องกับระบบ Python runtime และ / หรือไลบรารี่อย่างไร?
26 python  runtime 

3
รับข้อมูลสิทธิ์ใช้งานสำหรับแพ็คเกจ NuGet ที่ใช้แล้วทั้งหมด
เพื่อให้บ้านของเราเป็นไปตามลำดับฉันต้องการรวบรวมใบอนุญาตโดยอัตโนมัติสำหรับการอ้างอิงโครงการในเอกสารของเราแทนที่จะต้องเพิ่มด้วยตนเอง ไม่มีใครรู้วิธีที่ง่ายในการสำรวจชุดของไฟล์ CSPROJ โดยทางโปรแกรมและแยกข้อมูลใบอนุญาตสำหรับแพ็คเกจอ้างอิงเป็นลิงค์หรือสตริง?

8
หน่วยทดสอบหลายเงื่อนไขในคำสั่ง IF
ฉันมีโค้ดที่ดูเหมือนอะไรเช่นนี้: function bool PassesBusinessRules() { bool meetsBusinessRules = false; if (PassesBusinessRule1 && PassesBusinessRule2 && PassesBusinessRule3) { meetsBusinessRules= true; } return meetsBusinessRules; } ฉันเชื่อว่าควรมีการทดสอบสี่หน่วยสำหรับฟังก์ชั่นนี้โดยเฉพาะ สามเพื่อทดสอบแต่ละเงื่อนไขในคำสั่ง if และตรวจสอบให้แน่ใจว่ามันคืนเท็จ และการทดสอบอีกอย่างหนึ่งที่ทำให้แน่ใจว่าฟังก์ชันนั้นคืนค่าจริง คำถาม:จริง ๆ แล้วควรมีการทดสอบสิบหน่วยแทนหรือไม่ เก้าที่ตรวจสอบแต่ละเส้นทางของความล้มเหลวที่เป็นไปได้ IE: เท็จเท็จเท็จ เท็จเท็จจริง เท็จจริงเท็จ และอื่น ๆ สำหรับแต่ละชุดค่าผสมที่เป็นไปได้ ฉันคิดว่ามันเกินความจริง แต่สมาชิกคนอื่น ๆ ในทีมของฉันทำไม่ได้ วิธีที่ฉันดูคือถ้า BusinessRule1 ล้มเหลวก็ควรกลับเท็จเสมอมันไม่สำคัญว่ามันจะถูกตรวจสอบครั้งแรกหรือครั้งสุดท้าย

7
การเขียนโปรแกรมระบบคืออะไร?
ฉันไม่เคยเข้าใจว่าการเขียนโปรแกรมระบบหมายถึงอะไร คำจำกัดความตามปกติที่ได้รับคือ "... ทำบางสิ่งบางอย่างใกล้เคียงกับระบบปฏิบัติการหรือขยายคุณสมบัติระบบปฏิบัติการ ... " การใช้ Windows API โดยตรงแทนที่จะใช้ไลบรารีบางอันเพื่อบอกว่าไฟล์ i / o ทำให้เป็นโปรแกรมระบบหรือไม่ เขียนโปรแกรมระบบ Android OS หรือไม่? ถ้าฉันเขียนสิ่งที่จะให้เคอร์เนล linux ผ่านคอนโซลเช่นแอพบน Android ฉันกำลังเขียนโปรแกรมระบบอยู่หรือไม่? หากฉันกำลังเขียนซอฟต์แวร์เพื่อควบคุมเครื่องซักผ้าฉันกำลังเขียนโปรแกรมระบบอยู่หรือไม่? ฉันเป็นผู้เริ่มต้นในการเขียนโปรแกรมและนี่ทำให้ฉันสับสนไม่สิ้นสุด โปรดอธิบายการตัดกันด้วย "การเขียนโปรแกรมประยุกต์"

11
หลีกเลี่ยงผู้ประกอบการเพิ่ม Postfix
ฉันได้อ่านแล้วว่าควรหลีกเลี่ยงตัวดำเนินการเพิ่ม postfixเนื่องจากเหตุผลด้านประสิทธิภาพ (ในบางกรณี) แต่สิ่งนี้จะไม่ส่งผลกระทบต่อการอ่านรหัสหรือไม่ ในความเห็นของฉัน: for(int i = 0; i < 42; i++); /* i will never equal 42! */ ดูดีกว่า: for(int i = 0; i < 42; ++i); /* i will never equal 42! */ แต่นี่อาจเป็นเพียงนิสัย เป็นที่ยอมรับฉันไม่ได้เห็นการใช้งาน++iมากมาย ในกรณีนี้ประสิทธิภาพที่ไม่ดีพอหรือไม่ หรือฉันเพียงคนตาบอดและ++iสามารถอ่านได้มากกว่าi++?

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