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

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

6
กฎข้อที่ 5 - จะใช้หรือเปล่า?
กฎ 3 ( กฎ 5ในมาตรฐาน c ++ ใหม่): หากคุณต้องการประกาศตัว Destructor ให้คัดลอก Constructor หรือตัวดำเนินการกำหนดค่าด้วยตนเองอย่างชัดเจนคุณอาจต้องประกาศทั้งสามอย่างชัดเจน แต่ในทางกลับกัน " รหัสสะอาด " ของ Martin แนะนำให้ลบตัวสร้างและตัวทำลายที่ว่างเปล่าทั้งหมด (หน้า 293, G12: ความยุ่งเหยิง ): สิ่งที่ใช้เป็นตัวสร้างเริ่มต้นโดยไม่มีการใช้งาน? สิ่งที่มันทำคือถ่วงโค้ดด้วยส่วนที่ไม่มีความหมาย ดังนั้นวิธีจัดการกับทั้งสองความคิดเห็นที่ตรงกันข้าม? ควรใช้ตัวสร้าง / ตัวทำลายที่ว่างเปล่าจริงหรือไม่? ตัวอย่างถัดไปแสดงให้เห็นถึงสิ่งที่ฉันหมายถึง: #include <iostream> #include <memory> struct A { A( const int value ) : v( new int( value ) …

6
ฉันควรใช้คุณสมบัติ 'อัตโนมัติ' C ++ 11 ใหม่โดยเฉพาะในลูปหรือไม่
ข้อดี / ข้อเสียของการใช้autoคำหลักโดยเฉพาะในลูปคืออะไร for(std::vector<T>::iterator it = x.begin(); it != x.end(); it++ ) { it->something(); } for(std::map<T>::iterator it = x.begin(); it != x.end(); it++ ) { it->second->something(); } for(auto it = x.begin(); it != x.end(); it++ ) { it->?? } ดูเหมือนว่าถ้าคุณไม่รู้ว่าคุณมีตัววนซ้ำสำหรับแผนที่หรือเวกเตอร์คุณจะไม่รู้ว่าจะใช้หรือไม่ firstหรือsecondเข้าถึงคุณสมบัติของวัตถุโดยตรงหรือไม่? สิ่งนี้ทำให้ฉันนึกถึงการโต้วาที C # ว่าจะใช้คำหลักvarหรือไม่ ความประทับใจที่ฉันได้รับจนถึงขณะนี้คือในโลกคน C ++ พร้อมที่จะใช้autoคำหลักที่มีการต่อสู้น้อยกว่าvarในโลก C …
20 c++  c++11 

7
จะสร้าง UUID ที่“ ปลอดภัยต่อภาษา” ได้อย่างไร
ฉันต้องการใช้สตริงที่สร้างขึ้นแบบสุ่มสำหรับ ID ทรัพยากรของฉันดังนั้นฉันอาจมี URL ที่สั้นกว่านี้: / user / 4jz0k1 แต่ฉันไม่เคยทำเพราะฉันกังวลเกี่ยวกับการสร้างสตริงแบบสุ่มที่สร้างคำที่แท้จริงเช่น: / user / f * cker สิ่งนี้ทำให้เกิดปัญหาสองประการ: อาจทำให้ผู้ใช้สับสนหรืออาจทำให้เกิดความไม่พอใจและอาจทำให้เกิดปัญหากับ SEO ได้เช่นกัน จากนั้นฉันคิดว่าสิ่งที่ฉันต้องทำคือตั้งค่ารูปแบบคงที่เช่นเพิ่มตัวเลขทุกตัวอักษร 2 ตัว ฉันมีความสุขมากกับวิธี 'generate_safe_uuid' ของฉัน แต่แล้วฉันก็รู้ว่ามันดีกว่าสำหรับ SEO และแย่กว่าสำหรับผู้ใช้เพราะมันเพิ่มอัตราส่วนของคำที่สร้างขึ้นจริงเช่น: / user / g4yd1ck5 ตอนนี้ฉันคิดว่าฉันสามารถสร้างวิธีการ 'replace_numbers_with_letters' และตรวจสอบว่ามันไม่ได้สร้างคำใด ๆ กับพจนานุกรมหรืออะไรบางอย่าง ความคิดอื่น ๆ ? PS เมื่อฉันเขียนสิ่งนี้ฉันก็ตระหนักว่าการตรวจสอบคำในภาษามากกว่าหนึ่งภาษา (เช่น: อังกฤษและฝรั่งเศส, สเปน, ฯลฯ ) จะเป็นเรื่องยุ่งเหยิงและฉันก็เริ่มหลงรัก ID …
20 random  uuid 

4
Objective-C หล่นลงมาในความต่อเนื่องของประสิทธิภาพของภาษาหรือไม่
ดูเหมือนว่าจะมีการถกเถียงกันมากมายเกี่ยวกับข้อดีความเร็วต่าง ๆ กับ C หรือ C ++ เมื่อเทียบกับ Java หรือ Python แต่ฉันไม่ค่อยเห็น Objective-C ที่กล่าวถึง ประมาณว่ามันอยู่ในแง่ของประสิทธิภาพภาษา?

7
บูรณาการอย่างต่อเนื่อง: ความถี่ใด
ฉันเปิดตัวบิลด์ทุกครั้งหลังทำคอมมิชชัน แต่ในโปรเจ็กต์ใหม่นี้สถาปนิกเพิ่งขอให้ฉันเปลี่ยนความถี่เป็น "สร้างทุก ๆ 15 นาที" และฉันก็ไม่เข้าใจว่าทำไมจึงเป็นเหตุผลที่ดี การสร้างในแต่ละการกระทำ " ก่อนปิดรายละเอียดบางอย่าง: โครงการ Objective-C (iOS 5) 10 ผู้พัฒนา แต่ละบิลด์ใช้เวลาประมาณ 1 นาทีและรวมถึงการสร้างและทดสอบหน่วย เซิร์ฟเวอร์การรวมเป็น Mac Mini ดังนั้นพลังการประมวลผลจึงไม่เป็นปัญหาสำหรับที่นี่ เราใช้ Jenkins กับปลั๊กอิน XCode ข้อโต้แย้งของฉันคือถ้าคุณสร้างแต่ละการกระทำคุณสามารถเห็นได้ในขณะนี้สิ่งที่ผิดพลาดและแก้ไขข้อผิดพลาดของคุณโดยตรงโดยไม่ต้องรบกวน dev อื่น ๆ บ่อยเกินไป นอกจากนี้ผู้ทดสอบของเราก็ใส่ใจน้อยลงด้วยข้อผิดพลาด UT ด้วยวิธีนี้ ข้อโต้แย้งของเขาคือการที่ devs จะถูกน้ำท่วมโดยอีเมล "ข้อผิดพลาดในการสร้าง" (ซึ่งไม่เป็นความจริงอย่างสมบูรณ์เนื่องจากเจนกินส์สามารถกำหนดค่าให้ส่งอีเมลสำหรับการสร้างที่พังครั้งแรกเท่านั้น) และเมตริกนั้นไม่สามารถทำได้อย่างถูกต้องหากความถี่ ของงานสร้างสูงเกินไป ดังนั้นคุณคิดอย่างไรกับเรื่องนี้?

8
ข้อดี / ข้อเสียระหว่างการเน้นการประมวลผลฝั่งไคลเอ็นต์หรือฝั่งเซิร์ฟเวอร์
เหตุใดฉันจึงต้องการเขียนเว็บแอปที่มีการประมวลผลฝั่งเซิร์ฟเวอร์จำนวนมาก สำหรับฉันแล้วการเขียนโปรแกรมฝั่งไคลเอ็นต์เป็นข้อได้เปรียบอย่างมากเพราะจะทำให้เซิร์ฟเวอร์โหลดมากที่สุดเท่าที่จะเป็นไปได้เพราะมันจะต้องส่งข้อมูลไปยังไคลเอ็นต์ด้วยการประมวลผลที่น้อยที่สุด ฉันเห็นการเขียนแอปพลิเคชันบนเว็บน้อยมากนอกเหนือจากการเขียนฝั่งเซิร์ฟเวอร์และจัดการกับฝั่งไคลเอ็นต์เป็นมุมมองเท่านั้น ทำไมฉันถึงต้องการทำเช่นนี้? ข้อดีอย่างเดียวที่ฉันเห็นคือฉันสามารถเขียนเป็นภาษาใดก็ได้ที่ฉันต้องการ ( http://www.paulgraham.com/avg.html )

3
คำอธิบายอย่างง่ายของซ็อกเก็ต Unix
ฉันสามารถค้นหาและฉันได้ดูรายการวิกิพีเดียและที่อื่น ๆ แล้ว แต่ถึงแม้ว่าฉันจะมีประสบการณ์การเขียนโปรแกรมบางอย่างฉันก็ไม่เข้าใจแนวคิดจริงๆ คุณสามารถปฏิบัติต่อฉันเหมือนอายุ 10 ปีและให้คำอธิบายที่ชัดเจนเกี่ยวกับการสื่อสารซ็อกเก็ตได้หรือไม่?
20 unix  sockets 

4
ใครขยายส่วนต่อประสาน? และทำไม?
AFAIK คลาสextendsแม่และคลาสimplementsอินเทอร์เฟซของฉัน implements SomeInterfaceแต่ผมทำงานในสถานการณ์ที่ฉันไม่สามารถใช้ มันคือการประกาศประเภททั่วไป ตัวอย่างเช่น: public interface CallsForGrow {...} public class GrowingArrayList <T implements CallsForGrow> // BAD, won't work! extends ArrayList<T> ที่นี่ใช้implementsเป็นสิ่งต้องห้าม syntactically ฉันคิดก่อนว่าการใช้อินเทอร์เฟซภายใน <> นั้นเป็นสิ่งต้องห้าม แต่ไม่ใช่ มันเป็นไปได้ฉันมีเพียงแค่ใช้ แทนextends implementsเป็นผลให้ฉัน "ขยาย" อินเทอร์เฟซ ตัวอย่างอื่นนี้ใช้งานได้: public interface CallsForGrow {...} public class GrowingArrayList <T extends CallsForGrow> // this works! extends ArrayList<T> สำหรับฉันดูเหมือนว่าจะไม่สอดคล้องกันทางไวยากรณ์ …

7
Java IDE เขียนด้วยภาษาจาวาบริสุทธิ์ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา มี Java IDE เขียนใน Java หรือไม่ ฉันเพิ่งได้แล็ปท็อป DET ปี 9 ที่โรงเรียนในวันนี้และมีข้อ จำกัด ทุกประเภท ค่อนข้างน่ารำคาญคุณไม่สามารถเรียกใช้งานโปรแกรมอื่นนอกเหนือจากที่ติดตั้งไว้แล้วในระบบ (ด้วยเหตุผลบางอย่างที่พวกเขาไม่ได้ปิดการใช้งานพรอมต์คำสั่งPowerShellหรือ regedit แปลก ๆ ) พวกเขาอนุญาตให้คุณเรียกใช้โปรแกรมปฏิบัติการ Java ดังนั้นฉันคิดว่ามันจะเป็นวิธีเดียวที่จะสามารถเขียนโปรแกรมบนแล็ปท็อปเส็งเคร็งของฉันที่โรงเรียน (เมื่อฉันทำงานทั้งหมดเสร็จตามธรรมชาติ): D แก้ไข: โดยเขียนใน Java ฉันยังหมายความว่าปฏิบัติการที่ใช้ในการเรียกใช้โปรแกรมที่มีนามสกุลไฟล์ "ขวด" จึงทำงานบนJVM แก้ไข 2: ฉันลองDrJava IDE และมันใช้งานได้ดีขอบคุณ (ฉันสามารถรวบรวมและรันโปรแกรม)! เกี่ยวกับการรัน Eclipse ผ่านบรรทัดคำสั่งโดยใช้คำสั่ง …

3
อัลกอริทึมการจัดกลุ่มกราฟที่มีประสิทธิภาพ
ฉันกำลังมองหาอัลกอริทึมที่มีประสิทธิภาพเพื่อค้นหากลุ่มบนกราฟขนาดใหญ่ (มีจุดยอดประมาณ 5,000 และ 10,000 เส้น) จนถึงตอนนี้ฉันใช้อัลกอริทึม Girvan – Newman ที่นำมาใช้ในไลบรารี Java JUNG แต่มันค่อนข้างช้าเมื่อฉันพยายามลบขอบจำนวนมาก คุณช่วยแนะนำฉันเป็นทางเลือกที่ดีกว่าสำหรับกราฟขนาดใหญ่ได้หรือไม่?

3
ฉันจะเปรียบเทียบค่าสองเท่าเพื่อความเท่าเทียมในการทดสอบหน่วยได้อย่างไร
SortedDictionnary<DateTime, double>ฉันเพิ่งได้รับการออกแบบโมดูลอนุกรมเวลาที่อนุกรมเวลาของฉันเป็นหลัก ตอนนี้ฉันต้องการสร้างการทดสอบหน่วยเพื่อให้แน่ใจว่าโมดูลนี้ทำงานได้ตลอดเวลาและให้ผลลัพธ์ที่คาดหวัง การดำเนินการทั่วไปคือการคำนวณประสิทธิภาพระหว่างจุดต่างๆในอนุกรมเวลา ดังนั้นสิ่งที่ฉันทำคือสร้างอนุกรมเวลาด้วยพูด {1.0, 2.0, 4.0} (ในบางวันที่) และฉันคาดว่าผลลัพธ์จะเป็น {100%, 100%} สิ่งนี้คือถ้าฉันสร้างอนุกรมเวลาด้วยตนเองด้วยค่า {1.0, 1.0} และฉันตรวจสอบความเท่าเทียมกัน (โดยการเปรียบเทียบแต่ละจุด) การทดสอบจะไม่ผ่านเนื่องจากจะมีความไม่ถูกต้องเสมอเมื่อทำงานกับการเป็นตัวแทนไบนารีของจริง หมายเลข ดังนั้นฉันตัดสินใจที่จะสร้างฟังก์ชั่นต่อไปนี้: private static bool isCloseEnough(double expected, double actual, double tolerance=0.002) { return squaredDifference(expected, actual) < Math.Pow(tolerance,2); } มีวิธีจัดการกรณีเช่นนี้อีกวิธีหนึ่งหรือไม่?

3
สถาปัตยกรรม / ออกแบบเว็บแอปพลิเคชัน PHP [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันถูกหัวก่อนเป็นงานใหม่ในการพัฒนาเว็บแอปพลิเคชันใน PHP ฉันไม่เคยใหม่กับ PHP แต่ฉันไม่ได้พัฒนาแอพพลิเคชั่นขนาดใหญ่มาก่อน ฉันสงสัยว่าจะวางโครงสร้างการพัฒนาอย่างไรเพื่อหลีกเลี่ยงปัญหาที่จะเกิดขึ้นในอนาคต ฉันจะออกแบบและออกแบบแอพพลิเคชั่นของฉันในแบบที่ช่วยให้พวกเขาปรับขนาดตามเวลาในแง่ของการทำงานและประสิทธิภาพได้อย่างไร ฉันกำลังคิดในสิ่งที่ชอบ: แยกส่วนหลังออกจากส่วนหน้า โครงสร้างไดเรกทอรี ฉันขอขอบคุณพอยน์เตอร์เกี่ยวกับสถาปัตยกรรมและรูปแบบการออกแบบแอพพลิเคชั่นกรอบงานและวิธีการที่ทำให้ฉันสามารถเข้าถึงการพัฒนาเว็บแอปพลิเคชั่น PHP ขนาดใหญ่ได้อย่างยั่งยืน

11
ฉันควรวางแผนและเริ่มต้นโครงการอย่างไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 7 ปีที่ผ่านมา ทุกครั้งที่ฉันเริ่มโครงการฉันตัดสินใจช่วงเวลาสำคัญในการเปลี่ยนคลาสหลักทั้งหมดและรับข้อผิดพลาดที่คลุมเครือ ฉันพยายามวางแผนขั้นสูงและมักจะเริ่มต้นด้วยการเดินเท้าที่ดี แต่จากนั้นฉันไปที่อีกวันหนึ่งและตัดสินใจว่าฉันต้องการที่จะทำมันเป็น 'วิธีอื่น' มีมาตรฐานแปลก ๆ หรือไม่เมื่อเริ่มโครงการเช่นการแมปคลาสและเริ่มต้นด้วยการทดสอบหน่วย? การประชุมที่ดีคืออะไรเมื่อวางแผนและเริ่มโครงการขนาดกลาง โครงการสุดท้ายและเริ่มต้นคือเครื่องจำลองการเคลื่อนไหวของกระสุนปืน - ฉันรู้ว่าสามารถคาดเดาได้

12
ฉันควรใช้แท็กที่ไม่เป็นมาตรฐานในหน้า HTML เพื่อเน้นคำหรือไม่
ฉันต้องการทราบว่าเป็นวิธีปฏิบัติที่ดีหรือถูกกฎหมายในการใช้แท็กที่ไม่ได้มาตรฐานในหน้า HTML สำหรับวัตถุประสงค์ที่กำหนดเอง ตัวอย่างเช่น: Lorem ipsum dolor amet amet, adipiscing elit elet. ผลลัพท์คือ, นั่งอยู่กับคนที่แต่งตัวประหลาด, สิ่งอำนวยความสะดวกด้านล่างโค้ง, หรือ pulvinar odio magna suscipit mi. ฉันต้องการไฮไลต์ "นักการทูต adipiscing elit" เป็นสิ่งสำคัญและ "nisi arcu accumsan arcu" ตามที่ไฮไลต์ ดังนั้นใน HTML ฉันจะใส่: Lorem ipsum dolor sit amet, <important> consectetur adipiscing elit </important> ผลที่ตามมา, สิ่งที่ดีที่สุดคือสิ่งที่ต้องทำ, <highlighted> สิ่งที่ต้องทำ> อาร์ค </highlighted>, …

7
การใช้เทคนิคใหม่สร้างความเสียหายต่อผลผลิตหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ดูเหมือนว่าเมื่อมีประสบการณ์กับชุดเครื่องมือเฉพาะที่คุณต้องทำงานกับการเติบโตสิ่งจูงใจที่จะลองทำสิ่งใหม่ ๆ จะอ่อนตัวลง เมื่อฉันยังใหม่กับงานเขียนโปรแกรมนี้ลองทำสิ่งใหม่ค้นคว้าทางออนไลน์ทำให้ฉันมีประสิทธิผลมากขึ้นเพราะฉันมักจะพบวิธี (หรือไลบรารี) ที่ทำให้งานง่ายขึ้นที่มีการวางกรอบโค้ดไว้แล้ว ดังนั้นการใช้สิ่งใหม่ - สำหรับฉันเช่นเดียวกับในบริบทของ codebase ที่กำหนด - ทำให้ฉันมีประสิทธิผลมากขึ้น ตอนนี้ผมสังเกตเห็นว่ามีมากขึ้นและมากขึ้นกรณีที่สำหรับปัญหาให้ผมรู้ว่ามีอาจจะเป็นทางออกที่ดีกว่า "ออกมี" และพบว่ามันจะ - สมมุติ - ปรับปรุงรหัส อย่างไรก็ตามด้วยความรู้ที่ลึกซึ้งของฉันตอนนี้เกี่ยวกับฐานรหัสมันเป็นเรื่องง่ายกว่ามากในการใช้เครื่องมือที่ไม่ดีที่เรามีและรับวิธีแก้ปัญหา (รวมถึงการทดสอบ) ที่ใช้งานได้ดีกว่าการหาใหม่ ดังนั้นจึงมีความตึงเครียดนี้: "ทำมันอย่างถูกต้อง" กับ "ได้งานdecentlyทำ" นี่เป็นสิ่งที่เกิดขึ้นกับนักพัฒนาจำนวนมากหรือไม่ นี่เป็นปัญหาเฉพาะที่ทราบหรือไม่? (มันเป็นปัญหาจริงหรือเปล่า?) จริง ๆ แล้วมันเกี่ยวข้องกับการเพิ่มระดับประสบการณ์หรือไม่? โอ้และทราบ: ฉันยังคงชอบงานของฉันและชอบที่จะเก็บมันไว้ มันเป็นเพียงว่า - น่าสนใจเสมอ! - ส่วนการวิจัยเล็กลงเพราะฉันเรียนรู้พื้นฐานของรหัสและชุดปัญหาที่เราเผชิญกับแอพของเรา

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