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

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

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

5
ควรทำการตรวจสอบโค้ดก่อนหรือหลังการทดสอบหน่วย
ฉันกำลังถกเถียงกับเพื่อนร่วมงานของฉันในเวลาที่จะทำการตรวจสอบโค้ด - ก่อนหรือหลังการทดสอบหน่วย การปฏิบัติที่ดีที่สุดคืออะไร? ปัจจัยบางประการที่เราอาจต้องคำนึงถึง (อาจมีมากกว่านี้): ขนาดของการเปลี่ยนแปลงรหัส - การเปลี่ยนแปลงครั้งใหญ่หมายถึงการเปลี่ยนแปลงเพิ่มเติมจะเกิดขึ้นจากการตรวจสอบรหัส หากการเปลี่ยนแปลงเหล่านี้มีขนาดใหญ่กว่าถ้าเป็น UT ก่อนการตรวจสอบโค้ดคุณจะต้องทำซ้ำ UT ส่วนใหญ่อีกครั้ง เวลาที่ใช้ในการทดสอบหน่วย มันเป็นฟังก์ชั่นใหม่หรือการแก้ไขข้อบกพร่อง

5
ดีกว่าที่จะใช้คำสั่ง preprocessor หรือคำสั่ง (คงที่)?
สมมติว่าเรามี codebase ที่ใช้สำหรับ costumers ที่แตกต่างกันมากมายและเรามี code บางอย่างที่เกี่ยวข้องกับ costumers ประเภท X ควรใช้คำสั่ง preprocessor เพื่อรวมรหัสนี้เฉพาะใน costumer ประเภท X หรือ ใช้ถ้ามีคำสั่ง? เพื่อให้ชัดเจน: // some code #if TYPE_X_COSTUMER = 1 // do some things #endif // rest of the code หรือ if(TYPE_X_COSTUMER) { // do some things } ข้อโต้แย้งที่ฉันคิดได้คือ: ตัวประมวลผลคำสั่งล่วงหน้ามีโค้ดขนาดเล็กลงและกิ่งน้อยลง หากผลลัพธ์ของคำสั่งที่มีรหัสที่คอมไพล์เสมอเช่นถ้ามีคนทำผิดพลาดที่จะเป็นอันตรายต่อรหัสที่ไม่เกี่ยวข้องสำหรับโครงการที่เขาทำงานอยู่ข้อผิดพลาดจะยังคงปรากฏขึ้นและเขาจะไม่ทำให้ฐานรหัสเสียหาย มิฉะนั้นเขาจะไม่รับรู้ถึงความเสียหาย ฉันถูกบอกเสมอว่าชอบการใช้งานตัวประมวลผลมากกว่าการใช้งานตัวประมวลผลล่วงหน้า (ถ้านี่คืออาร์กิวเมนต์เลย …
10 c++  c 

3
เตรียมพร้อมสำหรับการตรวจสอบรหัสในฐานะนักพัฒนาหรือไม่
ฉันกำลังมองหาแนวคิดบางอย่างที่นี่ ฉันอ่านบทความการตรวจสอบโค้ดควรดำเนินการอย่างไรและตรวจสอบโค้ดมีประโยชน์อย่างไร ซึ่งมีข้อมูลมาก แต่ฉันยังต้องการความชัดเจนมากขึ้นสำหรับคำถามด้านล่าง คำถามของฉันคือ ในฐานะนักพัฒนาเป้าหมายคุณสามารถแนะนำวิธีปฏิบัติที่ดีที่สุดบางประการที่นักพัฒนาสามารถรวมไว้ก่อนที่โค้ดของเขาจะได้รับการตรวจสอบ ขณะนี้ฉันฝึกวิธีการดังต่อไปนี้ PPT สำหรับการไหลแบบลอจิคัล ความคิดเห็นรายละเอียด ปัญหา: แม้ว่าฉันได้ปฏิบัติตามแนวทางข้างต้นแล้วพวกเขาไม่ได้ช่วยในการตรวจสอบ ปัญหาที่ฉันเผชิญคือเมื่อมีการอ้างเหตุผลบางอย่างฉันค้นหาการใช้งานและการไหลและเวลามากเกินไปเสียเวลาในกระบวนการและฉันได้รับในใจของผู้คน ฉันคิดว่านักพัฒนาจำนวนมากจะต้องผ่านสิ่งที่ฉันกำลังจะผ่านเช่นกัน
10 c#  code-reviews 

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

5
ความคิดเห็นของวิธีการควรมีทั้งบทสรุปและคำอธิบายการส่งคืนเมื่อพวกเขามักจะคล้ายกันมาก?
ฉันแสดงของรหัสเอกสารอย่างถูกต้องและผมตระหนักดีถึงข้อเสียเป็นไปได้ของมัน นั่นอยู่นอกขอบเขตของคำถามนี้ ฉันชอบที่จะปฏิบัติตามกฎของการเพิ่มความคิดเห็น XMLสำหรับสมาชิกสาธารณะทุกคนพิจารณาว่าฉันชอบ IntelliSense ใน Visual Studio มากแค่ไหน มีรูปแบบหนึ่งของความซ้ำซ้อนซึ่งแม้กระทั่งผู้วิจารณ์ที่มากเกินไปอย่างฉันก็ใส่ใจด้วย ตัวอย่างเช่นใช้List.Exists () /// <summary> /// Determines whether the List<T> contains elements /// that match the conditions defined by the specified predicate. /// </summary> /// <returns> /// true if the List<T> contains one or more elements that match the /// conditions …

2
สัญญารหัส / ยืนยัน: สิ่งที่มีการตรวจสอบซ้ำกัน?
ฉันเป็นแฟนตัวยงของการเขียนข้อตกลงสัญญาหรือเช็คประเภทใดก็ได้ที่มีในภาษาที่ฉันใช้ สิ่งหนึ่งที่ทำให้ฉันรำคาญใจเล็กน้อยคือฉันไม่แน่ใจว่าการปฏิบัติทั่วไปสำหรับการตรวจสอบซ้ำซ้อนคืออะไร สถานการณ์ตัวอย่าง: ฉันเขียนฟังก์ชันต่อไปนี้ก่อน void DoSomething( object obj ) { Contract.Requires<ArgumentNullException>( obj != null ); //code using obj } หลังจากนั้นไม่กี่ชั่วโมงฉันก็เขียนฟังก์ชั่นอื่นที่เรียกอันแรก เนื่องจากทุกสิ่งยังคงสดในหน่วยความจำฉันตัดสินใจที่จะไม่ทำสัญญาซ้ำเนื่องจากฉันรู้ว่าจะDoSomethingตรวจสอบวัตถุที่มีค่าว่างอยู่แล้ว: void DoSomethingElse( object obj ) { //no Requires here: DoSomething will do that already DoSomething( obj ); //code using obj } ปัญหาที่ชัดเจน: DoSomethingElseตอนนี้ขึ้นอยู่กับDoSomethingการตรวจสอบว่า obj ไม่เป็นโมฆะ ดังนั้นควรDoSomethingตัดสินใจว่าจะไม่ตรวจสอบอีกต่อไปหรือถ้าฉันตัดสินใจใช้ฟังก์ชันอื่น obj อาจไม่ได้รับการตรวจสอบอีกต่อไป ซึ่งทำให้ฉันเขียนการใช้งานนี้หลังจากทั้งหมด: …

5
Java ส่งเสริมการแยกระหว่างคำจำกัดความของคลาสและการใช้งานเช่นเดียวกับ C ++ หรือไม่?
ฉันมีการบ้านและฉันต้องประเมินว่าแนวทางใดดีกว่าตาม GRASP "รูปแบบที่ได้รับการป้องกัน" ผมพบว่าคำถามในกองมากเกินเกี่ยวกับการแยกส่วนหัวและรหัสไฟล์ใน C ++ อย่างไรก็ตามสิ่งที่ฉันต้องการรู้ว่าทำไม Java ไม่ปฏิบัติตาม C ++ ในการส่งเสริมการแยกระหว่างคำจำกัดความของชั้นเรียนและการใช้งานระดับ มีข้อได้เปรียบกับวิธีการของจาวามากกว่าวิธี C ++ หรือไม่?

3
มีอัลกอริทึมที่รู้จักกันดีในการจัดตารางการแข่งขันของทัวร์นาเมนต์หรือไม่?
เพียงแค่สงสัยว่ามีอัลกอริทึมการจัดตารางทัวร์นาเมนต์ออกมาแล้วหรือไม่ที่ฉันสามารถใช้หรือปรับตัวได้เล็กน้อย นี่คือความต้องการของฉัน: จำนวนตัวแปรของคู่ต่อสู้ที่อยู่ในจำนวนตัวแปรของทีม / สโมสรแต่ละอันจะต้องจับคู่กับคู่ต่อสู้ ฝ่ายตรงข้ามสองคนไม่สามารถมาจากสโมสรเดียวกันได้ หากมีผู้เล่นจำนวนคี่หนึ่งในนั้นจะถูกสุ่มเลือกเพื่อรับการลาก่อน อัลกอริทึมใด ๆ ที่เกี่ยวข้องกับชุดข้อกำหนดประเภทนี้จะได้รับการชื่นชม แก้ไข:ฉันต้องการเรียกใช้มากที่สุดครั้งเดียวเท่านั้นสร้างการจับคู่สำหรับ 'รอบแรก' ของทัวร์นาเมนต์
10 algorithms 

5
การขว้างและจับข้อยกเว้นในฟังก์ชั่น / วิธีการเดียวกัน
ฉันได้เขียนฟังก์ชันที่ขอให้ผู้ใช้ป้อนข้อมูลจนกว่าผู้ใช้จะป้อนจำนวนเต็มบวก (จำนวนธรรมชาติ) ใครบางคนบอกว่าฉันไม่ควรโยนและจับข้อยกเว้นในฟังก์ชั่นของฉันและควรให้ผู้โทรของฟังก์ชั่นของฉันจัดการกับพวกเขา ฉันสงสัยว่านักพัฒนาคนอื่นคิดอย่างไรกับเรื่องนี้ ฉันอาจใช้ข้อยกเว้นในทางที่ผิดในฟังก์ชั่น นี่คือรหัสใน Java: private static int sideInput() { int side = 0; String input; Scanner scanner = new Scanner(System.in); do { System.out.print("Side length: "); input = scanner.nextLine(); try { side = Integer.parseInt(input); if (side <= 0) { // probably a misuse of exceptions throw new NumberFormatException(); …
10 exceptions 

2
เป็นวิธีที่ดีในการทำความคุ้นเคยกับ PHP มาจากพื้นหลัง ASP.NET อะไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ขณะนี้ฉันรู้สึกสบายใจกับเครื่องมือสร้าง / เว็บแอพในสภาพแวดล้อม ASP.NET ฉันไม่ต้องการออกจาก tbh เพราะฉันชอบ C #, ASP.NET, MVC 3, Visual Studio และอื่น ๆ อย่างไรก็ตามตอนนี้ฉันไม่รู้อะไรเกี่ยวกับ PHP และดูเหมือนว่าเป็นข้อบกพร่องที่ฉันต้องการแก้ไข มีหนังสือ (หรือวิธีการเรียนรู้อื่น ๆ ) ที่จะเป็นแหล่งข้อมูลที่ดีสำหรับการเรียนรู้ PHP หรือไม่? เห็นได้ชัดว่ามีหนังสือ PHP เริ่มต้นมากมาย แต่ฉันก็พอใจกับสิ่งที่เกี่ยวข้องกับการสร้างหน้าเว็บและสนใจที่จะมุ่งเน้นไปที่ PHP เองซึ่งอาจไม่เข้ากันกับขอบเขตของหนังสือ PHP เริ่มต้นบางเล่ม ฉันอ่านคู่มือ PHP ค่อนข้างน้อยและดูเหมือนจะไม่ลื่นไหลอย่างที่ควรจะเป็น มีหนังสือ PHP …

5
การวิเคราะห์ภาษาการเขียนโปรแกรม
ในSICPรัฐผู้เขียน ( ส่วน 1.1 ) ว่ามี "กลไก" พื้นฐานสามประการของภาษาโปรแกรม: การแสดงออกดั้งเดิมซึ่งเป็นตัวแทนของหน่วยงานที่ง่ายที่สุดที่เกี่ยวข้องกับภาษา หมายถึงการรวมกันโดยที่องค์ประกอบผสมถูกสร้างขึ้นจากคนที่เรียบง่าย หมายถึงนามธรรมซึ่งองค์ประกอบสารประกอบสามารถตั้งชื่อและจัดการเป็นหน่วย ฉันจะวิเคราะห์ภาษาโปรแกรมกระแสหลัก (ตัวอย่างเช่น Java) ในแง่ขององค์ประกอบหรือกลไกเหล่านี้ได้อย่างไร

4
LINQ กับ Data Access Layer
ฉันสอนตัวเองอยู่เสมอเพื่อจัดการรหัสการเข้าถึงข้อมูลใน 'เลเยอร์' แยกจากกันอย่างสมบูรณ์เพื่อตรรกะทางธุรกิจและรหัส UI ของฉัน นี้ได้เสมอสถาปัตยกรรมที่ดีมากสำหรับผมและใด ๆ 'กฎ' หรือการปฏิบัติที่ดีที่สุดที่ฉันเห็นยังคงจัดการเพื่อให้พอดีกับรูปแบบของการเข้ารหัสนี้โดยเฉพาะอย่างยิ่งSingle รับผิดชอบหลักการ สำหรับโครงการบ้านส่วนใหญ่ของฉันฉันจะใช้ ORM ของฉันเองที่ฉันสร้างขึ้นซึ่งฉันตั้งใจจะทำโอเพ่นซอร์สเสมอ อย่างไรก็ตามตั้งแต่นั้นมา LINQ ก็พร้อมใช้งานซึ่งคล้ายกับวิธีการออมของฉัน (แต่ .. ดีกว่า) ก่อนหน้านี้ฉันไม่สามารถทำอะไรกับ ORM ของฉันที่ฉันไม่สามารถทำได้กับ LINQ (ยกเว้นบิตของการรวม REST) ดังนั้นคำถามของฉันคือ LINQ เป็น Data Access Layer ใหม่ของฉันหรือไม่ ฉันต้องการเลเยอร์นี้อีกเลยหรือไม่ BLL ของฉันควรคุยกับ LINQ โดยตรงหรือไม่ หรือการปฏิบัติที่ไม่ดีนี้ยังคง? แก้ไข: คำถามเดิมหมายถึง LINQ to Entities แต่มีคำตอบที่น่าสนใจมากมายเกี่ยวกับ LINQ กับ SQL ประชาชนคิดอะไรกับทั้งคู่? ฉันรวบรวมกว่า LINQ …

3
BitBucket อะไรที่จับได้? (TANSTAAFL ใช่ไหม?)
ความสามารถของ BitBucket และการกำหนดราคา (สูงสุด 5 ผู้ใช้ได้ฟรี) ทำให้ฉันสงสัยว่าสิ่งที่จับได้คือ ... ไม่มีสิ่งใดเป็นอาหารกลางวันฟรีหลังจากทั้งหมด BitBucket คืออะไรจากการเข้าร่วมที่ไม่ได้รับค่าจ้างของฉันนอกจากคนหล่อที่จะรวมไว้ในสื่อส่งเสริมการขายอย่างอิสระ (ตาม TOS)

6
เวลาประมาณการเท่ากับสัญญาในการแย่งชิงกันหรือไม่?
หากการประมาณการไม่ใช่สัญญาจากนั้นในฐานะเจ้าของผลิตภัณฑ์ฉันจะส่งมอบโครงการโดยไม่ทราบว่าจะใช้เวลานานเท่าใด ทีมการต่อสู้ทำงานอย่างมีประสิทธิภาพมากขึ้นหรือไม่หากเราปฏิบัติตามการประมาณการเวลาตามสัญญาหรือไม่ การวิจัย (การเตรียมการความพยายามในการเข้าใจปัญหา) ในเรื่องเท่าไหร่เพียงพอที่จะประเมินได้ถูกต้องหรือไม่ ปัญหาด้านเทคนิคที่ไม่คาดคิด (ปัญหาที่อาจทำให้การประมาณการเริ่มต้นของคุณยุ่งเหยิง) ที่เกิดขึ้นหลังจากที่คุณประเมินงานของคุณ?

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