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

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

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

2
SQL IN () กับ OR
ฉันทำงานกับแบบสอบถามที่ฉันเขียนวันนี้ต้องเปลี่ยนรหัสจากส่วนWHEREคำสั่งเพื่อใช้ตัวกรอง IN (รายการสิ่ง) แทนการใช้สิ่งที่ชอบ item_desc = 'item 1' OR item_desc = 'item 2' OR item_desc = 'item 3' OR item_desc = 'item 4' ข้างต้นวิ่งเป็นเวลา 15 นาทีและไม่ได้คืนสิ่งใดเลย แต่สิ่งต่อไปนี้ให้ผลลัพธ์ของฉันใน 1.5 นาที item_desc IN ( 'item 1' ,'item 2' ,'item 3' ,'item 4' ) ฉันทำสิ่งนี้ใน SQL และสงสัยว่าทำไม IN (รายการของรายการ) จึงทำงานได้เร็วกว่าคำสั่ง OR - แก้ไข …
23 sql  speed 

4
วิธีจัดการกับการเชื่อมต่อฐานข้อมูลในโมดูลไลบรารี Python
ฉันสร้างห้องสมุดใน Python ที่มีฟังก์ชั่นสำหรับการเข้าถึงฐานข้อมูล นี่คือไลบรารีของ wrapper รอบฐานข้อมูลแอปพลิเคชันบุคคลที่สามซึ่งเขียนขึ้นเนื่องจากความจริงที่ว่าแอปพลิเคชันบุคคลที่สามไม่มี API ที่เหมาะสม ตอนนี้ฉันอนุญาตให้แต่ละฟังก์ชั่นเปิดการเชื่อมต่อฐานข้อมูลในช่วงระยะเวลาของการเรียกใช้ฟังก์ชันซึ่งก็โอเคจนกระทั่งตรรกะโปรแกรมของฉันใช้การเรียกซ้อนกับฟังก์ชันที่ฉันจะเรียกใช้ฟังก์ชันเฉพาะสองสามพันครั้ง มันไม่ได้มีประสิทธิภาพมากนัก การทำโปรไฟล์นี้แสดงให้เห็นว่าค่าใช้จ่ายอยู่ในการตั้งค่าการเชื่อมต่อฐานข้อมูล - หนึ่งครั้งต่อการเรียกใช้ฟังก์ชัน ดังนั้นฉันจึงย้ายการเชื่อมต่อเปิดจากภายในฟังก์ชั่นไปยังโมดูลเองดังนั้นการเชื่อมต่อฐานข้อมูลจะเปิดขึ้นเมื่อนำเข้าโมดูลห้องสมุด สิ่งนี้ทำให้ฉันมีประสิทธิภาพที่ยอมรับได้ ตอนนี้ฉันมีคำถามสองข้อเกี่ยวกับเรื่องนี้ ประการแรกฉันต้องกังวลว่าฉันจะไม่ปิดการเชื่อมต่อฐานข้อมูลอย่างชัดเจนอีกต่อไปและฉันจะทำอย่างไรกับการตั้งค่านี้อย่างชัดเจนได้อย่างไร ประการที่สองสิ่งที่ฉันทำลงไปนั้นใกล้กับขอบเขตของการฝึกฝนที่ดีหรือไม่และฉันจะเข้าใกล้สิ่งนี้ได้อย่างไร?
23 python 

7
หลีกเลี่ยงวิธีที่ซับซ้อนเกินไป - Cyclomatic Complexity
ไม่แน่ใจว่าจะไปเกี่ยวกับวิธีการนี้เพื่อลดความซับซ้อนของวัฏจักร โซนาร์รายงาน 13 ขณะที่ 10 คาดว่าจะเป็น ฉันแน่ใจว่าไม่มีอะไรเป็นอันตรายต่อการออกจากวิธีการนี้เหมือนเดิมอย่างไรก็ตามเพียงแค่ท้าทายฉันว่าจะทำตามกฎของ Sonar อย่างไร ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) …

2
ระดับการอนุญาตของผู้ใช้ใน RESTful API
สมมติว่าฉันมี บริษัท ที่จัดอันดับแมวที่น่ารักที่สุดในอินเทอร์เน็ต ฉันเสนอทรัพยากรที่/cats/ให้แมวที่น่ารักและน่ารักคนล่าสุด ผู้ใช้สามารถได้รับแมว 3 อันดับแรกหากพวกเขาไม่ได้ชำระเงินทั้งหมดหรือลงทะเบียน แมว 10 อันดับแรกถ้าพวกเขาจ่าย 337 ดอลลาร์และเข้าสู่ระบบและแมว 100 อันดับแรกถ้าพวกเขาจ่ายเงิน 1,337 ดอลลาร์และเข้าสู่ระบบฉันมี 'ตัวระบุผู้ใช้' เมื่อทำการร้องขอ ในระยะสั้นผู้บริโภค/cats/จะได้รับจำนวนที่แตกต่างกันของแมวอยู่บนพื้นฐานของพวกเขาใช้การจัดอันดับ ' ฉันมีตัวระบุผู้ใช้ในส่วนสิ้นเปลือง แต่ฉันไม่มีระดับตัวแทนผู้ใช้อย่างชัดเจนในส่วนสิ้นเปลือง ฉันต้องการแจ้งให้ผู้ใช้ทราบว่าพวกเขาสามารถอัพเกรดการสมัครสมาชิกเมื่อทำการร้องขอ นั่นคือฉันต้องการที่จะแยกแยะระหว่าง3 แมวตั้งแต่ผมเพียง แต่นำเสนอ 3 แมวและ3 แมวเนื่องจากว่าสิ่งที่ระดับผู้ใช้ที่ได้รับอนุญาต อะไรคือแนวปฏิบัติที่ดีที่สุดสำหรับการ จำกัด ทรัพยากรเนื่องจากผู้บริโภคมีสิทธิพิเศษไม่เพียงพอและ จำกัด เนื่องจากเป็นสิ่งที่ผู้บริโภคมี ลูกค้าจะรู้ได้อย่างไรว่าพวกเขาสามารถอัพเกรดการจัดอันดับของพวกเขา? นั่นคือพวกเขามีทรัพยากรที่ จำกัด เพราะพวกเขาไม่มีสิทธิ์ การปฏิบัติที่ดีที่สุดที่นี่คืออะไร? หมายเหตุนี่คือการทำให้เข้าใจง่ายโดยรวมของกรณีจริง นอกจากนี้เพื่อชี้แจง - อ่านชื่นชม ปรับปรุง: นี่คือตัวเลือกที่เราพิจารณาแล้ว: การจัดเก็บวัตถุการอนุญาตของผู้ใช้หนึ่งครั้งบนไคลเอนต์การสอบถามมันเมื่อดำเนินการเข้าสู่ระบบหรืออัพเกรดบัญชี การส่งผ่านnullค่าใน JSON บ่งชี้ว่ามีอยู่จริง แต่ไม่มีการถ่ายโอนจริง …
23 rest  http  url  http-response 

7
การสาธิตการรวบรวมขยะเร็วกว่าการจัดการหน่วยความจำด้วยตนเอง
ฉันได้อ่านในหลาย ๆ ที่ (heck ฉันยังเขียนด้วยตัวเอง) ว่าการเก็บขยะอาจทำได้เร็วกว่าการจัดการหน่วยความจำด้วยตนเอง อย่างไรก็ตามการแสดงนั้นยากกว่าที่จะบอก ฉันไม่เคยเห็นรหัสใด ๆ ที่แสดงให้เห็นถึงผลกระทบจากการกระทำนี้ ใครบ้างมีรหัส (หรือรู้ว่าฉันสามารถหาได้ที่ไหน) ที่แสดงถึงข้อได้เปรียบด้านประสิทธิภาพนี้?

7
แก้ไขข้อมูลฐานข้อมูลการผลิตอย่างปลอดภัย
ข้อบกพร่องเกิดขึ้นและบางครั้งข้อมูลจะต้องได้รับการแก้ไขในการผลิต วิธีที่ปลอดภัยที่สุดที่จะไปเกี่ยวกับเรื่องนี้จากมุมมองของ บริษัท ใหญ่คืออะไร? มีเครื่องมือที่สามารถช่วยได้หรือไม่? ต่อไปนี้เป็นข้อควรพิจารณาบางข้อที่ทำให้เกิดข้อกำหนดนี้ ... เราต้องบันทึกว่าใครเป็นคนค้นหาและสิ่งที่พวกเขาวิ่ง โดยหลักการแล้วเราจำเป็นต้องให้สิทธิ์การเข้าถึงแก่บุคคลในการเรียกใช้คิวรีกับตารางที่สนใจและเพียงช่วงเวลาสั้น ๆ เท่านั้น อะไรก็ตามที่กำลังรันเคียวรีจะต้องมีสมาร์ทโฟนบางตัวเพื่อไม่ให้ใช้งานได้นานและล็อค SQL ให้ทำงานโดยไม่ได้รับอนุญาตอย่างชัดเจน กระบวนการนี้จะต้องเป็นผู้ไม่เชื่อเรื่องพระเจ้า DB หรืออย่างน้อยก็เข้าใจ DB2, Oracle, และ SQL Server เราพยายามที่จะลดความเสี่ยงของการสืบค้นแบบ ad-hoc prod-up จากการทำสิ่งที่ผิดและในขณะเดียวกันก็เพิ่มความปลอดภัย / audtis ให้กับกระบวนการ ความคิดหรือความคิด?
23 database  risk 

5
การทดสอบแบบ End-to-end กับการทดสอบแบบยูนิตควรทำการทดสอบแยกกัน
ที่ บริษัท ของเราเรามักจะตรวจสอบให้แน่ใจว่าเราได้ทำการทดสอบแบบครบวงจรสำหรับเว็บไซต์ / แอพเว็บของเรา นั่นหมายความว่าเราเข้าถึง URL กรอกแบบฟอร์มส่งแบบฟอร์มไปยัง URL อื่นและตรวจสอบผลลัพธ์ของหน้า เราทำสิ่งนี้เพื่อทดสอบการตรวจสอบแบบฟอร์มทดสอบว่าเทมเพลต HTML มีตัวแปรบริบทที่ถูกต้อง ฯลฯ นอกจากนี้เรายังใช้มันเพื่อทดสอบตรรกะพื้นฐาน ฉันได้รับการบอกเล่าจากเพื่อนร่วมงานว่าสาเหตุของเรื่องนี้คือเราสามารถลอกออกและเปลี่ยนแปลงการใช้งานพื้นฐาน ณ จุดใดก็ได้ตราบใดที่การทดสอบแบบ end-to-end ผ่าน ฉันสงสัยว่าการแยกประเภทนี้เหมาะสมหรือไม่หรือเป็นเพียงวิธีหลีกเลี่ยงการเขียนการทดสอบสำหรับโค้ดที่เล็กลง?

6
วิธีแก้ปัญหาความคิดเห็นซ้อน
ปรากฏเป็นภาษาเดียวที่ไม่สามารถซ้อนความคิดเห็นได้ คุณมีทางออกที่ดีสำหรับปัญหานี้หรือไม่? วิธีแก้ปัญหาหนึ่งใน C / C ++ และ Java คือการใช้ความคิดเห็นบรรทัดเดียวเท่านั้น แต่มันเป็นไปไม่ได้ที่จะแสดงความคิดเห็นบล็อกขนาดใหญ่ ฉันกำลังเผชิญกับสิ่งนี้: </li><!-- <li><!-- Save --> ดังนั้นฉันต้องผ่านและแก้ไขความคิดเห็นด้วยตนเอง คุณช่วยแนะนำได้ไหมว่าเราควรจัดการเรื่องนี้ในหลาย ๆ ภาษา? ฉันไม่แน่ใจ แต่หลามอาจมีวิธีแก้ปัญหานี้ด้วย'''วิธีที่อาจรวมถึง#ความคิดเห็นในหลาม? `
23 java  c++  python  c  comments 

6
ในฟังก์ชั่นการเขียนโปรแกรมตัวแปรที่ผันแปรได้ในท้องถิ่นโดยไม่มีผลข้างเคียงใด ๆ ที่ยังถือว่าเป็น“ การปฏิบัติที่ไม่ดี”?
มีตัวแปรท้องถิ่นที่ไม่แน่นอนในฟังก์ชั่นที่ใช้ภายในเท่านั้น (เช่นฟังก์ชั่นไม่มีผลข้างเคียงอย่างน้อยก็ไม่ได้ตั้งใจ) ยังถือว่าเป็น "ไม่ทำงาน"? เช่นในการตรวจสอบรูปแบบหลักสูตร "ฟังก์ชั่นการทำงานกับ Scala" จะถือว่าvarการใช้งานไม่ถูกต้อง คำถามของฉันหากฟังก์ชั่นไม่มีผลข้างเคียงการเขียนโค้ดสไตล์ที่จำเป็นยังคงหมดกำลังใจอยู่หรือ? เช่นแทนที่จะใช้การเรียกซ้ำหางที่มีรูปแบบสะสมมีอะไรผิดปกติกับการทำท้องถิ่นสำหรับวงและการสร้างท้องถิ่นที่ไม่แน่นอนListBufferและเพิ่มไปตราบใดที่การป้อนข้อมูลที่ไม่ได้มีการเปลี่ยนแปลงอย่างไร หากคำตอบคือ "ใช่พวกเขาจะหมดกำลังใจเสมอแม้ว่าจะไม่มีผลข้างเคียง" แล้วอะไรคือเหตุผล?

3
เหตุใดตัวเลือก / อาจถือว่าเป็นความคิดที่ดีและข้อยกเว้นที่ตรวจสอบแล้วไม่ได้
ภาษาการเขียนโปรแกรมบางอย่างเช่น Scala มีแนวคิดของOptionประเภท (เรียกอีกอย่างว่าMaybe) ซึ่งสามารถมีค่าหรือไม่ จากสิ่งที่ฉันได้อ่านเกี่ยวกับพวกเขาพวกเขาได้รับการพิจารณาอย่างกว้างขวางว่าเป็นวิธีที่ดีกว่าในการจัดการกับปัญหานี้มากกว่าnullเพราะพวกเขาบังคับให้โปรแกรมเมอร์พิจารณากรณีที่อาจไม่มีค่าแทนที่จะระเบิดในระหว่างรันไทม์ การตรวจสอบข้อยกเว้นใน Java ในทางกลับกันดูเหมือนจะถือว่าเป็นความคิดที่ไม่ดีและ Java ดูเหมือนจะเป็นภาษาที่ใช้กันอย่างแพร่หลายเท่านั้นที่ใช้พวกเขา แต่แนวคิดที่อยู่เบื้องหลังพวกเขาดูเหมือนจะค่อนข้างคล้ายกับOptionประเภทเพื่อบังคับให้โปรแกรมเมอร์จัดการกับข้อเท็จจริงที่ว่าอาจมีข้อยกเว้นเกิดขึ้น มีปัญหาเพิ่มเติมเกี่ยวกับข้อยกเว้นที่ตรวจสอบแล้วซึ่งOptionประเภทไม่มีหรือไม่ หรือแนวคิดเหล่านี้ไม่เหมือนกันอย่างที่ฉันคิดและมีเหตุผลที่ดีในการบังคับให้จัดการอย่างชัดเจนสำหรับตัวเลือกไม่ใช่สำหรับข้อยกเว้น?
23 exceptions 

12
การออกแบบเชิงวัตถุ
สมมติว่าคุณมีสิ่งต่อไปนี้: +--------+ +------+ | Animal | | Food | +-+------+ +----+-+ ^ ^ | | | | +------+ +-------+ | Deer | | Grass | +------+ +-------+ DeerสืบทอดจากAnimalและสืบทอดจากGrassFood จนถึงตอนนี้ดีมาก AnimalวัตถุสามารถกินFoodวัตถุ ทีนี้ลองผสมกันหน่อย ช่วยเพิ่มซึ่งสืบทอดมาจากLionAnimal +--------+ +------+ | Animal | | Food | +-+-----++ +----+-+ ^ ^ ^ | | | | | …

2
C # จะรวมกับคอมไพเลอร์ภาษา C ++ หรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ตามโพสต์นี้: http://channel9.msdn.com/Forums/Coffeehouse/MS-working-on-a-same-compiler-for-C-AND-C--Not-in-incubation-but-for-production- โพสต์นี้มีความจริงมากแค่ไหน? ควรดำเนินการอย่างจริงจังโดยโปรแกรมเมอร์ C ++ ที่ไม่ยอมใครง่ายๆ (เกม devs ฯลฯ ) หรือไม่? แก้ไข: มีจุดประสงค์อื่นสำหรับคำถามนี้ ... C # จะเข้ากันได้กับ C ++ ย้อนหลังหรือไม่
23 c#  c++ 

3
การนำรูปแบบผู้เยี่ยมชมมาใช้สำหรับทรีไวยากรณ์ของบทคัดย่อ
ฉันอยู่ในขั้นตอนการสร้างภาษาโปรแกรมของฉันเองซึ่งฉันใช้เพื่อจุดประสงค์ในการเรียนรู้ ฉันเขียน lexer และ parser ที่สืบเชื้อสายแบบเรียกซ้ำสำหรับชุดย่อยของภาษาของฉัน (ปัจจุบันฉันสนับสนุนการแสดงออกทางคณิตศาสตร์เช่น+ - * /และวงเล็บ) โปรแกรมแยกวิเคราะห์ส่งกลับต้นไม้ทรีของฉันซึ่งฉันเรียกEvaluateวิธีการรับผลลัพธ์ของนิพจน์ ทุกอย่างทำงานได้ดี นี่คือสถานการณ์ปัจจุบันของฉันโดยประมาณ (ตัวอย่างโค้ดใน C # ถึงแม้ว่าจะเป็นผู้ไม่เชื่อเรื่องภาษามาก): public abstract class Node { public abstract Double Evaluate(); } public class OperationNode : Node { public Node Left { get; set; } private String Operator { get; set; } private Node Right …

3
ฉันควรใช้ Debug ยังคงยืนยันในวันนี้?
ฉันเพิ่งเจอรหัสที่เพิ่งเขียนใหม่ซึ่งมีจำนวน Debug.Assert (C #) มากมาย เราควรใช้สิ่งนี้อย่างกว้างขวางแม้ว่าจะใช้ TDD, BDD และการทดสอบหน่วยโดยทั่วไปหรือไม่?

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