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

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

19
การเลือกระหว่างโปรแกรมเมอร์สองคน: ประสบการณ์กับความหลงใหล [ปิด]
ฉันอยู่ในตำแหน่งที่ฉันต้องจ้างโปรแกรมเมอร์และมีตัวเลือกผู้สมัคร 2 คนคนแรกมีประสบการณ์ แต่เขาไม่มีความหลงใหลในการเขียนโปรแกรมและเขาพูดอย่างนั้นในขณะที่สองไม่มีประสบการณ์ แต่เขามี ความหลงใหลเขาทำได้ดีในการสัมภาษณ์และได้รับการรับรอง เรามีทรัพยากรในการฝึกอบรมใครบางคน แต่ฉันไม่ต้องการที่จะระเบิดกระบวนการนี้และจ้างคนที่จะผิดหวัง ใครสามารถช่วยฉันได้ว่าจะเข้าใกล้สถานการณ์นี้ได้อย่างไร?

15
ฉันไม่เข้าใจข้อโต้แย้งกับการใช้งานเกินพิกัด [ปิด]
ฉันเพิ่งอ่านหนึ่งในบทความของ Joelที่เขาพูดว่า: โดยทั่วไปฉันต้องยอมรับว่าฉันกลัวคุณสมบัติภาษาเล็กน้อยที่ซ่อนสิ่งต่างๆ เมื่อคุณเห็นรหัส i = j * 5; …อย่างน้อยคุณรู้ไหมว่า j นั้นถูกคูณด้วยห้าและผลลัพธ์ที่เก็บไว้ใน i แต่ถ้าคุณเห็นตัวอย่างรหัสเดียวกันใน C ++ คุณจะไม่รู้อะไรเลย ไม่มีอะไร วิธีเดียวที่จะรู้ว่าสิ่งที่เกิดขึ้นจริงใน C ++ คือการค้นหาประเภทของฉันและ j คืออะไรบางอย่างที่อาจถูกประกาศในที่อื่นทั้งหมด นั่นเป็นเพราะ j อาจเป็นประเภทที่มีการoperator*ใช้งานมากเกินไปและจะทำสิ่งที่มีไหวพริบมากเมื่อคุณพยายามคูณมัน (เน้นที่เหมือง) กลัวความสามารถทางภาษาที่ซ่อนสิ่งต่าง ๆ หรือไม่? คุณจะกลัวสิ่งนั้นได้อย่างไร การซ่อนสิ่งต่าง ๆ (หรือที่เรียกว่านามธรรม ) เป็นหนึ่งในแนวคิดหลักของการเขียนโปรแกรมเชิงวัตถุหรือไม่? ทุกครั้งที่คุณเรียกใช้เมธอดa.foo(b)คุณจะไม่มีความคิดว่าจะทำอะไร คุณต้องค้นหาว่าประเภทใดaและbเป็นอะไรบางอย่างที่อาจถูกประกาศในที่อื่นทั้งหมด ดังนั้นเราควรทำอย่างไรกับการเขียนโปรแกรมเชิงวัตถุเพราะมันซ่อนสิ่งต่าง ๆ จากโปรแกรมเมอร์มากเกินไป? และj * 5แตกต่างจากj.multiply(5)ที่คุณอาจต้องเขียนในภาษาที่ไม่รองรับการบรรทุกเกินพิกัดได้อย่างไร อีกครั้งคุณจะต้องค้นหาประเภทของjและมองเข้าไปในmultiplyวิธีการเพราะแท้จริงและดูเถิดjอาจเป็นประเภทที่มีmultiplyวิธีการที่ทำสิ่งที่มีไหวพริบมาก "Muahaha ฉันเป็นนักเขียนโปรแกรมที่ชั่วร้ายที่ตั้งชื่อวิธีการmultiplyแต่สิ่งที่จริง ๆ แล้วมันคือความคลุมเครือและไม่เข้าใจสัญชาตญาณโดยสิ้นเชิง …

11
นักพัฒนาซอฟต์แวร์ของ Java ได้ละทิ้ง RAII หรือไม่?
ในฐานะโปรแกรมเมอร์ C # เป็นเวลานานฉันเพิ่งได้เรียนรู้เพิ่มเติมเกี่ยวกับข้อดีของการได้มาซึ่งทรัพยากรคือการเริ่มต้น (RAII) โดยเฉพาะฉันได้ค้นพบว่าสำนวน C #: using (var dbConn = new DbConnection(connStr)) { // do stuff with dbConn } มี C ++ ที่เทียบเท่า: { DbConnection dbConn(connStr); // do stuff with dbConn } หมายความว่าการจดจำการใช้ทรัพยากรเช่นDbConnectionในusingบล็อกนั้นไม่จำเป็นใน C ++! สิ่งนี้ดูเหมือนจะเป็นข้อได้เปรียบที่สำคัญของ C ++ สิ่งนี้น่าเชื่อถือยิ่งขึ้นเมื่อคุณพิจารณาคลาสที่มีสมาชิกอินสแตนซ์ของประเภทDbConnectionตัวอย่างเช่น class Foo { DbConnection dbConn; // ... } ใน …
82 java  c#  c++  language-design 

15
การใช้อักขระ Unicode ในชื่อตัวแปรนั้นดีหรือไม่? [ปิด]
ฉันเพิ่งพยายามใช้อัลกอริทึมการจัดอันดับ AllegSkill เพื่อ Python 3 นี่คือลักษณะทางคณิตศาสตร์: ไม่มีจริงๆ. นี่คือสิ่งที่ฉันเขียน: t = (µw-µl)/c # those are used in e = ε/c # multiple places. σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5 จริง ๆ แล้วฉันคิดว่ามันน่าเสียดายที่ Python 3 จะไม่ยอมรับ√หรือ²เป็นชื่อตัวแปร >>> √ = lambda x: x**.5 File "<stdin>", line 1 √ = …
82 naming  unicode 

18
วิธีที่ดีที่สุดในการมองเห็นโปรแกรมเมอร์ที่ยอดเยี่ยมในการสัมภาษณ์งานคืออะไร?
ในการตั้งค่าการสัมภาษณ์นี้คือวิธีที่ดีที่สุดที่จะระบุได้อย่างน่าเชื่อถือเมื่อใครบางคนเป็นสิ่งที่โปรแกรมเมอร์ที่ยอดเยี่ยม จากนี้ฉันหมายความว่าเขาเป็นหนึ่งในนั้นที่มีประสิทธิภาพเร็วขึ้น / เร็ว / ดีกว่า 10-15 เท่าของเพื่อนร่วมทางของเขาไปที่ปลายล่างของสเปกตรัม พวกเราหลายคนเคยได้ยินปัญหาของFizzBuzzเพื่อที่จะกำจัดคนอ่อนแอ แน่นอนว่าการใช้เวลา 5-10 นาทีเพื่อแก้ไขปัญหานั้นเป็นตัวบ่งชี้ที่จริงจังว่าผู้สมัครเป็นผู้สมัครที่อ่อนแอ ฉันวางตัวว่าตัวบ่งชี้ที่ดีสามารถแก้ไขได้โดยเร็วที่สุดเท่าที่จะทำได้ ดูเหมือนจะไม่เพียงพอ มันอาจจะเป็นสิ่งที่ทำให้เขามีโปรแกรมรถบักกี้ที่ค่อนข้างซับซ้อนและดูว่าเขาสามารถเร่งความเร็วและค้นหาปัญหาทั้งหมดได้หรือไม่?

10
หากโมฆะไม่ดีทำไมภาษาสมัยใหม่ถึงนำมาใช้? [ปิด]
ฉันแน่ใจว่าผู้ออกแบบภาษาเช่น Java หรือ C # รู้ปัญหาที่เกี่ยวข้องกับการมีอยู่ของการอ้างอิงที่เป็นโมฆะ (ดูที่การอ้างอิงโมฆะเป็นเรื่องเลวร้ายจริง ๆ หรือไม่ ) การใช้ประเภทตัวเลือกนั้นไม่ซับซ้อนกว่าการอ้างอิงแบบ null เหตุใดพวกเขาจึงตัดสินใจรวมไว้ด้วย ฉันแน่ใจว่าการอ้างอิงที่ไม่มีค่า null จะสนับสนุน (หรือบังคับให้ใช้) รหัสคุณภาพที่ดีกว่า (โดยเฉพาะการออกแบบห้องสมุดที่ดีกว่า) ทั้งจากผู้สร้างภาษาและผู้ใช้ มันเป็นเพียงเพราะการอนุรักษ์ - "ภาษาอื่นมีเราต้องได้เช่นกัน ... "?

6
ทำไมระดับ TRACE ถึงมีอยู่และฉันควรใช้เมื่อใดแทนที่จะใช้ DEBUG
ใน Log4J, Slf4J และเฟรมเวิร์กการบันทึกอื่น ๆ อีกสองสามรายการใน Java คุณมีระดับ "developper" สองระดับสำหรับการบันทึก: DEBUG ติดตาม ฉันเข้าใจสิ่งที่ DEBUG ทำเพราะคำอธิบายนั้นชัดเจน: ระดับ DEBUG กำหนดเหตุการณ์ข้อมูลที่ละเอียดซึ่งมีประโยชน์มากที่สุดในการดีบักแอปพลิเคชัน แต่ระดับ TRACE นั้นไม่เฉพาะเจาะจงมากเกี่ยวกับกรณีการใช้งาน: ระดับ TRACE กำหนดเหตุการณ์ข้อมูลที่ละเอียดกว่า DEBUG (ที่มา: log4J JavaDoc ) สิ่งนี้ไม่ได้บอกวิธีการใช้ TRACE ที่น่าสนใจนี้ไม่ได้เป็นระดับความรุนแรงที่กำหนดไว้ในมาตรฐาน syslog Googling สำหรับความแตกต่างระหว่าง TRACE และ DEBUG ดูเหมือนจะกลับมา "ใช้ DEBUG, โอ้และมี TRACE ด้วย" ฉันไม่พบกรณีการใช้งานเฉพาะสำหรับระดับ TRACE สิ่งที่ดีที่สุดที่ฉันสามารถหาได้คือหน้าวิกิเก่านี้กำลังถกกันถึงข้อดีของการมีอยู่ ในฐานะสถาปนิกผู้นี้ได้ยกธงและคำถามมากมายในหัวของฉัน หากผู้พัฒนารายย่อยขอให้ฉันเพิ่ม TRACE …
82 java  logging 

9
ประสิทธิภาพที่ควรได้รับจากการพิมพ์แบบไดนามิกคืออะไร? [ปิด]
ฉันมักจะได้ยินคำกล่าวอ้างว่าภาษาที่พิมพ์แบบไดนามิกนั้นมีประสิทธิผลมากกว่าภาษาที่พิมพ์แบบคงที่ อะไรคือสาเหตุของการเรียกร้องนี้? ไม่ใช่แค่การใช้เครื่องมือกับแนวคิดสมัยใหม่เช่นการประชุมเกี่ยวกับการตั้งค่าการใช้งานฟังก์ชั่นการเขียนโปรแกรมโมเดลขั้นสูงและการใช้ abstractions ที่สอดคล้องกันใช่หรือไม่ เป็นที่ยอมรับว่ามีความยุ่งเหยิงน้อยลงเนื่องจาก (เช่นใน Java) มักจะไม่ต้องการการประกาศประเภทซ้ำซ้อน แต่คุณยังสามารถละเว้นการประกาศประเภทส่วนใหญ่ในภาษาที่พิมพ์แบบคงที่ที่ใช้การอนุมานแบบโดยไม่สูญเสียข้อดีอื่น ๆ และทั้งหมดนี้มีให้สำหรับภาษาที่พิมพ์แบบคงที่เช่น Scala เช่นกัน ดังนั้นสิ่งที่จะกล่าวถึงการเพิ่มผลผลิตด้วยการพิมพ์แบบไดนามิกที่เป็นข้อได้เปรียบของแบบจำลองประเภทเอง? ชี้แจง: ฉันสนใจโครงการขนาดใหญ่ / กลางมากกว่าในแฮ็กด่วน :-)

14
ทำไมไฟล์บันทึกส่วนใหญ่จึงใช้ข้อความธรรมดามากกว่ารูปแบบไบนารี่
การบันทึกเป็นสิ่งที่จำเป็น แต่ไม่ค่อยมีการใช้ (ค่อนข้าง) ด้วยเหตุนี้จึงสามารถทำให้มีขนาดเล็กลงได้มากขึ้นในแง่ของการจัดเก็บ ตัวอย่างเช่นข้อมูลที่บันทึกบ่อยที่สุดเช่น ip, วันที่, เวลาและข้อมูลอื่น ๆ ที่สามารถแสดงเป็นจำนวนเต็มจะถูกเก็บไว้เป็นข้อความ หากการบันทึกถูกเก็บไว้เป็นข้อมูลไบนารีพื้นที่จำนวนมากสามารถรักษาไว้ได้ดังนั้นจึงต้องใช้การหมุนน้อยลงและเพิ่มอายุการใช้งานดิสก์โดยเฉพาะกับ SSD ที่การเขียน จำกัด บางคนอาจบอกว่ามันเป็นปัญหาเล็กน้อยที่ไม่สำคัญ แต่เมื่อคำนึงถึงความพยายามที่จำเป็นในการสร้างกลไกดังกล่าว ทุกคนสามารถทำสิ่งนี้ได้เหมือนสองวันในเวลาว่างทำไมคนไม่ทำเช่นนี้?
81 logging  storage 

9
หากคุณส่งข้อมูลขั้นต่ำเปล่าไปยังฟังก์ชั่นในกรณีเช่นนี้เสมอ
สมมติว่าฉันมีฟังก์ชั่นIsAdminที่จะตรวจสอบว่าผู้ใช้เป็นผู้ดูแลระบบหรือไม่ สมมติว่าการตรวจสอบของผู้ดูแลระบบทำได้โดยการจับคู่ id ผู้ใช้ชื่อและรหัสผ่านกับกฎบางประเภท (ไม่สำคัญ) ในหัวของฉันมีสองลายเซ็นฟังก์ชันที่เป็นไปได้สำหรับสิ่งนี้: public bool IsAdmin(User user); public bool IsAdmin(int id, string name, string password); ฉันมักจะไปที่ลายเซ็นประเภทที่สองโดยคิดว่า: ฟังก์ชั่นลายเซ็นช่วยให้ผู้อ่านมีข้อมูลมากขึ้น ตรรกะที่มีอยู่ในฟังก์ชั่นไม่จำเป็นต้องรู้เกี่ยวกับUserชั้นเรียน มันมักจะส่งผลให้รหัสน้อยลงเล็กน้อยภายในฟังก์ชั่น อย่างไรก็ตามบางครั้งฉันก็ตั้งคำถามกับวิธีการนี้และก็ตระหนักว่าในบางจุดมันจะกลายเป็นเรื่องไม่สะดวก หากตัวอย่างฟังก์ชั่นจะแมประหว่างเขตข้อมูลวัตถุที่แตกต่างกันสิบแห่งในบูลผลลัพธ์ผมจะส่งวัตถุทั้งหมดอย่างชัดเจน แต่นอกเหนือจากตัวอย่างที่สิ้นเชิงเช่นนั้นฉันไม่เห็นเหตุผลที่จะผ่านในวัตถุจริง ฉันขอขอบคุณข้อโต้แย้งสำหรับสไตล์ใดสไตล์หนึ่งรวมถึงข้อสังเกตทั่วไปที่คุณอาจเสนอ ฉันเขียนโปรแกรมทั้งในรูปแบบเชิงวัตถุและสไตล์การใช้งานดังนั้นจึงควรมองคำถามว่าเกี่ยวกับสำนวนใด ๆ และทั้งหมด

7
ฉันควรใช้การพึ่งพาการฉีดหรือโรงงานคงที่?
เมื่อออกแบบระบบฉันมักจะประสบกับปัญหาการมีโมดูลจำนวนมาก (การบันทึก, acces ฐานข้อมูล, ฯลฯ ) ถูกใช้โดยโมดูลอื่น ๆ คำถามคือฉันจะไปเกี่ยวกับการให้ส่วนประกอบเหล่านี้กับส่วนประกอบอื่น ๆ ได้อย่างไร คำตอบสองคำตอบที่ดูเหมือนจะเป็นไปได้คือการฉีดขึ้นรูปหรือใช้รูปแบบของโรงงาน อย่างไรก็ตามทั้งคู่ดูเหมือนผิด: โรงงานทำการทดสอบความเจ็บปวดและไม่อนุญาตให้สลับการใช้งานได้ง่าย พวกเขายังไม่ได้อ้างอิงที่ชัดเจน (เช่นคุณกำลังตรวจสอบวิธีการโดยไม่คำนึงถึงความจริงที่ว่ามันเรียกวิธีการที่เรียกวิธีการที่เรียกวิธีการที่ใช้ฐานข้อมูล) การฉีด Dependecy จะสร้างรายการอาร์กิวเมนต์ตัวสร้างอย่างหนาแน่นและทำให้มีบางแง่มุมทั่วโค้ดของคุณ สถานการณ์ทั่วไปคือที่คอนสตรัคเตอร์ของคลาสมากกว่าครึ่งมีลักษณะเช่นนี้(....., LoggingProvider l, DbSessionProvider db, ExceptionFactory d, UserSession sess, Descriptions d) นี่เป็นสถานการณ์ทั่วไปที่ฉันมีปัญหากับ: ฉันมีคลาสยกเว้นซึ่งใช้คำอธิบายข้อผิดพลาดที่โหลดจากฐานข้อมูลโดยใช้แบบสอบถามที่มีพารามิเตอร์ของการตั้งค่าภาษาผู้ใช้ซึ่งอยู่ในวัตถุเซสชันผู้ใช้ ดังนั้นเพื่อสร้างข้อยกเว้นใหม่ฉันต้องการคำอธิบายซึ่งต้องการเซสชันฐานข้อมูลและเซสชันผู้ใช้ ดังนั้นฉันถึงวาระที่จะลากวัตถุเหล่านี้ทั้งหมดในวิธีการทั้งหมดของฉันในกรณีที่ฉันอาจต้องโยนข้อยกเว้น ฉันจะจัดการปัญหาดังกล่าวได้อย่างไร?

5
มีลิขสิทธิ์ซอฟต์แวร์เชิงพาณิชย์ให้เลือกหรือไม่ [ปิด]
ปัจจุบันฉันมีโครงการโอเพ่นซอร์สที่ได้รับอนุญาตภายใต้ GPLv3 ฉันต้องการอนุญาตให้ใช้สิทธิ์สองเท่าดังนั้นฉันจึงสามารถนำเสนอเพื่อการใช้ในเชิงพาณิชย์ได้ มีแหล่งข้อมูลสำหรับการเลือกหรือสร้างลิขสิทธิ์ซอฟต์แวร์เชิงพาณิชย์หรือไม่
81 licensing 

12
คุณสัมภาษณ์คนที่มีประสบการณ์มากกว่าคุณได้อย่างไร [ปิด]
บริษัท ที่ฉันทำงานด้วยกำลังมองหานักพัฒนาอาวุโสที่มีประสบการณ์มากกว่าฉันและพวกเขาคาดหวังให้ฉันทำส่วนทางเทคนิคของการสัมภาษณ์ ฉันเพิ่งเขียนโปรแกรมมาสองสามปีแล้วและไม่แน่ใจว่าฉันมีความรู้ที่จำเป็นในการประเมินทักษะการเขียนโปรแกรมของคนที่มีความเข้าใจ / ประสบการณ์มากกว่าฉัน ใครสามารถแนะนำคำถามสัมภาษณ์ทางเทคนิคเพื่อถามว่าเป็นวิธีที่ดีสำหรับการประเมินทักษะการเขียนโปรแกรมระดับสูง แต่ยังคงเป็นสิ่งที่ฉันสามารถเข้าใจได้? ฉันจะบอกว่าฉันผ่าน jr ระดับโปรแกรมเมอร์ แต่ไม่มีที่ไหนใกล้กับระดับอาวุโส สิ่งที่ฉันทำส่วนใหญ่นั้นเป็นแอพเล็ก ๆ (เว็บและเดสก์ท็อป) บางตัวก็ค่อนข้างซับซ้อน แต่ทั้งหมดนั้นมีไว้สำหรับผู้ใช้ไม่มาก ฉันรู้สึกว่าฉันมีความเข้าใจที่ดีเกี่ยวกับแนวคิดการเขียนโปรแกรมส่วนใหญ่และฉันสามารถเรียนรู้ / สอนตัวเองได้ทุกเรื่อง แต่ฉันไม่มีประสบการณ์ ในขณะที่เจ้านายของฉันชอบบอกฉันว่า "คุณไม่รู้ว่าคุณไม่รู้อะไร" โดยเฉพาะอย่างยิ่งสิ่งที่เราต้องการให้คนที่เราจ้างมีประสบการณ์ด้วย (ที่ฉันไม่มี) คือ: การพัฒนาหลายระดับ, สภาพแวดล้อมที่มีผู้ใช้หลายคน, การพัฒนาแอพพลิเคชั่นขนาดใหญ่, การส่งข้อความสองทาง, เซสชันที่ใช้ร่วมกัน และ Multi-Threading / BackgroundWorkers UPDATE: เพื่อตอบสนองต่อความคิดเห็นของ ธ ​​อร์ด้านล่างเราจ้างใครบางคนเมื่อไม่กี่เดือนที่ผ่านมาและฉันคิดว่ามันได้ผลมาก ฉันกำลังเรียนรู้มากมายไม่เพียง แต่เกี่ยวกับการเขียนโค้ด แต่ยังเกี่ยวกับสิ่งต่าง ๆ เช่นรูปแบบการออกแบบสถาปัตยกรรมซอฟต์แวร์เอกสารประกอบ ไม่ใช่เรื่องง่ายเสมอไปที่จะมีคนเข้ามาและชี้ให้เห็นวิธีที่ดีกว่าในการทำสิ่งที่คุณทำ แต่ถ้าคุณสามารถกลืนความภาคภูมิใจของคุณและเต็มใจที่จะลองสิ่งใหม่ ๆ คุณสามารถเรียนรู้ได้มากมาย กระบวนการสัมภาษณ์ดีกว่าที่ฉันคาดไว้ ฉันเริ่มถามคำถามเกี่ยวกับสิ่งที่ฉันคุ้นเคยจากนั้นก็ถามคำถามเกี่ยวกับบางสิ่งที่ฉันกำลังดิ้นรนอยู่ เมื่อใดก็ตามที่ผู้ให้สัมภาษณ์พูดถึงสิ่งที่ฉันไม่เข้าใจฉันจะขอให้พวกเขาอธิบายให้ฉันแล้วเขียนลงไปเพื่อที่ฉันจะได้สามารถค้นหาได้ในภายหลัง …
81 interview 

15
ทำไม DRY ถึงสำคัญ?
ค่อนข้างง่ายทำไมฉันจึงต้องการเขียนโค้ดที่ใช้กับทุกกรณีและข้อมูลที่ปรับขนาดได้เมื่อสิ่งที่ฉันต้องทำคือทำซ้ำกระบวนการเดียวกันสองสามครั้งด้วยการปรับแต่งเล็กน้อย ฉันไม่น่าจะต้องแก้ไขอีกในเร็ว ๆ นี้ ดูเหมือนว่าจะมีงานน้อยลงที่จะไป ... function doStuff1(){/*.a.*/} function doStuff2(){/*.b.*/} function doStuff3(){/*.c.*/} และถ้าฉันต้องการเพิ่มอะไรบางอย่าง ... function doStuff4(){/*.d.*/} และถ้าฉันต้องการลบฉันก็จะลบมัน เป็นการยากที่จะหาวิธีที่จะทำให้สิ่งเหล่านี้เป็นรูปแบบตรงไปข้างหน้าเดียวที่ฉันสามารถป้อนข้อมูลและจัดการกับทุกกรณีและทำการเปลี่ยนแปลงมากมายฉันไม่รู้สึกว่าฉันจะมี ทำ. ทำไมต้องเป็น DRY เมื่อดูเหมือนว่าการตัดแปะ + แบบเร็วจะทำงานได้น้อยลงมาก
81 code-quality  dry 

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

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