คำถามติดแท็ก defensive-programming

23
วัตถุประสงค์ของการใช้วงเล็บปีกกา (เช่น {}) สำหรับบรรทัดเดียวคือถ้าหรือวนรอบคืออะไร?
ฉันกำลังอ่านบันทึกการบรรยายของอาจารย์ C ++ ของฉันและเขาเขียนสิ่งต่อไปนี้: ใช้การเยื้อง // ตกลง ไม่ต้องพึ่งพาลำดับความสำคัญของโอเปอเรเตอร์ - ใช้เครื่องหมายวงเล็บ // OK ใช้บล็อก {} ทุกครั้ง - แม้สำหรับบรรทัดเดียว // ไม่เป็นไรทำไม ??? วัตถุ Const ที่ด้านซ้ายของการเปรียบเทียบ // ตกลง ใช้เครื่องหมายที่ไม่ได้ลงชื่อสำหรับตัวแปรที่> = 0 // เคล็ดลับดี ตั้งค่าตัวชี้เป็น NULL หลังจากลบ - การป้องกันการลบสองครั้ง // ไม่เลว เทคนิคที่สามไม่ชัดเจนสำหรับฉัน: ฉันจะได้อะไรจากการวางหนึ่งบรรทัดใน { ... } ? ตัวอย่างเช่นใช้รหัสแปลก ๆ นี้: int j = 0; …

20
เมื่อใดที่ฉันควรใช้ Debug.Assert ()
ฉันเป็นวิศวกรซอฟต์แวร์มืออาชีพมาประมาณหนึ่งปีแล้วหลังจากสำเร็จการศึกษาระดับปริญญาตรี ฉันรู้เกี่ยวกับการยืนยันในขณะที่ใน C ++ และ C แต่ไม่รู้ว่าพวกเขามีอยู่ใน C # และ. NET เลยจนกระทั่งเมื่อไม่นานมานี้ รหัสการผลิตของเราไม่มีการยืนยันใด ๆ และคำถามของฉันคือสิ่งนี้ ... ฉันควรเริ่มใช้ Asserts ในรหัสการผลิตของเราหรือไม่ และถ้าเป็นเช่นนั้นการใช้งานที่เหมาะสมที่สุดเมื่อใด มันจะทำให้รู้สึกมากกว่าที่จะทำ Debug.Assert(val != null); หรือ if ( val == null ) throw new exception();

14
เทคนิคในการปิดบังสตริงที่ละเอียดอ่อนใน C ++
ฉันต้องการจัดเก็บข้อมูลที่ละเอียดอ่อน (คีย์เข้ารหัสแบบสมมาตรที่ฉันต้องการเก็บไว้เป็นส่วนตัว) ในแอปพลิเคชัน C ++ ของฉัน วิธีง่ายๆคือทำสิ่งนี้: std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess"; อย่างไรก็ตามการเรียกใช้แอปพลิเคชันผ่านstringsกระบวนการ (หรืออื่น ๆ ที่แยกสตริงจากแอปไบนารี) จะเปิดเผยสตริงด้านบน ควรใช้เทคนิคใดในการปิดบังข้อมูลที่ละเอียดอ่อนดังกล่าว แก้ไข: โอเคคุณทุกคนบอกว่า"ไฟล์ปฏิบัติการของคุณสามารถย้อนกลับทางวิศวกรรมได้"แน่นอน! นี่เป็นสัตว์เลี้ยงของฉันดังนั้นฉันจะคุยโวสักหน่อยที่นี่: เหตุใด 99% (โอเคดังนั้นบางทีฉันพูดเกินจริงเล็กน้อย) ของคำถามเกี่ยวกับความปลอดภัยทั้งหมดในไซต์นี้ได้รับคำตอบพร้อมกับฝนตกหนักว่า "ไม่มีวิธีที่เป็นไปได้ในการสร้างโปรแกรมที่ปลอดภัยอย่างสมบูรณ์แบบ" ซึ่งไม่เป็นประโยชน์ ตอบ! ความปลอดภัยเป็นระดับเลื่อนระหว่างการใช้งานที่สมบูรณ์แบบและไม่มีการรักษาความปลอดภัยที่ปลายด้านหนึ่งและความปลอดภัยที่สมบูรณ์แบบ แต่ไม่มีการใช้งานที่อื่น ประเด็นคือคุณเลือกตำแหน่งของคุณบนสเกลเลื่อนนั้นขึ้นอยู่กับสิ่งที่คุณพยายามทำและสภาพแวดล้อมที่ซอฟต์แวร์ของคุณจะทำงาน ฉันไม่ได้เขียน app สำหรับการติดตั้งทางทหารผมเขียน app สำหรับคอมพิวเตอร์ที่บ้าน ฉันต้องการเข้ารหัสข้อมูลในเครือข่ายที่ไม่น่าเชื่อถือด้วยคีย์การเข้ารหัสที่รู้จักกันดี ในกรณีเหล่านี้ "การรักษาความปลอดภัยผ่านความสับสน" น่าจะดีพอ! แน่นอนว่าใครบางคนที่มีเวลาพลังงานและทักษะเพียงพอสามารถทำวิศวกรรมย้อนกลับไบนารีและค้นหารหัสผ่านได้ แต่เดาอะไร? ฉันไม่สนใจ: เวลาที่ฉันใช้ในการติดตั้งระบบรักษาความปลอดภัยชั้นยอดนั้นแพงกว่าการสูญเสียยอดขายเนื่องจากเวอร์ชันที่แตก (ไม่ใช่ว่าฉันขายสิ่งนี้จริงๆ แต่คุณเข้าใจ) ท้องฟ้าสีครามนี้ "ให้มันเป็นวิธีที่ดีที่สุดเท่าที่จะเป็นไปได้" แนวโน้มในการเขียนโปรแกรมในหมู่โปรแกรมเมอร์มือใหม่นั้นเป็นเรื่องโง่ที่จะพูดน้อยที่สุด ขอขอบคุณที่สละเวลาตอบคำถามนี้ซึ่งเป็นประโยชน์มากที่สุด น่าเสียดายที่ฉันยอมรับคำตอบได้เพียงคำตอบเดียว …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.