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

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

6
วิธีการกู้คืนจากการแยกเครื่อง จำกัด ?
คำถามของฉันดูเหมือนจะเป็นเรื่องวิทยาศาสตร์ แต่ฉันคิดว่ามันเป็นปัญหาที่พบบ่อยและนักพัฒนาที่มีประสบการณ์และโปรแกรมเมอร์หวังว่าจะมีคำแนะนำเพื่อหลีกเลี่ยงปัญหาที่ฉันพูดถึงในชื่อ Btw. สิ่งที่ฉันอธิบายร้องเป็นปัญหาจริงฉันพยายามแก้ปัญหาเชิงรุกในโครงการ iOS ของฉันฉันต้องการหลีกเลี่ยงค่าใช้จ่ายทั้งหมด โดยเครื่องสถานะ จำกัด ฉันหมายถึงสิ่งนี้> ฉันมี UI ที่มีปุ่มไม่กี่รัฐหลายเซสชันที่เกี่ยวข้องกับ UI นั้นและสิ่งที่ UI นี้แสดงถึงฉันมีข้อมูลบางอย่างที่แสดงค่าบางส่วนใน UI ฉันได้รับและจัดการทริกเกอร์ภายนอกบางอย่าง (แสดงโดยการเรียกกลับจากเซ็นเซอร์) ฉันทำแผนภาพสถานะเพื่อทำแผนที่สถานการณ์ที่เกี่ยวข้องให้ดีขึ้นและเป็นที่พึงปรารถนาใน UI และแอปพลิเคชันนั้น เมื่อฉันค่อยๆติดตั้งโค้ดแอปเริ่มทำงานมากขึ้นตามที่ควรจะเป็น อย่างไรก็ตามฉันไม่มั่นใจมากว่าจะแข็งแกร่งพอ ความสงสัยของฉันมาจากการเฝ้าดูกระบวนการคิดและการนำไปใช้ของฉันเอง ฉันมั่นใจว่าฉันมีทุกอย่างที่ครอบคลุม แต่ก็เพียงพอที่จะทำการทดสอบสัตว์เดรัจฉานใน UI และฉันก็รู้ได้อย่างรวดเร็วว่ายังมีช่องว่างในพฤติกรรม ... ฉันทำการปะแก้พวกเขา อย่างไรก็ตาม ในขณะที่แต่ละองค์ประกอบขึ้นอยู่กับพฤติกรรมจากการป้อนข้อมูลจากส่วนประกอบอื่น ๆ การป้อนข้อมูลบางอย่างจากผู้ใช้หรือแหล่งภายนอกทำให้เกิดห่วงโซ่ของเหตุการณ์เปลี่ยนแปลงสถานะ .. เป็นต้น ฉันมีองค์ประกอบหลายอย่างและแต่ละพฤติกรรมทำงานเช่นเดียวกับทริกเกอร์นี้ที่ได้รับเมื่อทริกเกอร์อินพุท -> และผู้ส่งวิเคราะห์ -> เอาท์พุทบางอย่าง (ข้อความการเปลี่ยนสถานะ) จากการวิเคราะห์ ปัญหาคือสิ่งนี้ไม่ได้มีการควบคุมตัวเองอย่างสมบูรณ์และส่วนประกอบของฉัน (รายการฐานข้อมูลสถานะเซสชันสถานะของปุ่มบางปุ่ม) ... สามารถเปลี่ยนแปลงอิทธิพลลบหรือแก้ไขนอกขอบเขตของเหตุการณ์หรือ สถานการณ์ที่พึงประสงค์ (โทรศัพท์ล่มแบตเตอรี่จะหมดทันทีเมื่อเปิดเครื่อง) …

4
ทำไมต้องใช้ string.Empty มากกว่า“” เมื่อกำหนดให้กับวัตถุสตริง
ฉันใช้งาน StyleCop กับรหัสของฉันและคำแนะนำอย่างหนึ่งของ SA1122 ก็คือการใช้ string.Empty แทนที่จะเป็น "" เมื่อทำการกำหนดสตริงว่างให้กับค่า คำถามของฉันคือเหตุใดจึงถือว่าเป็นวิธีปฏิบัติที่ดีที่สุด หรือนี่เป็นการปฏิบัติที่ดีที่สุดหรือไม่? ฉันคิดว่าคอมไพเลอร์ไม่มีความแตกต่างระหว่างสองข้อความดังนั้นฉันสามารถคิดได้ว่ามันเป็นสิ่งที่สามารถอ่านได้? ดังนั้นคำถามและคำตอบ Jon Skeet ตอบคำถาม
14 c# 

1
อะไรคือความแตกต่างจากโมเดลการพัฒนาแบบผลักและดึง?
ผมอ่านมาก Programming อธิบาย, Second Editionและในบทที่ 11 "ทฤษฎีของข้อ จำกัด" ผู้เขียนพูดคุยเกี่ยวกับความเก่าและล้าสมัย"ดัน" การพัฒนารูปแบบและวิธีการ XP ที่"ดึง" รูปแบบการพัฒนา ดูเหมือนแนวคิดที่สำคัญ แต่จะมีเพียงย่อหน้าเล็ก ๆ และสองภาพเท่านั้นที่เป็นภาพประกอบของ "น้ำตก" และกระบวนการวนซ้ำไม่มีอะไรเฉพาะเจาะจงเกี่ยวกับโมเดลเหล่านี้ยกเว้นจากคำบรรยายภาพ ฉันค้นหาและไม่ไปเพิ่มเติมเกี่ยวกับเรื่องนี้ในส่วนที่เหลือของหนังสือ ฉันไม่สามารถหาคำอธิบายหรือการอภิปรายเพิ่มเติมในอินเทอร์เน็ตได้เช่นกัน หากความแตกต่างเพียงอย่างเดียวเกี่ยวกับสิ่งนั้นคือหนึ่งคือ"น้ำตก"และอีกอย่างหนึ่งคือซ้ำพวกเขาจะผลักทำไมและดึงทำไม? มีใครบ้างที่เข้าใจว่าอะไรคือความแตกต่างระหว่างทั้งสองกับตัวอย่างที่ดี?

5
วิธีการรับรองมาตรฐานการเข้ารหัสเดียวใน. NET ด้วยการสนับสนุนเครื่องมือ
อาจเป็นสถานการณ์พื้นฐานที่ทุกคนคุ้นเคย คุณได้เห็นด้วยกับมาตรฐานการเข้ารหัสในทีมของคุณและตอนนี้ถึงเวลาที่ต้องทำให้แน่ใจว่าทุกคนติดตามพวกเขา บางคนทำผ่านการเขียนโปรแกรมคู่หนักอื่น ๆ รักษารายการมาตรฐานการเข้ารหัสและทำการตรวจสอบด้วยตนเอง คนอื่น ๆ ยังใช้เครื่องมือวิเคราะห์รหัสคงที่จาก Visual Studio เพื่อให้แน่ใจว่ามีการบังคับใช้มาตรฐานการเข้ารหัส อะไรคือวิธีปฏิบัติที่ดีที่สุดของคุณเพื่อรับรองมาตรฐานการเข้ารหัส? คุณใช้เครื่องมือใด - มีเครื่องมือสำคัญบ้างที่ dev ทุกคนควรรู้ คุณจะรวมมาตรฐานรหัสของคุณในเครื่องมือพัฒนาของคุณได้อย่างไร
14 c#  .net  coding-style 

7
การสร้างการทดสอบหน่วยบนชั้น CRUD ของแอปพลิเคชันฉันจะทำให้การทดสอบเป็นอิสระได้อย่างไร
ดังนั้นฉันจึงพยายามทำให้การทดสอบหน่วยของฉันเป็นแบบเล่มต่อไปเท่าที่จะทำได้ แต่มันจะลำบากเมื่อฉันทดสอบวิธีการเพิ่ม / ลบแบบง่าย สำหรับวิธีการเพิ่มฉันโดยทั่วไปต้องสร้างวัตถุจำลองและเพิ่มจากนั้นหลังจากการทดสอบสำเร็จฉันต้องลบวัตถุจำลอง และสำหรับการทดสอบการลบฉันต้องสร้างวัตถุจำลองเพื่อที่จะสามารถลบได้ ในขณะที่คุณสามารถดูว่าการทดสอบอย่างใดอย่างหนึ่งล้มเหลวการทดสอบอื่นจะล้มเหลวเช่นกันเพราะพวกเขาทั้งสองต้องการ เช่นเดียวกับระบบที่คุณจะต้องเขียนการทดสอบว่า "ยกเลิกคำสั่งซื้อ" ... ถ้าคุณต้องการยกเลิกการจำลองบางอย่างก่อนที่จะใช้แบบจำลองนี้จะไม่สอดคล้องกับแนวทางการทดสอบหน่วยหรือไม่ กรณีเช่นนี้หมายถึงการจัดการอย่างไร

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

4
ฐานข้อมูลการเปรียบเทียบ
ฉันเห็นการสนทนามากมายเกี่ยวกับประสิทธิภาพของ db 'x' หรือการเปลี่ยนจาก 'x' เป็น 'y' เพื่อปรับปรุงประสิทธิภาพไซต์ของเรา ฉันยังไม่เห็นการเปรียบเทียบที่เหมาะสมซึ่งทำงานกับฐานข้อมูลประเภทต่างๆ เป็นไปได้ไหมที่จะเขียนเบนช์มาร์กที่มีความหมายซึ่งสามารถใช้ได้กับหลาย ๆ db db เช่น Relational, Document-oriented เป็นต้น คุณจะออกแบบมาตรฐานอย่างไร

5
ฉันจำเป็นต้องมีข้อจำกัดความรับผิดชอบสำหรับซอฟต์แวร์ฟรีหรือไม่
หากฉันเผยแพร่ซอฟต์แวร์บางอย่างบนเว็บไซต์ของฉันซึ่งสามารถดาวน์โหลดและใช้งานได้ฟรีฉันยังต้องมีข้อความปฏิเสธความรับผิดชอบหรือไม่? ฉันหมายความว่าฉันไม่ได้ขายอะไรเลยไม่มีสัญญาดังนั้นทำไมต้องมีการรับประกันโดยนัย ? (ซึ่งทำให้ฉันสงสัยว่าทำไมมีข้อปฏิเสธความรับผิดชอบต่อสิ่งต่าง ๆ เช่นใบอนุญาต MIT) แก้ไข:ฉันไม่ใช่พลเมืองของสหรัฐอเมริกาฉันกำลังมองหาคำตอบทั่วไปที่เป็นไปได้และเฉพาะเจาะจงเท่าที่จำเป็น
14 licensing  legal 

8
จุดประสงค์ของการเพิ่มตัวระบุ Unicode สนับสนุนการใช้ภาษาต่าง ๆ คืออะไร
ฉันเองพบว่ารหัสการอ่านที่เต็มไปด้วยตัวระบุ Unicode ทำให้เกิดความสับสน ในความคิดของฉันมันยังป้องกันไม่ให้รหัสถูกดูแลรักษาได้ง่าย ไม่ต้องพูดถึงความพยายามทั้งหมดที่จำเป็นสำหรับผู้แต่งนักแปลหลายคนที่จะใช้การสนับสนุนดังกล่าว ฉันยังสังเกตเห็นการขาด (หรือการมีอยู่) ของตัวระบุ Unicode อย่างต่อเนื่องสนับสนุนในรายการของ (dis) ข้อดีของการใช้งานภาษาต่าง ๆ (เช่นที่มันสำคัญจริงๆ) ฉันไม่เข้าใจ: ทำไมถึงสนใจมาก?
14 unicode 

4
เหตุใดจึงต้องใช้ phpunit เมื่อใช้การทดสอบด้วยตนเองแบบดั้งเดิม
เมื่อฉันสร้างแอปพลิเคชันเว็บฉันจะทดสอบงานของฉันบนเบราว์เซอร์เพื่อดูว่าฉันได้รับข้อผิดพลาดและแก้ไขหรือไม่ ฉันได้สร้างแอพพลิเคชั่นที่ซับซ้อนและการทดสอบด้วยวิธีนี้ง่ายและรวดเร็ว ฉันได้ดูวิดีโอมากมายบน youtube เกี่ยวกับ phpunit และไม่พบจุดประสงค์ เหตุใดห้องสมุดนี้จึงมีประโยชน์ phpunit เพิ่มเติมสำหรับ pham framworks เช่น CakePHP หรือ zend หรือไม่ ฉันไม่ได้ใช้กรอบใด ๆ เพียงแค่ core php phpunit หรือจะมีประโยชน์สำหรับฉันหรือไม่ ถ้าใช่เป็นอย่างไร นอกจากนี้ยังมี xdebug แต่ฉันไม่แน่ใจว่ามันเกี่ยวข้องหรือไม่

8
วิธีปฏิบัติในการจัดเก็บข้อมูล "มีขนาดใหญ่พอสมควร" ของข้อมูลที่เปลี่ยนแปลงแทบจะไม่เคย?
คิดในแง่ของตารางการค้นหาที่คำนวณล่วงหน้าหรือบางอย่าง การใช้ฐานข้อมูลแทนค่า hardcoding ในแอปพลิเคชันของฉันมีความเหมาะสมที่จุดใด ค่าจะไม่เปลี่ยนแปลงและแยกออกจากนักพัฒนาการบำรุงรักษาอย่างดี 100 ค่า 1k, 10k, 100k? ฉันต้องการเก็บค่าประมาณ 40k ตอนนี้เป็นswitchคำสั่งที่สร้างโดยเครื่องจักร(ซึ่ง VS2010 ไม่พึงพอใจ) แก้ไข: หากใครอยากรู้อยากเห็นนี่คือวิธีที่ฉันเข้าหานี้: ข้อมูลของฉันถูกเก็บไว้ในอาร์เรย์โฟลต 100k สององค์ประกอบนั่นคือสิ่งที่ฉันทำ ใช้เวลาประมาณ 20 วินาทีในการสร้างข้อมูลดังนั้นฉันจึงทำครั้งเดียวแล้วจัดลำดับข้อมูลนั้นเป็นทรัพยากรที่ฝังตัวด้วย BinaryFormatter การนำข้อมูลออกจากกล่องจะใช้เวลาประมาณ 5 มิลลิวินาทีเมื่อเริ่มต้นแอปพลิเคชันและมีประสิทธิภาพสูงกว่าการใช้ฐานข้อมูลที่ฉันกำลังแทนที่

9
การรับรอง Java สำคัญสำหรับบทบาทสถาปนิกหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันต้องการทราบว่า Java Certifications (SCJP, SCWCD และอื่น ๆ ) มีความสำคัญต่อตำแหน่งสถาปนิกเพียงใด หากบุคคลมีประสบการณ์ที่ดีในการพัฒนา Java และต้องการไล่ตามอาชีพของเขาในระดับสถาปนิกพวกคุณคิดว่าเขาต้องได้รับการรับรองประวัติส่วนตัวของเขาหรือไม่ หากเขาไม่เคยทำงานในบทบาทผู้พัฒนานำ? หากคุณสัมภาษณ์ตำแหน่งสถาปนิก และฉันได้ทำงานเป็นผู้พัฒนาเว็บ Java ในทีมต่างๆที่มีประสบการณ์ 5 ปี อย่าเป็นผู้นำเลย และฉันมีป้ายรับรองบน ​​CV ของฉัน นักพัฒนาจะทำให้เส้นทางอาชีพของเขาไปสู่การเป็นสถาปนิกในทีมได้อย่างไร

1
ข้อกำหนดขั้นต่ำสุดและขั้นต่ำสำหรับการบรรจุชุดอักขระ SE Asian สำหรับโครงการระบบฝังตัวคืออะไร
ฉันทำงานให้กับ บริษัท ที่เริ่มรวมระบบคอมพิวเตอร์ฝังตัวเข้ากับผลิตภัณฑ์ของเราที่เราผลิต เรามีผลิตภัณฑ์ที่หลากหลายและกระจายอยู่ทั่วโลก นอกจากนี้เราได้ออกแบบบอร์ดรวมสองสามตัวที่สามารถให้บริการได้หลายวัตถุประสงค์ขึ้นอยู่กับเฟิร์มแวร์ที่ได้รับการกระพริบไปยังระบบ วิธีนี้เราไม่ต้องออกแบบฮาร์ดแวร์คอมพิวเตอร์สำหรับผลิตภัณฑ์ต่าง ๆ ของเรา - สิ่งที่เราต้องทำคือเขียนเลเยอร์เฟิร์มแวร์อีกครั้งเพื่อตอบสนองความต้องการของผลิตภัณฑ์เฉพาะ เนื่องจากข้อ จำกัด ของฮาร์ดแวร์เหล่านี้การเปลี่ยนฮาร์ดแวร์ของเราทำให้การมีเพศสัมพันธ์ แต่การเขียนซอฟต์แวร์ใหม่นั้นง่ายกว่ามาก หนึ่งในผลิตภัณฑ์ของเรามีข้อกำหนดใหม่ที่เราไม่เคยใช้มาก่อนซึ่งเป็นความต้องการของข้อความที่ผู้ใช้ป้อน ขณะนี้เราสามารถจัดเก็บข้อความสากลในแหล่งข้อมูลและมีเพียงตัวอักษรที่จำเป็นเท่านั้นที่ถูกรวบรวมเป็นภาพบิตแมป ซึ่งหมายความว่าเราสามารถจัดเก็บภาษาที่มีอุดมการณ์สูงเช่นข้อความภาษาจีนและญี่ปุ่นในพื้นที่ที่น้อยที่สุดเพราะเราใช้ชุดภาษาทั้งหมดเพียงเล็กน้อยเท่านั้น เนื่องจากผลิตภัณฑ์ใหม่นี้ต้องการให้ผู้ใช้ป้อนข้อความเราจึงต้องใช้ชุดอักขระที่ครอบคลุม ในฐานะนักพัฒนาพีซีฉันคุ้นเคยกับ ASCII, Unicode, UTF-8 และอื่น ๆ อย่างไรก็ตามการใช้ชุดอักขระเต็มรูปแบบของภาษาเหล่านี้ไม่สามารถทำได้เพราะเรามี FRAM จำนวน จำกัด บนกระดาน เพื่อจัดเก็บข้อมูลตัวอักษร ผู้บริหารของฉันหวังว่าจะมีชุดอักขระน้อยที่สุดที่สามารถใช้สำหรับภาษาที่มีอุดมการณ์สูง ฉันเชื่อว่ามีสัทอักษรสำหรับภาษาญี่ปุ่น (ฮิรางานะ) มีตัวอักษรสัทอักษรที่คล้ายคลึงกันสำหรับภาษาจีนเกาหลีเวียดนามและอื่น ๆ เช่นกันและถ้าเป็นเช่นนั้นผู้พูดภาษาเหล่านี้สามารถสื่อสารกับชุดอักขระที่แคบได้หรือไม่ ฉันค่อนข้างมั่นใจว่าคำตอบสำหรับคำถามนั้นคือ "ไม่แน่นอน" แต่เป็นคำถามที่น่าถาม ฝ่ายบริหารได้กำหนดข้อกำหนด "อ่อน" ที่เราสามารถมีชุดอักขระที่ จำกัด เพียงประมาณ 8,000 ตัวครอบคลุมภาษาที่สำคัญทั้งหมดในการใช้งานทั่วไป หากสิ่งนี้เป็นไปไม่ได้เราต้องหาวิธีการทางเลือกบางรูปแบบเพื่อตอบสนองความต้องการของเราโดยใช้ทรัพยากรฮาร์ดแวร์ที่มีอยู่อย่าง จำกัด ของเรา ฉันแน่ใจว่าปัญหานี้จะต้องได้รับการแก้ไขก่อน …

6
วิธีการใช้งานเพียงส่วนหนึ่งของอินเทอร์เฟซ
เมื่อพัฒนาใน OOP บางครั้งจะมีการกำหนดอินเทอร์เฟซ / สัญญาโดยห้องสมุดที่คุณไม่สามารถเปลี่ยนแปลงได้ มาเรียกอินเตอร์เฟสนี้ว่า J ตอนนี้คุณมีออบเจ็กต์คลาส A ที่ใช้วัตถุที่ใช้อินเทอร์เฟซนี้ ข้างในจำเป็นต้องมีข้อกำหนดของอินเตอร์เฟสเพียงเล็กน้อย ฉันสร้างคลาสวัตถุบางอย่างในระหว่างโครงการ (ลองเรียกหนึ่งในประเภท D) ดังนั้นจึงมีค่าใช้จ่ายในการดำเนินการทุกอย่างภายในส่วนติดต่อ J ฉันต้องการใช้ฟังก์ชั่นย่อยในอินเตอร์เฟส J แต่โซลูชันของฉันยังไม่เป็นที่พอใจ: การนำทุกแง่มุมของ J ไปใช้แล้วโยน "notImplementedExceptions" ให้ผู้ใช้วัตถุของฉันเข้าใจผิด: ดูเหมือนว่าวัตถุประเภท D ของฉันจะสอดคล้องกับส่วนต่อประสาน J แต่พวกเขาทำไม่ได้ - และผู้บริโภควัตถุอื่นของฉัน J) ไม่สามารถพึ่งพาความสมบูรณ์ของวัตถุของฉัน การใช้อินเทอร์เฟซที่กำหนดใหม่ห้ามไม่ให้ฉันใช้วัตถุที่ใช้เฉพาะอินเตอร์เฟส J แม้ว่าอินเตอร์เฟส J จะเข้ากันได้กับส่วนต่อประสานของฉันเอง การปล่อยให้วัตถุที่กำหนดเองของฉันใช้อินเตอร์เฟส J จะสร้างค่าใช้จ่ายที่สำคัญเพราะพวกเขาไม่ต้องการฟังก์ชันทั้งหมดนี้ เมื่อฉันสามารถเปลี่ยนอินเตอร์เฟส J ได้ฉันจะสร้าง "super-interface" K ที่มีชุดย่อยของฟังก์ชัน J interface นี้และทำให้ …

6
อนุสัญญาการตั้งชื่อแบบใดที่จะใช้สำหรับพารามิเตอร์ฟังก์ชัน C #
มีสถานการณ์เมื่อชื่อที่ส่งผ่านในพารามิเตอร์จะถูกส่งไปเป็นประเภทใหม่ แต่ชื่อของวัตถุที่ผ่านควรจะยังคงคล้ายกัน สำหรับกรณีของคลาสแอททริบิวต์เราสามารถใช้โอเปอเรเตอร์นี้ได้ แต่สิ่งที่เกี่ยวกับตัวแปรโลคอลในฟังก์ชั่น แบบแผนการเข้ารหัสใดที่ใช้กันอย่างแพร่หลาย ตัวอย่าง, void MyFunc(BaseClass myPara) { DerivedClass _mypara = (BaseClass)myPara; } หรือในทางตรงกันข้าม void MyFunc(BaseClass _myPara) { DerivedClass mypara = (BaseClass)_myPara; } หรืออนุสัญญาอื่น ๆ
14 c#  naming 

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