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

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

20
คุณติดตามข้อบกพร่องในโครงการส่วนตัวของคุณได้อย่างไร [ปิด]
ฉันกำลังพยายามตัดสินใจว่าต้องประเมินกระบวนการติดตามข้อบกพร่องของฉันใหม่สำหรับโครงการที่ปลูกเองหรือไม่ ในช่วงหลายปีที่ผ่านมาฉันเพิ่งติดตามข้อบกพร่องโดยใช้TODOแท็กในโค้ดและติดตามพวกเขาในมุมมองที่เฉพาะเจาะจง (ฉันใช้ Eclipse ซึ่งมีระบบแท็กที่เหมาะสม) น่าเสียดายที่ฉันเริ่มสงสัยว่าระบบนี้ไม่ยั่งยืนหรือไม่ ข้อบกพร่องที่ฉันพบมักจะเกี่ยวข้องกับตัวอย่างของรหัสที่ฉันกำลังทำงานอยู่ ข้อบกพร่องที่ไม่เข้าใจในทันทีมักจะถูกลืมหรือเพิกเฉย ฉันเขียนใบสมัครสำหรับภรรยาของฉันซึ่งมีข้อบกพร่องร้ายแรงมาเกือบ 9 เดือนแล้วและฉันก็ลืมที่จะแก้ไข คุณใช้กลไกอะไรในการติดตามข้อบกพร่องในโครงการส่วนตัวของคุณ? คุณมีระบบที่เฉพาะเจาะจงหรือกระบวนการจัดลำดับความสำคัญและจัดการพวกเขา?

26
ภาษาการเขียนโปรแกรมที่เหลือเชื่อที่สุด? [ปิด]
จากเหตุผลพอสมควรภาษาการเขียนโปรแกรมทั่วไปคุณพบว่าเป็นคนที่ใจร้อนที่สุด? ฉันได้ฟังพอดคาสต์การเขียนโปรแกรมจำนวนมากและใช้เวลาในการเรียนรู้ภาษาใหม่บางอย่างที่กำลังพิจารณาว่าจะเกิดขึ้นและที่สำคัญ ฉันไม่จำเป็นต้องพูดถึงBrainFuckแต่ภาษาใดที่คุณจะพิจารณาว่าเป็นภาษาที่ท้าทายกระบวนทัศน์การเขียนโปรแกรมทั่วไป สำหรับฉันฉันทำหน้าที่บางอย่างและตรรกะ (ตัวอย่างเช่นPrologเขียนโปรแกรมการ ) ในปี 1990 ดังนั้นฉันจึงไม่สามารถพูดได้ว่าฉันพบสิ่งพิเศษที่นั่น ผมห่างไกลจากการเป็นผู้เชี่ยวชาญในนั้น แต่แม้ในวันนี้ใจดัดมากที่สุดภาษาการเขียนโปรแกรมสำหรับฉันเป็นPerl ไม่ใช่เพราะ"Hello World"นั้นยากที่จะนำไปใช้ แต่มีความยืดหยุ่นทางคำศัพท์มากจนการแก้ปัญหาที่ยากที่สุดบางส่วนสามารถย่อยสลายได้ดังนั้นกวีที่ฉันต้องเดินออกจากขั้วเพื่อล้างหัว ฉันไม่ได้บอกว่าฉันจะขายซอฟต์แวร์เชิงพาณิชย์ แต่มีเหตุผลที่ชัดเจนว่า Perl มีชื่อเสียง (ใน) เพียงดูรายการพื้นฐานของหนังสือ ดังนั้นภาษาที่ใช้ในการคิดของคุณที่ส่งเสริมการเขียนโปรแกรมและการปฏิบัติที่ดีขึ้นของคุณคืออะไร?

11
อะไรคือข้อโต้แย้งต่อต้านหรือสำหรับการใส่ตรรกะของแอปพลิเคชันลงในเลเยอร์ฐานข้อมูล? [ปิด]
นักพัฒนาซอฟต์แวร์ส่วนใหญ่ต้องการเก็บตรรกะแอปพลิเคชันในชั้นแอปพลิเคชันและมันอาจรู้สึกเป็นธรรมชาติสำหรับเราที่จะเก็บไว้ที่นี่ ผู้พัฒนาฐานข้อมูลดูเหมือนจะต้องการใส่ตรรกะของแอปพลิเคชันลงในเลเยอร์ฐานข้อมูลเนื่องจากเป็นทริกเกอร์และขั้นตอนการจัดเก็บ โดยส่วนตัวแล้วฉันต้องการเก็บไว้ให้มากที่สุดในเลเยอร์แอปพลิเคชันเพื่อให้ง่ายต่อการตรวจแก้จุดบกพร่องและแยกความรับผิดชอบของเลเยอร์ออกจากกัน คุณคิดอย่างไรเกี่ยวกับสิ่งนี้และสิ่งที่ควรหรือไม่ควรนำไปใช้ในเลเยอร์ฐานข้อมูล แก้ไขคำถามนี้รวมอยู่ในdba.seจากมุมมอง DBAs ในฐานะ programmers.se & dba.se มีกลุ่มเป้าหมายและอคติที่แตกต่างกันผู้อ่านในอนาคตอาจต้องการตรวจสอบคำตอบทั้งสองชุดก่อนที่จะตัดสินใจเลือกสิ่งที่ดีที่สุดสำหรับพวกเขา

1
มีหนังสือที่ยอมรับเกี่ยวกับ Agile หรือไม่?
ในฐานะนักพัฒนาเดี่ยวฉันคิดว่าฉันใช้กระบวนการที่คล้ายกับ Agile แต่ฉันต้องการเปรียบเทียบสิ่งที่ฉันทำกับ Agile จริงและดูว่าฉันสามารถปรับปรุงกระบวนการของตัวเองได้หรือไม่ มีหนังสือที่มีมาตรฐาน de-พฤตินัยสำหรับการอธิบายวิธีปฏิบัติที่ดีที่สุดวิธีการและข้อมูลที่เป็นประโยชน์อื่น ๆ เกี่ยวกับ Agile? หนังสือเล่มไหนที่ทำให้มันพิเศษ?
45 agile  books 

8
มีเหตุผลที่ถูกต้องหรือไม่ในการส่งคืนออบเจ็กต์ข้อยกเว้นแทนที่จะโยนมัน?
คำถามนี้มีวัตถุประสงค์เพื่อนำไปใช้กับภาษาการเขียนโปรแกรม OO ใด ๆ ที่รองรับการจัดการข้อยกเว้น; ฉันใช้ C # เพื่อเป็นตัวอย่างเท่านั้น มักจะมีข้อยกเว้นที่จะยกเมื่อมีปัญหาเกิดขึ้นว่ารหัสไม่สามารถจัดการได้ทันทีและจากนั้นจะถูกจับในcatchประโยคในสถานที่ที่แตกต่างกัน (มักจะเป็นกรอบสแต็คด้านนอก) ถาม:มีสถานการณ์ที่ถูกต้องตามกฎหมายหรือไม่ที่ข้อยกเว้นไม่ได้ถูกโยนทิ้งและจับได้ แต่กลับมาจากวิธีการแล้วส่งผ่านไปเป็นวัตถุข้อผิดพลาดหรือไม่? คำถามนี้เกิดขึ้นสำหรับฉันเพราะSystem.IObserver<T>.OnErrorวิธีของ. NET 4 แนะนำเพียงว่า: ข้อยกเว้นถูกส่งผ่านเป็นวัตถุข้อผิดพลาด ลองดูที่สถานการณ์อื่นการตรวจสอบ สมมติว่าฉันกำลังติดตามภูมิปัญญาดั้งเดิมและดังนั้นฉันจึงแยกแยะระหว่างประเภทวัตถุข้อผิดพลาดIValidationErrorและประเภทข้อยกเว้นแยกValidationExceptionที่ใช้เพื่อรายงานข้อผิดพลาดที่ไม่คาดคิด: partial interface IValidationError { } abstract partial class ValidationException : System.Exception { public abstract IValidationError[] ValidationErrors { get; } } ( System.Component.DataAnnotationsเนมสเปซทำอะไรที่ค่อนข้างคล้ายกัน) ประเภทเหล่านี้สามารถใช้งานได้ดังนี้: partial interface IFoo { } // an …

8
จำนวนข้อผิดพลาดเฉลี่ยต่อ loc นั้นเท่ากันสำหรับภาษาการเขียนโปรแกรมที่แตกต่างกันหรือไม่? [ปิด]
ฉันได้รับแจ้งว่าจำนวนข้อบกพร่อง / ข้อบกพร่องโดยเฉลี่ยต่อบรรทัดของรหัสคือ "คงที่" สำหรับภาษาการเขียนโปรแกรมที่แตกต่างกัน Ruby ของ KLOC 10 ตัวจะมีจำนวนบั๊กเท่ากับ 10 KLOC ของ c ++ อาร์กิวเมนต์มักจะใช้เพื่อส่งเสริมการใช้ภาษาที่แสดงออก (คิดว่าหลาม / ruby ​​มากกว่า c ++ / แอสเซมบลี) เนื่องจากจำนวนบรรทัดเพื่ออธิบายการทำงานเดียวกันจะมีขนาดเล็กลง ไม่มีใครทราบว่าข้อเรียกร้องนี้มาจากไหน ภาษาระดับสูงขึ้นนำไปสู่ข้อบกพร่องน้อยลงหรือไม่

3
ข้อความสงวนลิขสิทธิ์ในซอร์สโค้ด [ปิด]
นับตั้งแต่ฉันเริ่มเขียนโปรแกรมฉันเห็นส่วนหัวที่ด้านบนสุดของไฟล์รหัสส่วนใหญ่ที่ระบุถึงลิขสิทธิ์บางประเภท: เช่น /* Copyright (c) 1998 Innotech */ หรือ /* Copyright (c) 1998-2008 Innotech */ แนวคิดที่ผมได้รับความคิด ... ขึ้นอยู่กับความต้องการของคุณ / ต้องการมันประมาณแปลที่ไหนสักแห่งระหว่าง: เฮ้ลองดูสิ! ฉันทำสิ่งนี้! ฉันยอดเยี่ยม! ไปยัง อย่าคัดลอก / แจกจ่ายต่อนี้! ทนายความของเราจะมาหาคุณถ้าคุณทำ! ในมือข้างหนึ่งฉันพบว่าทั้งเรื่องค่อนข้างตลกขบขันบ่อยครั้งที่นี่เป็นไฟล์ที่ไม่มีใครเห็นนอกนักพัฒนาใน บริษัท แต่ทว่าการสันนิษฐานว่าบรรทัดนี้อาจเป็นจริงในวันหนึ่ง "หมายถึงบางสิ่ง" ฉันอยากรู้เกี่ยวกับส่วนวันที่ . วันที่เดียวบ่งบอกว่าผู้เขียนอ้างสิทธิ์ในลิขสิทธิ์ของไฟล์ตั้งแต่วันดังกล่าวไปจนถึงชั่วนิรันดร์หรือไม่? หากมีการใช้ช่วงวันที่และไม่ได้รับการอัปเดตจนถึงปัจจุบันผู้พัฒนาได้ยกเลิกการใช้งานลิขสิทธิ์ของตนเองเกินช่วงวันที่หรือไม่ หากไม่มีการยื่นเรื่องกฎหมายเพิ่มเติมบางประเภท - ส่วนหัวลิขสิทธิ์ให้ความแข็งแกร่งทางกฎหมายใด ๆ หรือไม่? หรือเราทุกคนก็แค่หลอกตัวเอง

7
พิมพ์ตัวแปรการหล่อใน PHP, อะไรคือเหตุผลเชิงปฏิบัติสำหรับการทำเช่นนี้?
PHP เป็นส่วนใหญ่ของเราทราบว่ามีการพิมพ์ที่อ่อนแอ สำหรับคนที่ไม่ทำ PHP.net พูดว่า: PHP ไม่ต้องการคำนิยามประเภทที่ชัดเจน (หรือสนับสนุน) ในการประกาศตัวแปร ชนิดของตัวแปรถูกกำหนดโดยบริบทที่ใช้ตัวแปรนั้น ไม่ว่าจะชอบหรือเกลียด PHP ก็สร้างตัวแปรใหม่ขึ้นมาทันที ดังนั้นรหัสต่อไปนี้ถูกต้อง: $var = "10"; $value = 10 + $var; var_dump($value); // int(20) PHP ยังอนุญาตให้คุณสร้างตัวแปรอย่างชัดเจนเช่น: $var = "10"; $value = 10 + $var; $value = (string)$value; var_dump($value); // string(2) "20" ทั้งหมดนี้ยอดเยี่ยม ... แต่สำหรับชีวิตของฉันฉันไม่สามารถเข้าใจถึงเหตุผลที่ปฏิบัติได้สำหรับการทำเช่นนี้ ฉันไม่มีปัญหากับการพิมพ์ที่แข็งแกร่งในภาษาที่รองรับเช่น Java ไม่เป็นไรและฉันเข้าใจอย่างถ่องแท้ นอกจากนี้ฉันรู้และเข้าใจถึงประโยชน์ของการบอกกล่าวชนิดในพารามิเตอร์ฟังก์ชัน ปัญหาที่ฉันมีกับการคัดเลือกนักแสดงอธิบายโดยข้อความข้างต้น …

3
รูปแบบการเข้ารหัสสำหรับโปรแกรมเมอร์ที่บกพร่องทางสายตา [ปิด]
ฉันมีความบกพร่องทางสายตา ฉันเห็นแว่นตาดีพอที่จะขับรถ แต่ขนาดตัวอักษรฉันทำงานได้อย่างสบายใจฉันสามารถดูได้ครั้งละประมาณ 15 บรรทัดจาก 100 ตัวอักษร สิ่งนี้ส่งผลต่อสไตล์การเขียนโค้ดของฉัน สิ่งหนึ่งที่ฉันทำคือเขียนฟังก์ชั่นที่สั้นลง รหัสของฉันมีแนวโน้มที่จะได้รับความคิดเห็นที่ดีเพราะฟังก์ชั่นสั้น ๆ เหล่านี้มีชื่อที่ดีทำให้ฟังก์ชั่นระดับสูงอ่านได้ง่าย แต่ในสถานการณ์ที่มีประสิทธิภาพสูงบางคนแสดงความคิดเห็นเกี่ยวกับจำนวนพื้นที่ การประมวลผล สิ่งที่สองที่ฉันทำคือแบ่งคลาสระหว่างไฟล์เพื่อสร้างไฟล์ที่สั้นกว่า สิ่งนี้จะช่วยลดระยะห่างในการเลื่อนเพื่อไปยังฟังก์ชั่นที่เกี่ยวข้องและขึ้นอยู่กับองค์กรซึ่งอาจทำให้ฉันสามารถวางไฟล์บนจอภาพที่แตกต่างกันเพื่อดูกัน วิธีปฏิบัติทั้งสองนี้ใช้สำหรับหน่วยที่สามารถบันทึกได้มากขึ้นซึ่งรูปแบบการเข้ารหัสส่วนใหญ่ต้องการเอกสารฉันซึ่งทำให้ปัญหาแย่ลงอีกโดยขยายความยาวของไฟล์ของฉันและระยะห่างระหว่างฟังก์ชันที่เกี่ยวข้อง ปัจจุบันฉันใช้ Visual Studio ซึ่งอนุญาตให้มีการพับโค้ดในระดับฟังก์ชั่นและระดับบล็อกความคิดเห็น (ซึ่งฉันใช้บ่อย) แต่ไม่ได้พับที่ระดับวงเล็บเหมือนที่ Notepad ++ ทำ เครื่องมือแก้ไขที่ให้การพับโค้ดที่ดีกว่านั้นไม่มีคุณสมบัติ Intellisense ทั้งหมดของ VS ฉันสามารถใช้ภูมิภาคใน VS ได้ แต่มันดูรกมากถ้าใช้ทุกๆ 10 บรรทัด การพับเป็นบางครั้งมีประโยชน์ในการทำให้โค้ดสมบูรณ์โดยที่ฉันยังทำงานกับฟีเจอร์ต่าง ๆ ของโค้ด ใครช่วยแนะนำการเขียนโค้ดที่ดีขึ้นเพื่อช่วยในการมองเห็นรหัสที่ จำกัด ?

14
เหตุใดจึงมีข้อผิดพลาดตั้งชื่อเป็น "ข้อยกเว้น" แต่ไม่ใช่ "ข้อผิดพลาด" ในภาษาการเขียนโปรแกรม
ฉันคิดถึงเรื่องนั้นมาพักใหญ่แล้ว ฉันไม่ใช่คนพูดภาษาอังกฤษ แต่ฉันยังมีประสบการณ์การเขียนโปรแกรมมาหลายปีและฉันมักจะถามฉันเสมอ เหตุใดจึงตั้งชื่อเป็นข้อยกเว้น แต่ไม่ใช่ข้อผิดพลาดเนื่องจากเป็นข้อผิดพลาด มันอาจจะเป็นแทนPageNotFoundErrorPageNotFoundException

4
บริการแบบดาวน์สตรีมและอัพสตรีมคือวิธีใด
สำหรับระบบที่ประกอบด้วยบริการหลายอย่างที่โทรหากัน (เช่น Front End -> Backend -> Storage) ฉันมักจะได้ยินคนที่ใช้คำศัพท์เช่นบริการ "downstream" หรือ "upstream" ฉันไม่ชัดเจนว่าทิศทางเหล่านี้หมายถึงอะไร กระแสข้อมูลในทั้งสองทิศทาง คำขอไหลจากการที่ผู้ใช้หันหน้าไปทางบริการแบ็กเอนด์มากขึ้น แต่การตอบสนองไหลไปในทิศทางตรงกันข้าม

8
ก่อน OOP สมาชิกโครงสร้างข้อมูลถูกปล่อยให้เป็นสาธารณะหรือไม่
เมื่อโครงสร้างข้อมูล (ตัวอย่างเช่นคิว) ถูกนำไปใช้โดยใช้ภาษา OOP สมาชิกบางส่วนของโครงสร้างข้อมูลจะต้องเป็นส่วนตัว (ตัวอย่างเช่นจำนวนรายการในคิว) คิวนอกจากนี้ยังสามารถนำมาใช้ในภาษากระบวนการใช้และชุดของฟังก์ชั่นที่ใช้งานบนstruct structอย่างไรก็ตามในภาษาขั้นตอนคุณไม่สามารถทำให้สมาชิกของstructเอกชน สมาชิกของโครงสร้างข้อมูลมีการใช้งานในภาษาขั้นตอนที่ปล่อยให้สาธารณะหรือมีเคล็ดลับที่จะทำให้พวกเขาเป็นส่วนตัวหรือไม่?

7
ฉันจะป้องกันไม่ให้ส่วนหัวนรกได้อย่างไร
เรากำลังเริ่มโครงการใหม่ตั้งแต่เริ่มต้น ประมาณแปดนักพัฒนาระบบย่อยโหลหรือมากกว่านั้นแต่ละคนมีไฟล์ต้นฉบับสี่หรือห้าไฟล์ เราจะทำอย่างไรเพื่อป้องกัน“ หัวนรก”, AKA“ หัวสปาเก็ตตี้”? หนึ่งส่วนหัวต่อไฟล์ต้นฉบับ? บวกหนึ่งต่อระบบย่อย? แยก typdefs, stucts & enums จากฟังก์ชั่นต้นแบบหรือไม่? แยกระบบย่อยภายในออกจากสิ่งของภายนอกของระบบย่อยหรือไม่? ยืนยันว่าทุกไฟล์เดียวไม่ว่าจะเป็นส่วนหัวหรือแหล่งที่มาจะต้องรวบรวมแบบสแตนด์อโลน ฉันไม่ได้ขอวิธีที่ "ดีที่สุด" เพียงชี้ว่าควรระวังอะไรและอาจทำให้เกิดความเศร้าโศกเพื่อที่เราจะได้พยายามหลีกเลี่ยง นี่จะเป็นโครงการ C ++ แต่ข้อมูล C จะช่วยผู้อ่านในอนาคต
44 c++  headers  include 

4
การเผยแพร่ข้อยกเว้น: เมื่อใดที่ฉันควรตรวจจับข้อยกเว้น
เมธอด A เรียกเมธอด B ซึ่งจะเรียกเมธอด C ไม่มีการจัดการข้อยกเว้นใน MethodB หรือ MethodC แต่มีข้อยกเว้นการจัดการใน MethodA ใน MethodC มีข้อยกเว้นเกิดขึ้น ตอนนี้ข้อยกเว้นนั้นทำให้เดือดร้อนขึ้นไปที่ MethodA ซึ่งจัดการมันอย่างเหมาะสม เกิดอะไรขึ้นกับสิ่งนี้? ในใจของฉันในบางจุดผู้เรียกจะเรียกใช้เมธอด B หรือ MethodC และเมื่อเกิดข้อยกเว้นขึ้นในวิธีการเหล่านั้นสิ่งที่จะได้รับจากการจัดการข้อยกเว้นภายในวิธีการเหล่านั้นซึ่งโดยพื้นฐานแล้วเป็นเพียงลอง / จับ / ในที่สุดบล็อก พวกเขาฟองขึ้นไปที่ callee? คำแถลงหรือความเห็นเป็นเอกฉันท์เกี่ยวกับการจัดการข้อยกเว้นคือการโยนเมื่อการดำเนินการไม่สามารถดำเนินการได้เนื่องจากข้อผิดพลาดนั้น ฉันเข้าใจ. แต่ทำไมไม่จับข้อยกเว้นเพิ่มเติมขึ้นโซ่แทนที่จะลอง / จับบล็อกจนสุด ฉันเข้าใจเมื่อคุณต้องการเพิ่มทรัพยากร นั่นเป็นเรื่องที่แตกต่างอย่างสิ้นเชิง

3
ความแตกต่างระหว่างคลาสย่อยและประเภทย่อยคืออะไร?
คำตอบการจัดอันดับสูงสุดที่จะคำถามนี้เกี่ยวกับ Liskov ชดเชยหลักการใช้เวลาปวดจะแยกแยะระหว่างข้อกำหนดย่อยและsubclass นอกจากนี้ยังทำให้จุดที่บางภาษาทำให้ทั้งสองเป็นคู่ในขณะที่คนอื่นทำไม่ได้ สำหรับภาษาเชิงวัตถุที่ฉันคุ้นเคยมากที่สุด (Python, C ++), "type" และ "class" เป็นแนวคิดที่มีความหมายเหมือนกัน ในแง่ของ C ++ การแยกประเภทย่อยและคลาสย่อยหมายความว่าอย่างไร กล่าวว่าเช่นว่าFooเป็น subclass FooBaseแต่ไม่ได้เป็นชนิดย่อยของ หากfooเป็นตัวอย่างของFooสายนี้จะ: FooBase* fbPoint = &foo; ไม่ถูกต้องอีกต่อไป?

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