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

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

5
ฉันสามารถทำอะไรเพื่อปรับปรุงประสิทธิภาพใน VS 2010 ได้ไหม [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันใช้ VS 2010 เนื่องจากเรากำลังพัฒนาแอพใน. Net 4 และประสิทธิภาพการทำงานทำให้ฉันเป็นบ้า มันแย่มากเมื่อฉันไม่ได้ดู IDE สักพัก (เช่นเมื่อฉันถูกดึงออกไปเพื่อขอความช่วยเหลือหรือโทรเข้ามาตอนเช้า) ฉันรู้ว่ามันอาจจะสร้างขึ้นใน WPF ซึ่งยกเลิกการโหลดทรัพยากรเมื่อไม่ได้ใช้ แต่ความล่าช้าไม่กี่นาทีในขณะที่โหลดทุกอย่างสำรองเป็นสิ่งที่น่ารำคาญจริงๆ ฉันยังสังเกตเห็นความล่าช้าที่สำคัญเมื่อเปิดไฟล์หรือรวบรวม

1
หนังสือและเรื่องราวเกี่ยวกับวัฒนธรรมการเขียนโปรแกรมโดยเฉพาะในยุค 80 / ต้นยุค 90 [ปิด]
ปิด. คำถามนี้อยู่นอกหัวข้อปิดหัวข้อไม่ยอมรับคำตอบในขณะนี้ ปิดให้บริการใน5 ปีที่ผ่านมา ** คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันสนุกไปกับหนังสือเกี่ยวกับวัฒนธรรมของแฮ็กเกอร์และดำเนินธุรกิจซอฟต์แวร์ในยุค 80 และ 90 ด้วยเหตุผลบางอย่างสิ่งที่ดูเหมือนน่าตื่นเต้นมากขึ้นแล้ว ตัวอย่างคือ: Microserfs (Douglas Coupland) Accidental Empires (Robert X. Cringely เกือบจะสมบูรณ์ (WE Peterson ออนไลน์!) โคเดอร์เนทที่ทำงาน (Peter Seibel) วันนี้ฉันเป็นผู้ประกอบการและโปรแกรมเมอร์ ย้อนกลับไปในยุค 80 ฉันเป็นเด็กแฮ็คที่เจาะระบบ DOS TSR และเขียนรหัส GWBasic / QBasic ในยุค 90 ฉันเป็นนักศึกษามหาวิทยาลัย CS ซึ่งประสบกับการเติบโตของอินเทอร์เน็ตทั่วโลก เมื่ออ่านหนังสือเหล่านี้ที่ดำเนินธุรกิจซอฟต์แวร์ดูสนุกสนานกว่าที่เป็นอยู่ทุกวันนี้ สิ่งที่เคยเป็นเรื่องง่ายกว่ามากโอกาสดูเหมือนจะอยู่ทุกหนทุกแห่งและผู้ที่เพิ่งเริ่มต้นดูเหมือนจะทำงานกับปัญหาที่แท้จริงมากขึ้น (ประดิษฐ์สเปรดชีตเขียนโปรแกรมประมวลผลคำในแอสเซมบลีบน 6 แพลตฟอร์มที่แตกต่างกัน) ไม่มีใครแบ่งปันความรู้สึกเหล่านี้หรือไม่ …
17 books  history  culture 

10
โดยปกติคุณจะจัดวางพื้นที่ของคลาสอย่างไร
ฉันสงสัยว่ามีมาตรฐานในการกำหนดพื้นที่ของชั้นเรียนหรือไม่ ฉันใช้อยู่ Fields Constructor Properties Public Methods Private Methods Fieldsเป็นทรัพย์สินส่วนตัวและPropertiesเป็นทรัพย์สินสาธารณะ ปกติแล้วฉันจะใช้ subregions ภายในถ้าจำเป็นหรือจะเพิ่มภูมิภาคอื่น ๆ ด้านล่าง (เช่นสมาชิกอินเทอร์เฟซหรือ baseClass) เป็นครั้งคราว

8
สิทธิ์“ ผู้ใช้” ในท้องถิ่นเพียงพอหรือไม่หรือผู้พัฒนาต้องการผู้ดูแลท้องถิ่นหรือผู้ใช้ระดับสูงขณะกำลังเข้ารหัส
เรามีทีมพัฒนาในต่างประเทศที่มีนิสัยไม่ดีในการติดตั้งซอฟต์แวร์ไร้สาระบนเดสก์ท็อปขององค์กร (ซึ่งไม่เกี่ยวข้องกับหน้าที่การงาน) และกำลังพิจารณาที่จะลบสิทธิ์ผู้ดูแลระบบในพื้นที่ Local Administrator หรือ Local Power ต้องการสำหรับ VS2010 หรือไม่? คุณจะรันโดยไม่มีสิทธิ์ยกระดับได้อย่างไร คุณจะเจอปัญหาอะไร

19
ลำดับการเรียนรู้การเขียนโปรแกรมภาษาในอุดมคติ? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบ เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ คุณคิดอย่างไร? ลำดับการเรียนรู้ภาษาการเขียนโปรแกรมในอุดมคติคืออะไรซึ่งจะครอบคลุมภาษาและกระบวนทัศน์ส่วนใหญ่ที่ใช้กันอย่างแพร่หลายในปัจจุบันรวมถึงช่วยให้เข้าใจพื้นฐานการเขียนโปรแกรมพื้นฐานความคิดและการปฏิบัติทั่วไป คุณยังสามารถแนะนำลำดับการเรียนรู้สำหรับกระบวนทัศน์แทนที่จะเป็นภาษา NB: นี่คือพอร์ตของคำถามที่ฉันถามในstackoverflowและถูกปิดเพราะเป็นอัตนัยและโต้แย้ง

6
คุณเขียนชื่อเรื่องในความคิดเห็นของรหัสหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันกำลังอ่านรหัสเก่าที่ฉันเขียน (ปีแรกในมหาวิทยาลัย) และสังเกตว่าฉันเคยเขียนชื่อความคิดเห็นก่อนหน้าส่วนต่าง ๆ ของรหัส สิ่งที่ชอบ (นี่คือจากเกม Monopoly): /*Board initialization*/ ...code... /*Player initialization*/ ...code... /*Game logic starts here*/ /*Displaying current situation*/ ...code... /*Executing move*/ ...code... /*Handle special event*/ ...code... /*Commit changes, switch to next player*/ ...code... นี่อาจซ้ำซ้อนและไม่จำเป็นต้องใช้รหัสหากรหัสนั้นชัดเจนจริงๆ แต่เมื่อฉันสแกนผ่านไฟล์มันทำให้ฉันประหลาดใจอย่างมากฉันรู้สึกอย่างยิ่งว่าฉันรู้ว่าเกิดอะไรขึ้นแม้ว่าฉันจะดูรหัสจริงน้อยมาก ฉันสามารถเห็นสิ่งนี้ว่าเหมาะสมในบางสถานการณ์ดังนั้นฉันจึงสงสัยว่าคุณทำสิ่งนี้หรือไม่? คุณคิดว่าเป็นความคิดที่ดีหรือไม่? หรือมันมากเกินไป?

9
โปรแกรมเมอร์ควรช่วยผู้ทดสอบในการออกแบบการทดสอบหรือไม่?
โปรแกรมเมอร์ควรช่วยผู้ทดสอบมากน้อยเพียงใดในการออกแบบการทดสอบ ฉันไม่คิดว่าพวกเขาจะช่วยได้เลย ความกังวลของฉันคือถ้าพวกเขาช่วยทดสอบในการออกแบบการทดสอบสำหรับรหัสของพวกเขาพวกเขาจะ 'ติด' ผู้ทดสอบด้วยอคติและจุดบอดของรหัสนั้น ฉันรู้สึกว่าความต้องการนั้นเพียงพอสำหรับการให้ข้อมูลที่จำเป็นสำหรับผู้ทดสอบเพื่อสร้างแบบทดสอบ หากมีบางส่วนของการนำไปใช้งานที่โปรแกรมเมอร์พบว่าน่าเป็นห่วงฉันคิดว่าเป็นหน้าที่ของพวกเขาที่จะใช้การทดสอบหน่วยเพื่อทดสอบส่วนนั้นหรือแม้กระทั่งทำการทดสอบระบบนอกระบบของตนเองเพื่อทดสอบส่วนนั้น ไม่ใช่ทุกคนที่ฉันรู้ว่าเห็นด้วยกับเรื่องนี้ (และฉันเข้าใจบางประเด็นของพวกเขาในระดับหนึ่ง) คนอื่นคิดอย่างไรกับเรื่องนี้ สิ่งนี้ถูกกล่าวถึงในวรรณกรรมหรือไม่?
17 team  testing 

10
วิธีที่ดีที่สุดในการบันทึกการตั้งค่าแอปพลิเคชัน
ใน Windows วิธีการเริ่มต้นคือรีจิสทรี สิ่งนี้ช่วยให้คุณสามารถแยกความแตกต่างของการตั้งค่าทั้งระบบและต่อผู้ใช้ ใน Unix คุณควรใช้ไฟล์ข้อความในโฟลเดอร์ / etc สำหรับการตั้งค่าทั้งระบบ (การประชุมแบบต่อผู้ใช้คืออะไร) โปรแกรมใหม่จำนวนมาก (และโดยเฉพาะอย่างยิ่งที่ออกแบบมาสำหรับพกพา) ใช้ไฟล์ XML อะไรคือวิธีที่ดีที่สุด (และตำแหน่ง) ในการจัดเก็บการตั้งค่าที่ไม่ใช่ BLOB เราควรทำตามค่าเริ่มต้นของแต่ละระบบหรือมีวิธีการแก้ปัญหาแบบครบวงจร? และวิธีพกพาที่ดีที่สุดคืออะไร

9
วิธีการป้องกันการเยื้องลึก? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันสามารถใช้ขั้นตอนและมาตรการใดในการป้องกันการเยื้องในโค้ดของฉัน

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

4
เวลาที่เหมาะสมในการเข้าร่วมโครงการโอเพ่นซอร์สสำหรับโปรแกรมเมอร์คือเมื่อไหร่? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบ เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ผู้มาใหม่ส่วนใหญ่ในการเขียนโปรแกรมเริ่มต้นด้วยโครงการพื้นฐานเพื่อเริ่มต้นด้วยการเขียนโปรแกรม ผู้เขียนโปรแกรม C ++ ส่วนใหญ่ใช้เวลากับการไขปริศนาและการแข่งขัน แต่สิ่งนี้ไม่ได้มีประโยชน์เสมอไป บางครั้งคุณต้องใช้เวลากับโครงการจริง การเริ่มต้นโครงการโอเพนซอร์ซของคุณเองอาจเป็นปัญหาในการเรียนรู้ด้วยตนเองสำหรับมือใหม่เพราะขาดที่ปรึกษาและเพื่อนที่ไม่สามารถดูรหัสของคุณและให้คำแนะนำได้ โครงการโอเพ่นซอร์สสามารถแก้ปัญหานี้ได้บางโครงการอาจเหมาะสมที่สุดสำหรับโปรแกรมเมอร์ใหม่ นอกจากนี้ทุกคนเป็นมือใหม่ในบางจุด ดังนั้นฉันจะพยายามทำให้คำถามนี้เล็กน้อยจากมุมมองของผู้เริ่มต้น ฉันลองคำถามสองสามข้อเกี่ยวกับการโอเวอร์โฟลว์สแต็กก่อนถามเช่นฉันจะเข้าร่วม & ขั้นต่ำขั้นต่ำที่คุณต้องการได้อย่างไรและมีส่วนร่วมกับโอเพ่นซอร์สและระดับการเขียนโปรแกรมในระดับใดเป็นต้น แต่นี่ไม่ได้ช่วยฉัน . หาได้อย่างไร? ฉันจะตรวจสอบสิ่งที่ใช้ในการเข้าร่วมโครงการโอเพ่นซอร์สและฉันรู้สึกสะดวกสบายกับซอร์สโค้ดขนาดใหญ่ ฯลฯ คำถามของฉันคือเมื่อใดที่คุณต้องพิจารณาว่าคุณรู้สึกสะดวกสบายในการเข้าร่วมการเขียนโปรแกรมโอเพนซอร์สหรือไม่ ฉันหมายถึงคุณจะทดสอบตัวเองอย่างไรว่าคุณพร้อมที่จะรับภาระในโครงการโอเพนซอร์ซ / เล็ก / ใหญ่? คุณจะทดสอบตัวเองอย่างไรเพื่อดูว่าคุณสามารถทำงานกับ version control / โปรแกรมเมอร์คนอื่น ๆ / กำหนดการที่แน่นหนา ฯลฯ ได้อย่างไร?

11
มีการส่งมอบวัตถุในรูปแบบของการใช้รหัสซ้ำหรือไม่
ฉันมักจะได้ยินว่ามันบอกว่าวัตถุไม่ได้ส่งในแง่ของการใช้รหัสซ้ำ คุณเห็นด้วยไหม? หากคุณเชื่อว่าพวกเขาไม่ได้ทำไมไม่?

7
เป็นความคิดที่ดีหรือไม่ที่จะเขียนกรณีทดสอบที่เป็นไปได้ทั้งหมดหลังจากเปลี่ยนทีมเป็น TDD เพื่อให้ได้ความครอบคลุมที่สมบูรณ์
สมมติว่าเรามีแอปพลิเคชันระดับองค์กรขนาดใหญ่โดยไม่มีการทดสอบหน่วย / การทำงานใด ๆ ไม่มีกระบวนการพัฒนาที่ขับเคลื่อนด้วยการทดสอบในระหว่างการพัฒนาอันเนื่องมาจากกำหนดเวลาที่เข้มงวดมาก (ฉันรู้ว่าเราไม่ควรสัญญาวันครบกำหนดที่แน่นเมื่อเราไม่แน่ใจ แต่สิ่งที่ทำเสร็จแล้ว!) ตอนนี้ทุกอย่างผ่านไปและทุกอย่างสงบลงทุกคนตกลงที่จะเปลี่ยนเราให้เป็นทีมงานที่มีประสิทธิผลของ TDD / BDD ... ตอนนี้คำถามเกี่ยวกับรหัสที่เรามีอยู่แล้ว: (1) มันยังไม่เป็นไรหรือเป็นความคิดที่ดีที่จะหยุดการพัฒนาส่วนใหญ่และเริ่มเขียนกรณีทดสอบที่เป็นไปได้ทั้งหมดตั้งแต่เริ่มต้นถึงแม้ว่าทุกอย่างจะทำงานได้อย่างสมบูรณ์ ? หรือ (2) เป็นการดีกว่าที่จะรอสิ่งที่ไม่ดีเกิดขึ้นจากนั้นในระหว่างการแก้ไขการทดสอบหน่วยการทดสอบใหม่หรือ (3) แม้กระทั่งลืมรหัสก่อนหน้าและเพียงแค่เขียนการทดสอบหน่วยสำหรับรหัสใหม่เท่านั้นและเลื่อนทุกอย่าง มีไม่กี่ที่ดีและบทความที่เกี่ยวข้องเช่นนี้ ฉันยังไม่แน่ใจว่ามันคุ้มค่าหรือไม่ที่จะพิจารณาเรื่องนี้เพราะเรามีเวลา จำกัด และโครงการ / งานอื่น ๆ อีกมากมายกำลังรอเราอยู่ หมายเหตุ : คำถามนี้อธิบาย / จินตนาการถึงสถานการณ์ที่น่าอึดอัดใจในทีมพัฒนา นี่ไม่เกี่ยวกับฉันหรือเพื่อนร่วมงานของฉัน มันเป็นเพียงสถานการณ์ในจินตนาการ คุณอาจคิดว่าสิ่งนี้ไม่ควรเกิดขึ้นหรือผู้จัดการฝ่ายพัฒนารับผิดชอบต่อความยุ่งเหยิง! แต่อย่างไรก็ตามสิ่งที่ทำเสร็จแล้ว หากเป็นไปได้โปรดอย่าโหวตเพราะคุณคิดว่าสิ่งนี้จะไม่เกิดขึ้น

2
สถาปัตยกรรมแบบหลายชั้น: สถานที่ที่ฉันควรใช้การบันทึกข้อผิดพลาด \ การจัดการ?
ขณะนี้ฉันกำลังปรับโครงสร้างระบบย่อยขนาดใหญ่ด้วยสถาปัตยกรรมหลายเลเยอร์และฉันพยายามดิ้นรนเพื่อออกแบบกลยุทธ์การบันทึกข้อผิดพลาด \ การจัดการที่มีประสิทธิภาพ สมมติว่าสถาปัตยกรรมของฉันประกอบด้วยสามชั้นต่อไปนี้: ส่วนต่อประสานสาธารณะ (IE เป็น MVC Controller) เลเยอร์โดเมน ชั้นการเข้าถึงข้อมูล แหล่งที่มาของความสับสนของฉันคือที่ฉันควรใช้การบันทึกข้อผิดพลาด \ การจัดการ: ทางออกที่ง่ายที่สุดคือการใช้การบันทึกที่ระดับบนสุด (IE the Public Interface \ MVC Controller) อย่างไรก็ตามสิ่งนี้รู้สึกผิดเพราะมันหมายถึงการทำให้ข้อยกเว้นผ่านเลเยอร์ที่แตกต่างกันแล้วบันทึกมัน แทนที่จะบันทึกข้อยกเว้นที่แหล่งที่มา การบันทึกข้อยกเว้นที่แหล่งที่มานั้นเป็นทางออกที่ดีที่สุดเพราะฉันมีข้อมูลมากที่สุด ปัญหาของฉันคือว่าฉันไม่สามารถตรวจจับทุกข้อยกเว้นที่แหล่งที่มาโดยไม่มีการยกเว้นข้อยกเว้นทั้งหมดและในเลเยอร์อินเทอร์เฟซของโดเมน / สาธารณะสิ่งนี้จะนำไปสู่การตรวจจับข้อยกเว้นที่ถูกจับบันทึกไว้แล้ว . อีกกลยุทธ์ที่เป็นไปได้คือการผสมผสานของ # 1 และ # 2; โดยที่ฉันตรวจจับข้อยกเว้นเฉพาะที่เลเยอร์พวกเขามักจะถูกโยน (IE Catching, การบันทึกและการโยนอีกครั้งSqlExceptionsใน Data Access Layer) แล้วบันทึกข้อยกเว้นที่ไม่ถูกตรวจจับเพิ่มเติมที่ระดับบนสุด อย่างไรก็ตามสิ่งนี้จะทำให้ฉันต้องจับและเชื่อมต่อใหม่ทุกข้อยกเว้นที่ระดับบนสุดเพราะฉันไม่สามารถแยกแยะความผิดพลาดระหว่างข้อผิดพลาดที่ได้รับการจัดการ \ จัดการกับข้อผิดพลาดที่ไม่มี ตอนนี้เห็นได้ชัดว่านี่เป็นปัญหาในแอปพลิเคชั่นซอฟต์แวร์ส่วนใหญ่ดังนั้นจึงต้องมีวิธีแก้ไขปัญหามาตรฐานที่ทำให้เกิดข้อยกเว้นในการจับแหล่งที่มาและบันทึกครั้งเดียว แต่ฉันไม่สามารถเห็นวิธีการทำสิ่งนี้ด้วยตัวเอง หมายเหตุชื่อของคำถามนี้คล้ายกับ ' …

6
คุณสร้าง GUI สำหรับคลาส polymorphic ได้อย่างไร
สมมติว่าฉันมีตัวสร้างการทดสอบเพื่อให้ครูสามารถสร้างคำถามมากมายสำหรับการทดสอบ อย่างไรก็ตามไม่ใช่คำถามทุกข้อที่เหมือนกัน: คุณมีตัวเลือกหลายตัวกล่องข้อความการจับคู่และอื่น ๆ คำถามแต่ละประเภทต้องเก็บข้อมูลประเภทต่าง ๆ และต้องการ GUI ที่แตกต่างกันสำหรับทั้งผู้สร้างและผู้ทดสอบ ฉันต้องการหลีกเลี่ยงสองสิ่ง: ตรวจสอบประเภทหรือการคัดเลือกนักแสดง สิ่งใดที่เกี่ยวข้องกับ GUI ในรหัสข้อมูลของฉัน ในความพยายามครั้งแรกของฉันฉันจบด้วยคลาสต่อไปนี้: class Test{ List<Question> questions; } interface Question { } class MultipleChoice implements Question {} class TextBox implements Question {} อย่างไรก็ตามเมื่อฉันไปแสดงการทดสอบฉันจะจบลงด้วยรหัสเช่น: for (Question question: questions){ if (question instanceof MultipleChoice){ display.add(new MultipleChoiceViewer()); } //etc } นี่เป็นปัญหาที่พบบ่อยมาก มีรูปแบบการออกแบบบางอย่างที่ทำให้ฉันมีคำถามแบบ …

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