คำถามติดแท็ก code-quality

คำถามสำหรับแนวทางปฏิบัติที่ดีที่สุดสำหรับการเขียนโค้ดคุณภาพสูง

1
มีการศึกษาเชิงประจักษ์เกี่ยวกับผลกระทบของการคอมเม้นท์ซอร์สโค้ดต่อคุณภาพของซอฟต์แวร์ความสามารถในการบำรุงรักษาและประสิทธิภาพของนักพัฒนาหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันเป็นผู้สนับสนุนให้ความเห็นเกี่ยวกับซอร์สโค้ดและการทำเอกสารผลิตภัณฑ์ซอฟต์แวร์ มันเป็นประสบการณ์ส่วนตัวและการสังเกตของฉันว่าการทำงานกับซอร์สโค้ดที่แสดงความคิดเห็นอย่างจริงจังได้ช่วยฉันในรูปแบบที่แตกต่างกันเมื่อฉันต้องเติบโตซอฟต์แวร์หรือบำรุงรักษามัน อย่างไรก็ตามมีอีกค่ายหนึ่งที่กล่าวว่าการแสดงความคิดเห็นนั้นไร้ค่าในที่สุดหรือคุณค่าของมันนั้นน่าสงสัย ผู้เสนอการเข้ารหัสจำนวนมากโดยไม่แสดงความเห็นแย้งว่า: หากโค้ดหนึ่งชิ้นเขียนได้ดีก็จะเป็นการอธิบายตนเองและไม่จำเป็นต้องแสดงความคิดเห็น หากโค้ดหนึ่งชิ้นไม่สามารถอธิบายตัวเองได้ให้ทำการรีแฟคเตอร์ใหม่และทำให้มันอธิบายได้ด้วยตนเองเพื่อที่ว่ามันจะไม่ต้องการความคิดเห็นใด ๆ ชุดทดสอบของคุณคือเอกสารสด เมื่อเวลาผ่านไปรหัสและความคิดเห็นไม่ซิงค์กันและจะกลายเป็นแหล่งที่มาของอาการปวดหัว Agile กล่าวว่ารหัสการทำงานสำคัญกว่ากองเอกสารดังนั้นเราจึงสามารถละเว้นการเขียนความคิดเห็นได้อย่างปลอดภัย สำหรับฉันนี่เป็นเพียงความเชื่อ อีกครั้งการสังเกตส่วนตัวของฉันคือซอฟต์แวร์ที่เขียนโดยทีมนักพัฒนาที่ชาญฉลาดและมีประสบการณ์ท้ายที่สุดก็จบลงด้วยรหัสจำนวนมากที่ไม่ได้อธิบายตัวเอง อีกครั้งที่ Java API, Cocoa API, Android API ฯลฯ แสดงว่าหากคุณต้องการเขียนและดูแลรักษาเอกสารที่มีคุณภาพเป็นไปได้ การพูดถึงสิ่งเหล่านี้การสนทนาเกี่ยวกับข้อดีข้อเสียของการจัดทำเอกสารและการแสดงความคิดเห็นในซอร์สโค้ดที่อิงตามความเชื่อส่วนตัวมักจะไม่จบลงและนำไปสู่ข้อสรุปที่ไม่พึงพอใจ ดังนั้นฉันกำลังมองหาเอกสารทางวิชาการและการศึกษาเชิงประจักษ์เกี่ยวกับผลกระทบของเอกสารประกอบซอฟต์แวร์โดยเฉพาะการแสดงความคิดเห็นซอร์สโค้ดต่อคุณภาพและการบำรุงรักษารวมถึงผลกระทบต่อประสิทธิภาพการทำงานของทีม คุณได้สะดุดกับบทความดังกล่าวและสิ่งที่เป็นผลของพวกเขาถ้ามี?

6
ข้อไหนคือการบำรุงรักษามากขึ้น - การกำหนดบูลีนผ่านทาง if / else หรือการแสดงออกบูลีน?
สิ่งใดที่จะถือว่าได้รับการบำรุงรักษามากขึ้น if (a == b) c = true; else c = false; หรือ c = (a == b); ฉันลองดูใน Code Complete แต่ไม่พบคำตอบ ฉันคิดว่าอันแรกสามารถอ่านได้มากขึ้น (คุณสามารถอ่านออกเสียงออกมาได้ดัง ๆ ) ซึ่งฉันคิดว่าทำให้สามารถบำรุงรักษาได้มากขึ้น อันที่สองมีความเหมาะสมมากกว่าและลดรหัส แต่ฉันไม่แน่ใจว่ามันจะบำรุงรักษาได้สำหรับนักพัฒนา C # (ฉันคาดว่าจะเห็นสำนวนนี้มากขึ้นเช่น Python)

5
ตกลงเพื่อทำซ้ำรหัสสำหรับการทดสอบหน่วยหรือไม่
ฉันเขียนอัลกอริธึมการเรียงลำดับสำหรับการกำหนดชั้นเรียนและฉันยังได้เขียนการทดสอบบางอย่างเพื่อให้แน่ใจว่าอัลกอริทึมนั้นได้ดำเนินการอย่างถูกต้อง การทดสอบของฉันมีความยาวเพียง 10 บรรทัดและมี 3 ในนั้น แต่เพียง 1 บรรทัดที่เปลี่ยนแปลงระหว่าง 3 ดังนั้นจึงมีรหัสซ้ำจำนวนมาก มันจะดีกว่าที่จะ refactor รหัสนี้เป็นวิธีอื่นที่เรียกว่าจากการทดสอบแต่ละครั้งหรือไม่ ฉันจะไม่ต้องเขียนแบบทดสอบอื่นเพื่อทดสอบการเปลี่ยนโครงสร้างหรือไม่? ตัวแปรบางตัวสามารถเลื่อนขึ้นไปถึงระดับคลาสได้ การทดสอบคลาสและวิธีการควรเป็นไปตามกฎเดียวกันกับคลาส / วิธีการปกติหรือไม่ นี่คือตัวอย่าง: [TestMethod] public void MergeSortAssertArrayIsSorted() { int[] a = new int[1000]; Random rand = new Random(DateTime.Now.Millisecond); for(int i = 0; i < a.Length; i++) { a[i] = rand.Next(Int16.MaxValue); } int[] b …

6
จำเป็นต้องทำให้โค้ดของฉันอ่านได้ง่ายขึ้นสำหรับโปรแกรมเมอร์คนอื่น ๆ ในทีมของฉัน
ฉันกำลังทำงานโครงการในเดลฟายและฉันกำลังสร้างตัวติดตั้งสำหรับแอปพลิเคชันมีสามส่วนหลัก การติดตั้ง / ถอนการติดตั้งPostgreSQL myapplication (การตั้งค่า myapplication ถูกสร้างขึ้นโดยใช้ nsi) การติดตั้ง / ถอนการติดตั้ง การสร้างตารางใน Postgres ผ่านสคริปต์ (แบตช์ไฟล์) ทุกสิ่งทำงานได้อย่างราบรื่นและราบรื่น แต่หากสิ่งที่ล้มเหลวฉันได้สร้าง LogToFileger ซึ่งจะ LogToFile ทุกขั้นตอนของกระบวนการ เช่นนี้ LogToFileToFile.LogToFile('[DatabaseInstallation] : [ACTION]:Postgres installation started'); ฟังก์ชั่นLogToFileToFile.LogToFile()นี้จะเขียนเนื้อหาไปยังไฟล์ มันใช้งานได้ดี แต่ปัญหาก็คือมันทำให้โค้ดยุ่งเหยิงเพราะมันยากที่จะอ่านโค้ดเพราะคนคนหนึ่งเห็นการLogToFileToFile.LogToFile()เรียกใช้ฟังก์ชั่นได้ทุกที่ในโค้ด ตัวอย่าง if Not FileExists(SystemDrive+'\FileName.txt') then begin if CopyFile(PChar(FilePathBase+'FileName.txt'), PChar(SystemDrive+'\FileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ done') else …

1
เป็นวิธีที่ดีที่สุดในการแสดงความคิดเห็นระดับเลิกใน Java คืออะไร
ฉันต้องการทราบวิธีที่ดีที่สุดในการเพิ่มความคิดเห็นเพื่อระบุคลาสที่เลิกใช้แล้วใน Java ฉันควรลบความคิดเห็นก่อนหน้านี้ที่เพิ่มไปยังด้านบนของคลาสที่ช่วยให้โปรแกรมเมอร์อื่นทราบว่าคลาสนั้นสำหรับอะไรหรือฉันควรเพิ่มความคิดเห็นด้านล่าง?

2
แอปพลิเคชันบริการเรียกฟังก์ชันฐานข้อมูลชั้น สถาปัตยกรรมไม่ดี?
สถานการณ์: สแต็ค: Java, Spring, Hibernate รุ่น: แอปพลิเคชันไคลเอนต์ - เซิร์ฟเวอร์ รูปแบบ: Model-View-Controller (MVC) คลาส Service Layer มีพฤติกรรมสามอย่าง: บริการบางอย่างมีกฎเกณฑ์ทางธุรกิจภายในวิธีการและมอบสิทธิ์ให้กับแอปพลิเคชัน ชอบ: EntityManager.save (นิติบุคคล); บริการบางอย่างเรียกฟังก์ชันฐานข้อมูล (ผ่านพารามิเตอร์) ไลค์: CallableStatement cls = con.prepareCall ("{เรียก databaseFunction (args)}"); บริการบางอย่างมีวิธีการที่มีทั้งพฤติกรรม คำถามของฉัน: มีปัญหาในการรับสายบริการโดยตรงหรือไม่ - ฟังก์ชั่นฐานข้อมูล? นี่ถือว่าเป็นการกระทำที่ไม่ดีหรือไม่? แบบจำลองสถาปัตยกรรมจะใช้กับโครงการเช่นนี้ได้อย่างไร มีปัญหาใดบ้างหรือไม่ที่มีการผสมผสานพฤติกรรมในบริการเดียวกัน เช่นการทำธุรกรรมและความสอดคล้อง? ในกรณีของการบำรุงรักษาการห่อหุ้มนี้ทำให้ผู้พัฒนาไม่ชัดเจนว่าเขาควรเปลี่ยนฟังก์ชั่นในฐานข้อมูลหรือไม่? จะหลีกเลี่ยงสิ่งนี้ได้อย่างไร สถานการณ์นี้เกิดขึ้นในแอปพลิเคชันอื่น ๆ ทั่วโลกหรือเป็นเพียงข้อผิดพลาดทางสถาปัตยกรรมหรือไม่?

4
สไตล์โค้ดที่ดีในการแนะนำการตรวจสอบข้อมูลทุกที่?
ฉันมีโครงการที่มีขนาดใหญ่พอที่ฉันไม่สามารถเก็บทุกแง่มุมไว้ในหัวของฉันได้อีก ฉันกำลังจัดการกับคลาสและฟังก์ชั่นจำนวนมากในนั้นและฉันกำลังส่งข้อมูลไปรอบ ๆ เมื่อเวลาผ่านไปฉันสังเกตว่าฉันยังคงได้รับข้อผิดพลาดอยู่เพราะฉันลืมว่ารูปแบบข้อมูลที่แม่นยำมีอะไรบ้างเมื่อฉันส่งมันไปยังฟังก์ชั่นที่แตกต่างกัน ( เช่นหนึ่งฟังก์ชั่นยอมรับและส่งออกอาเรย์ของสตริง ยอมรับสตริงที่ถูกเก็บไว้ในพจนานุกรม ฯลฯ ดังนั้นฉันจึงต้องเปลี่ยนสตริงที่ฉันทำงานด้วยจากการมีสตริงในอาร์เรย์เป็นสตริงในพจนานุกรม ) เพื่อหลีกเลี่ยงการต้องคิดออกว่าเกิดอะไรขึ้นฉันมักจะรักษาแต่ละฟังก์ชั่นและคลาสว่าเป็น "เอนทิตี้แยกตัว" ในแง่ที่ว่ามันไม่สามารถพึ่งพาโค้ดภายนอกที่ให้อินพุตที่ถูกต้องและต้องทำการตรวจสอบอินพุตเอง ในบางกรณีให้กำหนดข้อมูลใหม่หากข้อมูลได้รับในรูปแบบที่ไม่ถูกต้อง) สิ่งนี้ได้ลดเวลาที่ใช้ไปอย่างมากเพื่อให้แน่ใจว่าข้อมูลที่ฉันส่งไป "เหมาะกับ" ในทุกฟังก์ชั่นเพราะตอนนี้คลาสและฟังก์ชั่นของตัวเองเตือนฉันเมื่ออินพุตบางอย่างไม่ดี (และบางครั้งก็แก้ไขได้) ต้องใช้ดีบักเกอร์ผ่านโค้ดทั้งหมดอีกต่อไปเพื่อหาว่ามีอะไรเกิดขึ้นบ้าง อีกทางหนึ่งก็เพิ่มรหัสโดยรวมเช่นกัน คำถามของฉันคือถ้ารูปแบบรหัสนี้เหมาะสมสำหรับการแก้ปัญหานี้หรือไม่ แน่นอนทางออกที่ดีที่สุดคือการ refactor โครงการอย่างสมบูรณ์และตรวจสอบให้แน่ใจว่าข้อมูลมีโครงสร้างที่เหมือนกันสำหรับทุกฟังก์ชั่น - แต่เนื่องจากโครงการนี้เติบโตอย่างต่อเนื่องฉันจะจบลงด้วยการใช้จ่ายมากขึ้นและกังวลเกี่ยวกับรหัสสะอาด . (FYI: ฉันยังเป็นผู้เริ่มต้นดังนั้นโปรดแก้ตัวหากคำถามนี้ไร้เดียงสาโครงการของฉันอยู่ใน Python)

4
ทำใหม่ฟังก์ชั่นกลับรหัสจำนวนเต็มที่แสดงถึงสถานะที่แตกต่างกัน
ฉันได้รับรหัสอันยิ่งใหญ่ที่ฉันได้รวมตัวอย่างสั้น ๆ ของด้านล่าง มีชื่อสำหรับรูปแบบการต่อต้านนี้โดยเฉพาะหรือไม่? มีคำแนะนำอะไรบ้างสำหรับการปรับโครงสร้างนี้ // 0=Need to log in / present username and password // 2=Already logged in // 3=Inactive User found // 4=Valid User found-establish their session // 5=Valid User found with password change needed-establish their session // 6=Invalid User based on app login // 7=Invalid User based …

2
แยกรายงานการครอบคลุมรหัสสำหรับการทดสอบหน่วยและการรวมหรือหนึ่งรายงานสำหรับทั้งสอง?
ควรมีรายงานการครอบคลุมรหัสแยกต่างหากสำหรับการทดสอบหน่วยและการรวมหรือหนึ่งรายงานการครอบคลุมรหัสสำหรับทั้งสองหรือไม่ ความคิดที่อยู่เบื้องหลังนี้คือการครอบคลุมรหัสทำให้เราสามารถมั่นใจได้ว่ารหัสของเราได้รับการครอบคลุมโดยการทดสอบเท่าที่จะทำได้ (เท่าที่เครื่องจะสามารถทำได้) การมีรายงานแยกต่างหากนั้นสะดวกกว่าสำหรับเราที่จะรู้ว่าสิ่งใดไม่ได้รับการคุ้มครองโดยการทดสอบหน่วยและสิ่งที่ไม่ได้รับการครอบคลุมจากการทดสอบการรวม แต่วิธีนี้เราไม่สามารถเห็นเปอร์เซ็นต์ความครอบคลุมโดยรวมได้

6
การเป็นเจ้าของรหัสด้วยหลายทีมการแย่งชิงกัน
หากทั้งสองทีมต่อสู้กันโดยใช้ส่วนประกอบซอฟต์แวร์เดียวกันใครเป็นผู้รับผิดชอบในการจัดหาวิสัยทัศน์ทางสถาปัตยกรรมที่ชัดเจนของส่วนประกอบนั้นและรักษา / พัฒนาวิสัยทัศน์นี้เมื่อฐานรหัสวิวัฒนาการ ใน Scrum คุณควรจะมีกรรมสิทธิ์รหัสแบบรวมดังนั้นวิธีการตรวจสอบให้แน่ใจว่าการพัฒนาที่ทำโดยทีม A ไม่ได้ยุ่งเกี่ยวกับการพัฒนาที่ทำโดยทีม B

5
วิธีจัดการกับค่าสถานะใน if-else หลายรายการ
ฉันดูเหมือนจะเห็นสิ่งนี้บ่อยพอในรหัสของฉันและคนอื่น ๆ ดูเหมือนจะไม่มีอะไรผิดปกติ แต่มันทำให้ฉันรำคาญเพราะดูเหมือนว่ามันจะทำได้ดีกว่า ฉันคิดว่าคำสั่งกรณีอาจทำให้รู้สึกมากกว่าเล็กน้อย แต่บ่อยครั้งที่ตัวแปรเป็นประเภทที่ไม่ทำงานได้ดีหรือเลยด้วยคำสั่ง case (ขึ้นอยู่กับภาษา) If variable == A if (Flag == true) doFooA() else doFooA2 else if variable == B if (Flag == true) doFooB() else doFooB2 else if variable == C if (Flag == true) doFooC() else doFooC2 ดูเหมือนว่ามีหลายวิธีในการ "คำนึงถึง" สิ่งนี้เช่น if-elses 2 ชุดโดยที่หนึ่งชุดจัดการเมื่อ Flag …

5
การยึดมั่นกับหนึ่งยืนยันต่อการทดสอบความมั่นคงโง่ในกรณีนี้?
ฉันมีชั้นเรียนที่ฉันกำลังทดสอบ ชั้นเรียนมีฟังก์ชั่น:apply(List<IRule> rules, List<ITarget> targets); ในการทดสอบหนึ่งครั้งฉันต้องการตรวจสอบให้แน่ใจว่าแต่ละเป้าหมายผ่านไปหนึ่งกฎ a: rule1.AssertWasCalled(fnord => fnord.Test(target1)); rule1.AssertWasCalled(fnord => fnord.Test(target2)); rule1.AssertWasCalled(fnord => fnord.Test(target3)); มันดูเหมือนว่าฉันที่ จำกัด ตัวเองเพื่อยืนยันคำสั่งเดียวจะค่อนข้างหลอกเด็ก ฉันถูกต้องในสมมติฐานนี้หรือมีวิธีอื่นที่ฉันสามารถยืนยันได้ว่าในความเป็นจริงแต่ละเป้าหมายมีการทดสอบแล้วหรือไม่?

6
จะประเมินคุณภาพของรหัสได้อย่างไรเมื่อคุณไม่คุ้นเคยกับภาษา [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ตามสมมติฐานแล้วถ้าฉันต้องสัมภาษณ์ตำแหน่งนักพัฒนา PHP ใหม่เมื่อประสบการณ์ของฉันอยู่ใน. NET ฉันจะทราบได้อย่างไรว่าตัวอย่างโค้ดที่พวกเขาให้มานั้นมีประสิทธิภาพและคุณภาพดีหรือไม่? วิธีที่ดีที่สุดในการประเมินโค้ดของโปรแกรมเมอร์คือถ้าคุณไม่คุ้นเคยกับภาษา

5
วิธีทดสอบแอพพลิเคชั่นที่มีขนาดใหญ่มาก
ฉันมีแอพ PHP ที่มีขนาดใหญ่มาก โดยปกติจะมีนักพัฒนา 2-3 คนทำงานเต็มเวลาและเราไปถึงจุดที่เราทำการเปลี่ยนแปลงและสร้างข้อบกพร่อง (ฟีเจอร์ไอ!) ซอฟต์แวร์ไม่ซับซ้อนต่อการพูดเพียงมีจำนวนมากเกิดขึ้น (35 ~ ตัวควบคุมเกี่ยวกับรุ่นเดียวกัน ฯลฯ ) แม้จะระมัดระวังก็เป็นเรื่องง่ายสำหรับการเปลี่ยนแปลงในมุมมองนี้ (การปรับแต่ง id บนองค์ประกอบ) เพื่อทำลายการค้นหา ajax ที่เกิดขึ้นภายใต้เงื่อนไขพิเศษบางอย่าง การทดสอบหน่วยเป็นสิ่งแรกที่ทำให้คุณนึกถึง แต่เราลองเหล่านี้ในแอปอื่นและมันง่ายมากที่จะลืมพวกเขา / หรือใช้เวลาทดสอบการเขียนมากขึ้นจากนั้นทำการทดสอบ เรามีสภาพแวดล้อมการแสดงละครที่มีการตรวจสอบโค้ดก่อนที่จะเผยแพร่ บางทีเราต้องใช้เวลาส่วนหนึ่ง Q / A คน? ทุกคนมีคำแนะนำ / ความคิดใด ๆ

7
ฉันจะไปจากการเขียนโค้ดเพื่อเป็นนักพัฒนาที่ดีได้อย่างไร
ฉันรู้สึกผิดหวังที่ไม่มีคำอธิบายที่เป็นรูปธรรมเกี่ยวกับวิธีการที่จะสามารถเขียนสคริปต์ (bash, awk) และเขียนแอปพลิเคชันง่าย ๆ (c, php, python) ไปจนถึงการออกแบบและพัฒนาซอฟต์แวร์ที่มีขนาดใหญ่และซับซ้อนมากขึ้น ดูเหมือนว่าในอีกด้านหนึ่งมีหนังสือภาษาโปรแกรมและอีกด้านหนึ่งมีหนังสือวิศวกรรมซอฟต์แวร์ / การจัดการโครงการที่ออกแบบมาสำหรับทีมโปรแกรมเมอร์ ฉันได้อ่านทั้งสองอย่างมากมาย ฉันได้อ่านคลาสสิก XP / Agile และมีความเข้าใจทางทฤษฎีที่ดีเกี่ยวกับกระบวนการพัฒนาซอฟต์แวร์ ฉันชอบอ่านรหัสของคนอื่นและสามารถทำตามได้ค่อนข้างดี แต่เมื่อฉันมีความคิดเกี่ยวกับโครงการหรือต้องการเปลี่ยนจาก "นี่คือปัญหา / ต้องการ" ถึง "นี่คือทางออก" ใจของฉันวาดหน้าเปล่าและไม่รู้ว่าจะเริ่มต้นตรงไหน ฉันเพิ่งแฮ็คมันออกมา? มีเวิร์กโฟลว์ที่มีโครงสร้างสำหรับนักพัฒนาแต่ละคนที่ไม่ได้ทำงานเป็นทีมหรือเป็นบ้านซอฟต์แวร์ขนาดใหญ่หรือไม่? ฉันไม่มีความปรารถนาที่จะได้รับ PMP หรือทำงานให้กับ บริษัท ซอฟต์แวร์ ฉันแค่มองหาเวิร์กโฟลว์ที่มีประสิทธิภาพประสิทธิผลและใช้งานได้จริง

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