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

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

2
ภาษาแพร่หลาย - ความขัดแย้งระหว่างความถูกต้องและการใช้งาน
ส่วนหลักของการออกแบบโดเมนขับเคลื่อนคือการใช้ภาษาที่แพร่หลายทั่วทั้งระบบ - ในการสนทนารหัสสคีมาฐานข้อมูล UI การทดสอบและอื่น ๆ ฉันเกี่ยวข้องกับโครงการที่มีภาษาโดเมนที่เป็นที่ยอมรับอยู่แล้วซึ่งกำหนดโดยองค์กรมาตรฐานสากล อย่างไรก็ตามงานที่เราทำมีไว้สำหรับเว็บไซต์สาธารณะและข้อกำหนด 'ที่ถูกต้อง' สำหรับโดเมนนั้นไม่จำเป็นว่าคนทั่วไปจะใช้และเข้าใจพวกเขาอย่างไร การประนีประนอมที่เราใช้อยู่ในขณะนี้คือการใช้คำว่า 'เป็นทางการ' ทุกที่ยกเว้นในเกณฑ์การยอมรับของเราซึ่งอ้างถึงองค์ประกอบ UI ซึ่งเราใช้ชื่อที่ไม่เป็นทางการ ดูเหมือนว่าวิธีการที่เหมาะสมหรือไม่

7
วิธีจัดการกับปัญหาการคอมไพล์โค้ดฐานขนาดใหญ่?
แม้ว่าฉันสามารถเขียนโค้ดได้ แต่ฉันยังไม่มีประสบการณ์ในการทำงานในโครงการขนาดใหญ่ สิ่งที่ฉันทำจนถึงตอนนี้ก็คือการเขียนโปรแกรมขนาดเล็กที่รวบรวมในไม่กี่วินาที (แบบฝึกหัด c / c ++ ต่าง ๆ เช่นอัลกอริทึมหลักการเขียนโปรแกรมแนวคิดแนวความคิดหรือเพียงแค่ลอง api ... ) หรือทำงานในโครงการขนาดเล็กบางโครงการ ทำในภาษาสคริปต์ (python, php, js) โดยไม่จำเป็นต้องรวบรวม สิ่งนี้คือเมื่อโค้ดในภาษาสคริปต์เมื่อใดก็ตามที่ฉันต้องการลองสิ่งที่ใช้ได้ผลฉันแค่เรียกใช้สคริปต์และดูว่าเกิดอะไรขึ้น หากสิ่งต่าง ๆ ไม่ทำงานฉันสามารถเปลี่ยนรหัสและลองใหม่อีกครั้งโดยเรียกใช้สคริปต์อีกครั้งและทำต่อไปเรื่อย ๆ จนกว่าฉันจะได้ผลลัพธ์ตามที่ฉันต้องการ .. ประเด็นของฉันคือคุณไม่ต้องรอ อะไรก็ตามที่จะรวบรวมและเพราะมันค่อนข้างง่ายที่จะใช้ฐานรหัสขนาดใหญ่ดัดแปลงแก้ไขเพิ่มบางอย่างเข้ากับมันหรือเล่นกับมัน - คุณสามารถเห็นการเปลี่ยนแปลงได้ทันที เป็นตัวอย่างฉันจะใช้ Wordpress มันค่อนข้างง่ายที่จะลองและคิดวิธีการสร้างปลั๊กอินสำหรับมัน ก่อนอื่นคุณต้องเริ่มต้นด้วยการสร้างปลั๊กอิน "Hello World" อย่างง่ายจากนั้นคุณสร้างอินเทอร์เฟซที่ง่ายสำหรับผู้ดูแลระบบเพื่อทำความคุ้นเคยกับ API จากนั้นคุณสร้างมันขึ้นมาและทำให้สิ่งที่ซับซ้อนมากขึ้นในเวลาที่เปลี่ยนไป ครั้ง .. ความคิดที่จะต้องคอมไพล์บางสิ่งที่ยิ่งใหญ่เท่า WP ซ้ำแล้วซ้ำอีกหลังจากการเปลี่ยนแปลงเล็กน้อยแต่ละครั้งเพื่อลอง "ถ้ามันได้ผล" และ "การทำงาน / รู้สึกอย่างไร" …

13
เราสามารถรับประกันได้ว่าโปรแกรมจะไม่ผิดพลาดหรือไม่?
เรามีระบบที่นี่ เมื่อเร็ว ๆ นี้มีการคำนวณที่ไม่ถูกต้องในตัวเลขหนึ่งตัวในรายงานที่ระบบสร้างขึ้น จากประสบการณ์ของเราเราไม่เคยพบปัญหา / ข้อผิดพลาดใด ๆ ในระบบนี้มาหลายปี เนื่องจากผู้เขียนระบบนี้ได้หายไปแล้วเราจึงแทบจะไม่สามารถติดตามโปรแกรมได้ แต่เราได้ตรวจสอบข้อมูลอินพุตการตั้งค่าและถูกต้องแล้ว ตอนนี้คำถามของฉันคือโปรแกรมคอมพิวเตอร์จะเกิดข้อผิดพลาดโดยไม่มีเหตุผลหรือไม่? ถ้าฉันกดเครื่องเซิร์ฟเวอร์หนึ่งในจำนวนที่คอมพิวเตอร์คำนวณจะกลายเป็นหมายเลขอื่นและคำนวณผิดหรือไม่ ฉันเห็นด้วยกับความคิดของฉันว่ามันค่อนข้างบ้า แต่ฉันแค่อยากรู้เราจะรู้ได้อย่างไรว่าปัญหาไม่ได้เกิดจากโปรแกรมและอินพุต แต่มีปัจจัยอื่น ๆ PS ระบบบ้านี้ไม่มีบันทึก
10 debugging 

5
การวางแผนโปกเกอร์และนักพัฒนาคำ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ทีมของฉันประกอบด้วยนักพัฒนา 4 คน ทั้งหมดปรุงรสและมีทักษะ หนึ่งในนั้นคือบทที่มีเจตนาดีและมีเจตนาดีซึ่งยืนยันในการกำหนดวิธีแก้ปัญหาทางเทคนิคให้กับเรื่องราวของเราก่อนที่เราจะวางประมาณการของเราด้วยการวางแผนโป๊กเกอร์ เขาปฏิเสธที่จะประเมินว่าเขาไม่มีความรู้คร่าวๆเกี่ยวกับโซลูชันทางเทคนิคที่ตกลงกันไว้ (ซึ่งฟังดูสมเหตุสมผลใช่ไหม) ปัญหาคือช่วงการประเมินของเราใช้เวลาตลอดไปจนแล้วเสร็จ !! จากประสบการณ์ของคุณคุณจะรับมือกับบุคลิกแบบนี้อย่างไรเมื่อเล่นโป๊กเกอร์ที่วางแผนไว้
10 agile  planning 

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

4
อัลกอริทึมอย่างรวดเร็วเพื่อค้นหาอาร์เรย์เรียงลำดับของการลอยเพื่อหาคู่ของการลอยคร่อมค่าการป้อนข้อมูล
ฉันมีอาร์เรย์ของลอยเรียงจากที่เล็กที่สุดไปหามากที่สุดและต้องสามารถเลือกลอยที่ใกล้ที่สุดที่มากกว่าหรือน้อยกว่าค่าอินพุตที่ผ่าน ค่าอินพุตนี้ไม่จำเป็นต้องแสดงเป็นค่าในอาร์เรย์ แนวทางที่ไร้เดียงสาคือการค้นหาเชิงเส้นอย่างง่ายผ่านอาร์เรย์ ที่อาจมีลักษณะเช่นนี้: void FindClosestFloatsInArray( float input, std::vector<float> array, float *min_out, float *max_out ) { assert( input >= array[0] && input < array[ array.size()-1 ] ); for( int i = 1; i < array.size(); i++ ) { if ( array[i] >= input ) { *min = array[i-1]; *max = …
10 c++  algorithms 

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

3
ทำไม getMonth () เริ่มต้นด้วย 0
ฉันเขียนโค้ดฟังก์ชั่นเพื่อลบวันจากค่าวันที่ใน javascript และฉันประหลาดใจที่ getMonth ของ javascript เริ่มต้นจาก 0 ถึง 11 มกราคมสำหรับธันวาคม ทำไม getMonth ของ javascript เริ่มต้นด้วย 0
10 javascript 

5
การตรวจสอบใบอนุญาตและการโทรกลับบ้าน
ฉันกำลังพัฒนาแอพพลิเคชั่นที่เมื่อซื้อแล้วสามารถเปิดใช้งานได้โดยใช้ใบอนุญาต ขณะนี้ฉันกำลังทำการตรวจสอบความถูกต้องออฟไลน์ซึ่งเป็นเรื่องที่ค่อนข้างหนักใจสำหรับฉัน ฉันรู้ว่าไม่มีอะไรจะทำอย่างไรกับการแตกร้าว (เช่นไบนารีที่แก้ไขแล้ว) แต่ฉันคิดว่าจะพยายามกีดกันการละเมิดลิขสิทธิ์คีย์ - ลิขสิทธิ์ นี่คือแผนปัจจุบันของฉัน: เมื่อผู้ใช้เปิดใช้งานซอฟต์แวร์และหลังจากการตรวจสอบออฟไลน์สำเร็จก็จะพยายามโทรกลับบ้านและตรวจสอบใบอนุญาต หากบ้านได้รับการอนุมัติใบอนุญาตหรือถ้าที่บ้านไม่สามารถเข้าถึงหรือถ้าผู้ใช้เป็นแบบออฟไลน์ใบอนุญาตที่ได้รับการอนุมัติ หากถึงบ้านและแจ้งว่าใบอนุญาตไม่ถูกต้องการตรวจสอบจะล้มเหลว แอปพลิเคชันที่ได้รับใบอนุญาตจะโทรกลับด้วยวิธีเดียวกันทุกครั้งในระหว่างการเริ่มต้น หากใบอนุญาตถูกเพิกถอน (เช่นใบอนุญาตละเมิดลิขสิทธิ์หรือสร้างขึ้นผ่าน Keygen) ใบอนุญาตจะถูกปิดการใช้งาน สิ่งนี้จะช่วยในเรื่องการละเมิดลิขสิทธิ์ - ใบอนุญาตที่ไม่ถูกต้องจะถูกปิดการใช้งานและใบอนุญาตที่ถูกต้องที่ถูกละเมิดลิขสิทธิ์สามารถถูกเพิกถอนได้ ผู้ใช้ที่ละเมิดลิขสิทธิ์จะถูกบังคับให้ใช้เวอร์ชั่นที่แตกซึ่งมักจะเป็นเวอร์ชั่นเฉพาะและเข้าถึงได้ยากขึ้น แม้ว่าโดยทั่วไปแล้วจะฟังดูดีสำหรับฉัน แต่ฉันมีข้อกังวลบางอย่าง: ผู้ใช้มักจะไม่ชอบการโทรกลับบ้านและการตรวจสอบออนไลน์ การตรวจสอบประเภทนั้นรบกวนคุณหรือไม่ แม้ว่าในกรณีที่ออฟไลน์ / ล้มเหลวแอปพลิเคชันยังคงได้รับอนุญาตอยู่หรือไม่ เป็นที่ชัดเจนว่ารูปแบบทั้งหมดสามารถป้องกันได้โดยไปที่ออฟไลน์ / ไฟร์วอลล์ / ฯลฯ ฉันคิดว่าการทำสิ่งใดสิ่งหนึ่งเหล่านี้นั้นดีพอที่จะกีดกันการแบ่งปันสัญญาอนุญาตแบบไม่เป็นทางการ แต่ฉันไม่แน่ใจ ตามปกติแล้วจะเกี่ยวข้องกับการให้สิทธิ์ใช้งานและการเปลี่ยนแปลง DRM ฉันไม่แน่ใจว่าเวลาที่ฉันใช้ในการป้องกันแบบนั้นจะไม่ดีขึ้นเมื่อใช้ผลิตภัณฑ์ของฉัน ฉันขอขอบคุณที่ป้อนและความคิดของคุณ ขอบคุณ!
10 licensing 

3
อะไรคือเหตุผลเบื้องหลัง“ I” แบบแผนการตั้งชื่อนำหน้าสำหรับอินเตอร์เฟสใน. NET?
ฉันรู้ว่าการประชุม "ฉัน" เป็นเรื่องที่เกิดขึ้นตั้งแต่ COM แต่ฉันไม่เคยเข้าใจเลยว่าทำไมมันถึงไม่ได้รับการพิจารณาเหมือนการประชุมตั้งชื่ออื่น ๆ ทุกครั้งก่อนที่. การบริโภคที่ชาญฉลาดสิ่งเดียวที่แยกอินเทอร์เฟซออกจากกันคือคลาสนามธรรมคือพวกมันสามารถสืบทอดได้หลายทาง แต่ทุกอย่างหลังจาก Visual Studio 2003 ได้แสดงลายเซ็นประเภทในคำแนะนำเครื่องมือมันไม่มีประโยชน์เหมือนกับสัญลักษณ์ฮังการีอื่น ๆ ทั้งหมดที่ถูกทิ้งไป ฉันคิดว่าอาจเป็นเช่นนั้นเพื่อให้คุณสามารถใช้งานอินเทอร์เฟซพื้นฐานที่มีชื่อเดียวกันเช่นการMessageสืบทอดIMessageแต่ไลบรารี NET ส่วนใหญ่ได้หายไปสำหรับการเพิ่มคำว่า "Base" ที่ท้าย (เช่นSystem.Collections.ReadOnlyCollectionBase) แทน - และสิ่งนี้ทำให้รู้สึกความหมายมากขึ้น การทำงานร่วมกันของ COM น่าจะเป็นอีกเหตุผลหนึ่งที่เป็นไปได้ - แต่ไม่ใช่ว่าคลาสของ wrapper ที่มันสร้างนั้นมีความแปลกประหลาดอย่างสมบูรณ์ใน. NET ดังนั้นฉันจึงสงสัยว่านั่นเป็นการพิจารณาด้านสุนทรียภาพ ในโครงการใหม่ของฉันฉันลืมการประชุมทั้งหมดและรู้สึกดี มีบางอย่างที่ฉันขาดหายไปหรือไม่?
10 .net  naming 

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

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

2
ต้องการคำแนะนำในการออกแบบปฏิสัมพันธ์ระหว่างส่วนต่าง ๆ ของแอปพลิเคชันของฉัน
ฉันกำลังพยายามออกแบบคลาส "หลัก" ของแอปพลิเคชัน Rich Desktop โดยใช้แพลตฟอร์ม NetBeans 7 แอปพลิเคชันนี้จะใช้บริการ HTTP และผ่าน "ระบบพุช" ผ่าน TCP จะได้รับข้อความ เราเป็น 3 ผู้พัฒนาและเราต้องการพัฒนาโมดูลในแบบคู่ขนาน แอปพลิเคชันจะถูกแบ่งเป็นชั้น (ข้อมูลธุรกิจการนำเสนอ) เราจะใช้รูปแบบการนำเสนอเพื่อแยกความรับผิดชอบออกจากกัน ข้อมูลที่ละเอียดบางอย่าง (ตัวอย่างเช่น bean Person) จะถูกแบ่งใช้โดยหลายหน้าจอ (และอาจแสดงบนหลายหน้าจอในเวลาเดียวกัน) ... เราสามารถพัฒนาแต่ละหน้าจอได้ แต่เราไม่รู้วิธีการจัดระเบียบแอปพลิเคชันทั้งหมดและกำหนดเนื้อหาแต่ละโมดูล ดังนั้นคุณมีคำแนะนำ (รูปแบบ / แนวปฏิบัติที่ดีที่สุด / แอพหนังสือ / ตัวอย่าง) เพื่อประสานงาน / จัดการการโต้ตอบภายในแอปพลิเคชันทั้งหมดหรือไม่ คำแนะนำเกี่ยวกับวิธีการกำหนดเนื้อหาของโมดูล? ขอบคุณ! ตัวอย่างเล็ก ๆ เพื่อแสดงสิ่งที่ฉันต้องการสร้าง: แอปพลิเคชัน Foo User Management …

3
Python ทำงานอย่างไร
คำถามนี้อาจดูเหมือนโง่เล็กน้อย แต่ห่าอะไร ฉันเริ่มเรียนรู้ Python ฉันรู้ไวยากรณ์พื้นฐานเป็นต้น เมื่อฉันทำงานกับ HTML, PHP, ฯลฯ ฉันก็เขียนโค้ดวางไว้ในไฟล์. html หรือ. php และดับเบิลคลิกที่ไฟล์นี้ จากนั้นรหัสของฉันก็จะทำงาน ฉันสามารถทำงานกับฐานข้อมูลและสิ่งอื่น ๆ ได้ - มันง่ายมาก แต่ Python ทำงานอย่างไร ฉันทำงานใน Eclipse หรือ Python command line และฉันสามารถเรียกใช้รหัสนี้ได้ แต่ถ้าฉันต้องการสร้างเว็บไซต์ด้วย Python ล่ะ ฉันไม่คิดว่ามันเป็นเหมือนที่ฉันวางไฟล์. py ไว้บนเซิร์ฟเวอร์ดังนั้นฉันต้องทำอย่างไร ฉันเข้าใจว่าฉันต้องติดตั้ง Python บนเว็บเซิร์ฟเวอร์ของฉันผ่านทางบรรทัดคำสั่งเซิร์ฟเวอร์ (ฉันไม่เคยใช้ แต่ฉันจะพบบทเรียนบางอย่างที่ฉันต้องการ) แต่มีอะไรต่อไป ฉันจะรวมความรู้ Python ของฉันกับ HTML, CSS, PHP และอื่น ๆ …

3
วิธีลบรหัสที่ซ้ำกัน (โดยทั่วไป)
ในภาษา OO (เช่น แต่ไม่ จำกัด เฉพาะ Java) คุณจะแก้ไขโค้ดที่ซ้ำกันอย่างไรโดยขึ้นอยู่กับขอบเขตของการเกิดขึ้น ฉันจะเริ่มต้นด้วย (ตัวอย่าง) ในคลาสเดียวกัน (ขอบเขต) ทำการแยกวิธีการแตกไฟล์ (แก้ไข) ในชั้นเรียนของลำดับชั้นเดียวกัน (ขอบเขต) ดำเนินการวิธีการแยกและดึงขึ้น (แก้ไข) ...

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