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

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

3
ฉันควรใช้ไฟล์กำหนดค่าหรือฐานข้อมูลสำหรับจัดเก็บกฎทางธุรกิจหรือไม่
ฉันเพิ่งได้อ่านThe Pragmatic Programmerซึ่งระบุว่า: รายละเอียดทำให้รหัสเดิมของเรายุ่งเหยิงโดยเฉพาะอย่างยิ่งหากมีการเปลี่ยนแปลงบ่อยครั้ง ทุกครั้งที่เราต้องเข้าไปและเปลี่ยนรหัสเพื่อรองรับการเปลี่ยนแปลงบางอย่างในตรรกะทางธุรกิจหรือในกฎหมายหรือในรสนิยมส่วนตัวของผู้บริหารของวันที่เราจะเสี่ยงต่อการทำลายระบบ - การแนะนำข้อผิดพลาดใหม่ ล่าแอนดรู; โทมัสเดวิด (1999-10-20) โปรแกรมเมอร์ในทางปฏิบัติ: จาก Journeyman ถึง Master (จุดติดตั้ง 2651-2653) การศึกษาของเพียร์สัน (สหรัฐอเมริกา) จุด Edition. ขณะนี้ฉันกำลังเขียนโปรแกรมเว็บแอปที่มีบางรุ่นที่มีคุณสมบัติที่สามารถมาจากชุดของค่าเท่านั้นเช่น (ไม่ใช่ตัวอย่างจริงเนื่องจากข้อมูลแอปบนเว็บเป็นความลับ): light-> type = sphere / cube / cylinder ประเภทไฟสามารถเป็นค่าสามค่าข้างต้นเท่านั้น แต่ตาม TPP ฉันควรเขียนโค้ดราวกับว่าพวกเขาสามารถเปลี่ยนและวางค่าของพวกเขาในไฟล์ปรับแต่งได้ เนื่องจากมีหลายเหตุการณ์ในแอปนี้คำถามของฉันคือ: ฉันควรเก็บค่าเหล่านี้ไว้ใน: ไฟล์ปรับแต่ง: 'light-types' => array(sphere, cube, cylinder), 'other-type' => value, 'etc' => etc-value ตารางเดียวในฐานข้อมูลที่มีหนึ่งบรรทัดสำหรับแต่ละรายการกำหนดค่า …

7
ฉันต้องการเผยแพร่แอพ Android แต่ฉันกลัวสิทธิบัตรซอฟต์แวร์ [ปิด]
ฉันเขียนแอปพลิเคชันที่ช่วยให้คุณประหยัดพลังงาน จริงๆแล้วมันง่ายมาก ฉันตรวจสอบตำแหน่งปัจจุบันของโทรศัพท์และทำการเปลี่ยนแปลงการกำหนดค่าเช่น "ปิดเสียงจอแสดงผลมืดปิด WiFi ... " ขึ้นอยู่กับตำแหน่งของผู้ใช้ Sony เพิ่งเปิดตัวโทรศัพท์ใหม่ซึ่งรวมถึงหนึ่งในคุณสมบัติของแอพของฉัน (อันที่จริงแล้วพวกเขามีรายการพิเศษในตัวเลือกเมนูนี้ ฉันไม่รู้ว่ามีสิทธิบัตรสำหรับฟังก์ชั่นนี้หรือไม่ ฉันสามารถปล่อยแอพนี้โดยไม่ต้องเสี่ยงต่อการถูกฟ้องร้องได้หรือไม่? ฉันสับสนมากเกี่ยวกับสถานการณ์ "สิทธิบัตร" ทั้งหมด ฉันอายุประมาณ 20 ปีและฉันไม่สามารถแม้แต่จะเขียนแอพง่ายๆโดยไม่ต้องลงทุนเงินจำนวนมากสำหรับนักกฎหมาย แก้ไข: ฉันไม่ได้ขอคำแนะนำทางกฎหมาย ฉันต้องการรับภาพรวมเกี่ยวกับวิธีที่นักพัฒนาเห็นหรือจัดการกับสถานการณ์ทั้งหมด

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

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

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

8
ภาษาที่ใช้งานได้ดีกว่าเมื่อเรียกซ้ำหรือไม่
TL; DR: ภาษาที่ใช้งานได้จัดการการเรียกซ้ำได้ดีกว่าภาษาที่ไม่ทำงานหรือไม่ ขณะนี้ฉันกำลังอ่าน Code Complete 2 ในบางช่วงของหนังสือผู้แต่งเตือนเราเกี่ยวกับการเรียกซ้ำ เขาบอกว่าควรหลีกเลี่ยงเมื่อเป็นไปได้และฟังก์ชั่นที่ใช้การเรียกซ้ำโดยทั่วไปมีประสิทธิภาพน้อยกว่าโซลูชันที่ใช้ลูป ตัวอย่างผู้เขียนเขียนฟังก์ชัน Java โดยใช้การเรียกซ้ำเพื่อคำนวณแฟกทอเรียลของตัวเลขเช่นนั้น (อาจไม่เหมือนกันทั้งหมดเนื่องจากฉันไม่มีหนังสือกับฉันในขณะนี้): public int factorial(int x) { if (x <= 0) return 1; else return x * factorial(x - 1); } นี่เป็นวิธีแก้ปัญหาที่ไม่ดี อย่างไรก็ตามในภาษาที่ใช้งานได้การใช้การเรียกซ้ำเป็นวิธีที่นิยมใช้ในการทำสิ่งต่างๆ ตัวอย่างเช่นนี่คือฟังก์ชันแฟกทอเรียลใน Haskell โดยใช้การเรียกซ้ำ: factorial :: Integer -> Integer factorial 0 = 1 factorial n = n …

12
การพัฒนา C # แยกออกจาก IDE ที่คุณใช้อย่างมีประสิทธิภาพหรือไม่
ฉันเป็นโปรแกรมเมอร์ Python ที่เรียนรู้ C # ที่พยายามหยุดกังวลและเพียงรัก C # ในสิ่งที่มันเป็นมากกว่าที่จะเปรียบเทียบกับ Python อย่างต่อเนื่อง ฉันจมอยู่ในจุดหนึ่ง: การขาดความชัดเจนเกี่ยวกับสิ่งที่กำหนดไว้ตามรายละเอียดในคำถาม Stack Overflowนี้ กล่าวโดยย่อ: ใน C # using fooไม่ได้บอกคุณว่าชื่อfooมีการใช้งานซึ่งคล้ายกับfrom foo import *ใน Python - รูปแบบที่ท้อแท้ภายในวัฒนธรรมการเข้ารหัสของ Python สำหรับการบอกเป็นนัยมากกว่าวิธีที่ชัดเจนfrom foo import barกว่า ฉันค่อนข้างจะประทับใจกับคำตอบของ Stack Overflow จากโปรแกรมเมอร์ C # ซึ่งในทางปฏิบัติแล้วการขาดความชัดเจนไม่สำคัญเพราะใน IDE ของคุณ (สมมุติว่า Visual Studio) คุณสามารถโฮเวอร์เหนือชื่อและได้รับการบอกเล่าจาก ระบบที่ชื่อมาจาก เช่น: ทีนี้ในทางทฤษฎีฉันรู้ว่านี่หมายถึงเมื่อคุณมองด้วยโปรแกรมแก้ไขข้อความคุณไม่สามารถบอกได้ว่าประเภทมาจากอะไรใน C # …

7
เหตุใดสมาชิกข้อมูลแบบคงที่จึงต้องกำหนดนอกคลาสแยกต่างหากใน C ++ (ไม่เหมือนกับ Java)
class A { static int foo () {} // ok static int x; // <--- needed to be defined separately in .cpp file }; ฉันไม่เห็นความต้องการในการA::xกำหนดแยกต่างหากในไฟล์. cpp (หรือไฟล์เดียวกันสำหรับแม่แบบ) ทำไมไม่สามารถA::xประกาศและกำหนดในเวลาเดียวกันได้? มันถูกห้ามด้วยเหตุผลทางประวัติศาสตร์หรือไม่? คำถามหลักของฉันคือมันจะส่งผลกระทบต่อฟังก์ชั่นใด ๆ หากstaticข้อมูลสมาชิกถูกประกาศ / กำหนดในเวลาเดียวกัน (เช่นเดียวกับJava )?

6
ฉันวาดไม่ได้ ฉันจะสร้างแอปพลิเคชันที่ขัดมันได้อย่างไร
ฉันไม่ใช่นักออกแบบกราฟิก ฉันวาดอะไรไม่ดีเลยนะ ฉันพยายามสร้างสิ่งต่าง ๆ ที่ดูดีเหมือนแอพพลิเคชั่น "ตัวอย่าง" ที่มาพร้อมกับเครื่องมือในการพัฒนา ส่วนใหญ่เป็นเพราะฉันไม่ได้หมอบในทางของศิลปะ ฉันควรใช้กลยุทธ์อะไรเพื่อลดสิ่งนี้
41 graphics 

8
ทรัพย์สินส่วนตัวเทียบกับตัวแปร?
เมื่อตั้งค่าให้กับตัวแปรภายในคลาสส่วนใหญ่เราจะแสดงสองตัวเลือก: private string myValue; public string MyValue { get { return myValue; } set { myValue = value; } } มีแบบแผนที่กำหนดว่าเราควรกำหนดค่าให้กับตัวแปรภายในคลาสของเราหรือไม่? ตัวอย่างเช่นถ้าฉันมีวิธีการภายในชั้นเดียวกันฉันควรกำหนดโดยใช้คุณสมบัติหรือใช้ตัวแปรส่วนตัว ฉันเคยเห็นมันทำทั้งสองวิธีดังนั้นฉันสงสัยว่านี่เป็นตัวเลือกหรือประสิทธิภาพเป็นปัจจัย (เล็กน้อยอาจ)

4
ประสิทธิภาพของ Scala เทียบกับ Java
ก่อนอื่นฉันต้องการทำให้ชัดเจนว่านี่ไม่ใช่คำถามภาษา -X- กับภาษา -Y เพื่อตรวจสอบที่ดีกว่า ฉันใช้ Java มานานแล้วและตั้งใจจะใช้มันต่อไป ขนานไปกับสิ่งนี้ฉันกำลังเรียน Scala ด้วยความสนใจอย่างยิ่งนอกเหนือจากสิ่งเล็ก ๆ น้อย ๆ ที่ทำให้ฉันคุ้นเคยกับความประทับใจของฉันก็คือฉันสามารถทำงานได้ดีมากในภาษานี้ คำถามของฉันคือซอฟต์แวร์ที่เขียนใน Scala เปรียบเทียบกับซอฟต์แวร์ที่เขียนใน Java ในแง่ของความเร็วในการดำเนินการและการใช้หน่วยความจำได้อย่างไร แน่นอนว่านี่เป็นคำถามที่ตอบยากโดยทั่วไป แต่ฉันคาดหวังว่าการสร้างระดับที่สูงขึ้นเช่นการจับคู่รูปแบบฟังก์ชันการเรียงลำดับที่สูงขึ้น ฯลฯ แนะนำค่าใช้จ่ายบางอย่าง อย่างไรก็ตามประสบการณ์ปัจจุบันของฉันใน Scala จำกัด เพียงตัวอย่างเล็ก ๆ ภายใต้รหัส 50 บรรทัดและฉันยังไม่ได้ใช้การวัดประสิทธิภาพใด ๆ จนถึงตอนนี้ ดังนั้นฉันไม่มีข้อมูลจริง ถ้าปรากฎว่า Scala มีค่าใช้จ่ายในการเขียน Java ค่อนข้างสมเหตุสมผลหรือไม่ที่จะรวมโครงการ Scala / Java เข้าด้วยกันโดยที่หนึ่งรหัสในส่วนที่ซับซ้อนมากขึ้นใน Scala และส่วนที่มีความสำคัญต่อประสิทธิภาพใน Java นี่เป็นเรื่องธรรมดาไหม แก้ไข 1 …

12
ข้อเสียของรหัสกะตะ
Code kataเป็นแนวคิดที่เสนอให้ฝึกฝนทักษะของโปรแกรมเมอร์โดยการทำปัญหาเล็ก ๆ หลายครั้งที่พยายามปรับปรุงโค้ดในแต่ละครั้ง ชื่อนี้มาจากการเปรียบเทียบกับศิลปะการต่อสู้แบบกะตะซึ่งแบบฟอร์ม (aka กะตะ) เป็นวิธีปฏิบัติที่ทำซ้ำแล้วซ้ำอีกซึ่งนำไปสู่การปรับปรุง จากปฏิกิริยาที่เกิดขึ้นกับคำถามสุดท้ายของฉันในหัวข้อฉันอยากรู้ว่าอะไรคือสิ่งที่ดึงดูดความสนใจของแนวทางนี้?
41 code-kata 

14
การทดสอบหน่วยของอัลกอริทึมแบบสุ่ม / ไม่กำหนด
โครงการปัจจุบันของฉันรวบรัดเกี่ยวข้องกับการสร้าง "เหตุการณ์แบบสุ่ม - จำกัด " ฉันกำลังสร้างตารางการตรวจสอบ บางคนขึ้นอยู่กับข้อ จำกัด ของตารางที่เข้มงวด คุณทำการตรวจสอบสัปดาห์ละครั้งในวันศุกร์เวลา 10:00 น. การตรวจสอบอื่น ๆ คือ "สุ่ม"; มีข้อกำหนดขั้นพื้นฐานที่กำหนดค่าได้เช่น "การตรวจสอบจะต้องเกิดขึ้น 3 ครั้งต่อสัปดาห์", "การตรวจสอบจะต้องเกิดขึ้นระหว่างเวลา 9.00 น. - 21.00 น." และ "ไม่ควรมีการตรวจสอบสองครั้งภายในระยะเวลา 8 ชั่วโมงเดียวกัน" แต่ ภายในข้อ จำกัด ใดก็ตามที่กำหนดค่าไว้สำหรับชุดการตรวจสอบเฉพาะวันที่และเวลาที่เกิดขึ้นไม่ควรคาดเดาได้ การทดสอบหน่วยและ TDD, IMO มีคุณค่าอย่างมากในระบบนี้เนื่องจากสามารถใช้ในการสร้างแบบเพิ่มหน่วยในขณะที่ข้อกำหนดทั้งหมดยังไม่สมบูรณ์และทำให้แน่ใจว่าฉันไม่ได้ "ทำวิศวกรรมมากเกินไป" เพื่อทำสิ่งที่ฉันทำ ตอนนี้ฉันรู้ว่าฉันต้องการ ตารางงานที่เข้มงวดเป็นงานชิ้นเอกสำหรับ TDD อย่างไรก็ตามฉันพบว่ามันยากที่จะกำหนดสิ่งที่ฉันกำลังทดสอบเมื่อฉันเขียนการทดสอบสำหรับส่วนที่สุ่มของระบบ ฉันสามารถยืนยันได้ว่าเวลาทั้งหมดที่ผลิตโดยตัวจัดตารางเวลาจะต้องตกอยู่ภายใต้ข้อ จำกัด แต่ฉันสามารถใช้อัลกอริทึมที่ผ่านการทดสอบดังกล่าวทั้งหมดโดยไม่มีเวลาที่แท้จริง "สุ่ม" มาก ในความเป็นจริงนั้นเป็นสิ่งที่เกิดขึ้นจริง …

10
แอสเซมบลีตัวแรกเขียนด้วยรหัสเครื่องหรือไม่
ฉันกำลังอ่านหนังสือองค์ประกอบของระบบคอมพิวเตอร์: การสร้างคอมพิวเตอร์สมัยใหม่จากหลักการแรกซึ่งมีโครงการที่ครอบคลุมการสร้างคอมพิวเตอร์จากบูลีนเกตจนถึงการใช้งานระดับสูง (ตามลำดับ) โครงการปัจจุบันที่ฉันกำลังทำอยู่กำลังเขียนแอสเซมเบลอร์โดยใช้ภาษาระดับสูงที่ฉันเลือกเพื่อแปลจากรหัสการแฮ็กไปเป็นรหัสเครื่องแฮ็ก (แฮ็คเป็นชื่อของแพลตฟอร์มฮาร์ดแวร์ที่สร้างขึ้นในบทก่อนหน้า) แม้ว่าฮาร์ดแวร์ทั้งหมดจะถูกสร้างขึ้นในเครื่องจำลอง แต่ฉันพยายามที่จะแกล้งทำเป็นว่าฉันกำลังสร้างแต่ละระดับโดยใช้เครื่องมือที่มีให้ฉัน ณ จุดนั้นในกระบวนการจริง ที่กล่าวว่ามันทำให้ฉันคิด การใช้ภาษาระดับสูงในการเขียนแอสเซมเบลอร์ของฉันนั้นสะดวกมาก แต่สำหรับแอสเซมเบลอร์แรกที่เคยเขียน (เช่นในประวัติศาสตร์) มันไม่จำเป็นต้องเขียนในรหัสเครื่องเนื่องจากเป็นสิ่งที่มีอยู่ในเวลานั้นหรือไม่? และคำถามที่มีความสัมพันธ์ ... แล้ววันนี้ล่ะ ถ้าสถาปัตยกรรม CPU ใหม่เอี่ยมออกมาพร้อมชุดคำสั่งใหม่และไวยากรณ์แอสเซมบลีใหม่เอี่ยมแอสเซมเบลอร์จะสร้างขึ้นได้อย่างไร ฉันสมมติว่าคุณยังคงสามารถใช้ภาษาระดับสูงที่มีอยู่เพื่อสร้างไบนารีสำหรับโปรแกรมแอสเซมเบลอร์เพราะถ้าคุณรู้ไวยากรณ์ของทั้งแอสเซมบลีและภาษาเครื่องสำหรับแพลตฟอร์มใหม่ของคุณแล้วงานเขียนแอสเซมเบลอร์ งานวิเคราะห์ข้อความและไม่เกี่ยวข้องโดยธรรมชาติกับแพลตฟอร์มนั้น (เช่นจำเป็นต้องเขียนในภาษาเครื่องของแพลตฟอร์มนั้น) ... ซึ่งเป็นเหตุผลที่ฉันสามารถ "โกง" ในขณะที่เขียนแอสเซมเบลอร์แฮ็คของฉันในปี 2012 และใช้มาก่อน ภาษาระดับสูงเพื่อช่วยฉัน

1
วิธีจัดระเบียบโปรแกรมการทำงาน [ปิด]
ซ้ำได้: การเขียนโปรแกรมฟังก์ชั่นกับ OOP วิธีการเขียนรหัสที่จัดการได้ด้วยการเขียนโปรแกรมการทำงาน? ใน OOP หน่วยพื้นฐานขององค์กรสำหรับโค้ดคือคลาส วิธีการที่ใช้บ่อยใน Java, C # และภาษาที่คล้ายกันคือการจัดระเบียบรหัสของคุณมีไฟล์หนึ่งไฟล์สำหรับแต่ละคลาสด้วยชื่อไฟล์ตามชื่อคลาส คุณสามารถพิจารณาแต่ละคลาสเหล่านี้เป็นหน่วยขององค์กรเพื่อจัดกลุ่มแนวคิดเดียว คลาสเหล่านี้อยู่ในเนมสเปซซึ่งมักจะเป็นไปตามโครงสร้างไดเรกทอรีของไฟล์ในโซลูชัน / โครงการ Namespaces เป็นอีกระดับหนึ่งขององค์กร โครงการขนาดใหญ่ในภาษาที่ใช้งานมักจะจัดระเบียบอย่างไร คุณจะกำหนดวิธีแบ่งฟังก์ชั่นของคุณเป็นไฟล์ต่าง ๆ ได้อย่างไร? มีการจัดกลุ่มหน่วยอื่น ๆ ข้างไฟล์ที่ใช้หรือไม่ ปกติรหัสจะถูกจัดระเบียบอย่างไรภายในไฟล์เดียว?

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