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

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

3
แนวทางและแนวทางปฏิบัติที่ดีสำหรับการตรวจสอบรหัสที่จำเป็น [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เรากำลังลองใช้การตรวจสอบรหัสที่จำเป็นสำหรับการกระทำแต่ละครั้ง - ไม่มีสิ่งใดที่จะเป็นความลับที่ไม่ได้รับการตรวจสอบโดยอย่างน้อย 1 คนไม่ใช่ผู้เขียน - สำหรับการวิ่งสองสามครั้ง เราได้ซื้อจากทั้งนักพัฒนาและผู้บริหาร (ซึ่งเป็นสถานการณ์ที่น่าทึ่งที่ต้องอยู่ใน) และเราต้องการได้รับผลประโยชน์ที่เป็นที่รู้จัก: ลดข้อผิดพลาดที่เห็นได้ชัด การรับรู้มากขึ้นเกี่ยวกับการเปลี่ยนแปลงที่เกิดขึ้นรอบ ๆ โครงการ "ฉันรู้ว่ามีคนกำลังมองดูสิ่งนี้อยู่ดังนั้นฉันจะไม่ขี้เกียจ" / เอฟเฟกต์ต่อต้านคาวบอย เพิ่มความสอดคล้องภายใน / ข้ามโครงการ แต่เรากำลังแนะนำสิ่งที่เป็นที่รู้จักกันเพื่อลดความเร็วและหากทำผิดอาจสร้างขั้นตอนที่โง่เขลาในขั้นตอนการคอมมิชชันที่ไม่ได้ทำอะไรเลยนอกจากใช้เวลา สิ่งที่ฉันกังวลเกี่ยวกับ: ความคิดเห็นที่พัฒนาไปสู่การหยิบจู้จี้ (ซึ่งเกินความจริง) ผู้คนเปิดประเด็นทางสถาปัตยกรรมขนาดใหญ่โดยเป็นส่วนหนึ่งของการทบทวนสองบรรทัด ฉันไม่ต้องการอคติกับคำตอบอย่างอื่น ในขณะที่เราทุกคนเป็นคนสมเหตุสมผลและเราจะทำการวิเคราะห์ตนเองมากมายเราสามารถใช้ข้อมูลเชิงลึกที่ได้รับจากการต่อสู้กับสิ่งที่เราควรพยายามทำให้สำเร็จในช่วงการตรวจทานเพื่อให้บทวิจารณ์ได้ผลจริงสำหรับเรา . แนวทางและนโยบายบางประการที่คุณพบว่าทำงานได้อย่างไร

1
MVC + 3 ชั้น ที่ ViewModels เข้ามาเล่น?
ฉันออกแบบแอพพลิเคชั่น 3 ชั้นโดยใช้ ASP.NET MVC 4 ฉันใช้ทรัพยากรต่อไปนี้เป็นข้อมูลอ้างอิง CodeProject: MVC + N-tier + Entity Framework แยกการเข้าถึงข้อมูลใน ASP.NET MVC ฉันมีดีไซน์ดังต่อไปนี้ Presentation Layer (PL) (โครงการ MVC หลักที่MของMVCถูกย้ายไปยัง Data Access Layer): MyProjectName.Main Views/ Controllers/ ... ชั้นตรรกะทางธุรกิจ (BLL) : MyProjectName.BLL ViewModels/ ProjectServices/ ... ชั้นการเข้าถึงข้อมูล (DAL) : MyProjectName.DAL Models/ Repositories.EF/ Repositories.Dapper/ ... ตอนนี้ PL อ้างอิง BLL …

2
การแพร่กระจายรหัสที่มีความคิดเห็น refactoring เป็นความคิดที่ดี?
ฉันกำลังทำงานในโครงการ "สปาเก็ตตี้โค้ด" และในขณะที่ฉันกำลังแก้ไขข้อบกพร่องและใช้งานคุณสมบัติใหม่ ๆ ฉันก็ทำการปรับโครงสร้างใหม่เพื่อให้สามารถทดสอบโค้ดหน่วยได้ รหัสมักจะถูกรวมเข้าด้วยกันอย่างแน่นหนาหรือซับซ้อนซึ่งการแก้ไขข้อบกพร่องเล็ก ๆ จะส่งผลให้มีการเขียนคลาสใหม่จำนวนมาก ดังนั้นฉันจึงตัดสินใจวาดเส้นหนึ่งในรหัสที่ฉันหยุด refactoring เพื่อให้ชัดเจนฉันวางความคิดเห็นในรหัสอธิบายสถานการณ์เช่น: class RefactoredClass { private SingletonClass xyz; // I know SingletonClass is a Singleton, so I would not need to pass it here. // However, I would like to get rid of it in the future, so it is passed …

5
วิธีการเปรียบเทียบคุณสมบัติของสองเส้นโค้ง?
ฉันต้องเปรียบเทียบสองเส้นโค้ง f (x) และ g (x) พวกเขาอยู่ในช่วง x เดียวกัน (พูด -30 ถึง 30) f (x) อาจมียอดแหลมหรือยอดแหลมและหุบเขาที่ราบเรียบ g (x) อาจมีจุดสูงสุดและหุบเขาเหมือนกัน ถ้าเป็นเช่นนั้นฉันต้องการวัดว่าคุณสมบัติเหล่านี้ตรงกันมากเพียงใดโดยไม่มีการตรวจสอบด้วยภาพ ฉันพยายามแก้ไขปัญหาด้วยวิธีต่อไปนี้ ทำให้ทั้งสองฟังก์ชั่นปกติด้วยการหารแต่ละจุดข้อมูลตามพื้นที่รวมของฟังก์ชั่น ตอนนี้พื้นที่ของฟังก์ชั่นปกติคือ 1.0 ในแต่ละ x รับค่าต่ำสุดจาก f (x) และ g (x) นี่จะทำให้ฉันมีฟังก์ชั่นใหม่ที่เป็นพื้นซ้อนกันระหว่าง f (x) และ g (x) เมื่อฉันรวมฟังก์ชั่นที่เกิดขึ้นของขั้นตอนที่ 2 ฉันได้รับพื้นที่ทับซ้อนทั้งหมดจาก 1.0 อย่างไรก็ตามสิ่งนี้ไม่ได้บอกฉันว่ายอดเขาและหุบเขาตรงกับหรือไม่ ฉันไม่แน่ใจว่าสิ่งนี้สามารถทำได้ แต่ถ้ามีคนรู้วิธีฉันจะขอบคุณความช่วยเหลือของคุณ == แก้ไข == สำหรับการชี้แจงฉันได้รวมภาพ ความแตกต่างระหว่างเส้นโค้งทั้งสอง …
11 geometry 

5
การทำซ้ำรหัสกับวิธีที่รับผิดชอบหลายอย่าง
ฉันพยายามปฏิบัติตาม Single Responsibility Principle (SRP) และไม่ใช้ Code ซ้ำ อย่างไรก็ตามมักจะมีสถานที่ที่มีการทำซ้ำรหัสที่ไม่มีอะไรมากไปกว่าบล็อคโค้ดของการเรียกใช้ที่สามารถต้านทานการแตกออกเป็นอย่างน้อยแปลความหมายเต็มวิธีการชื่อ: DoAction1(); DoAction2(); if (value) DoAction3(); DoAction4(); เป็นวิธีที่ดีที่สุดในการแยกรหัสดังกล่าวเป็นวิธีการและวิธีการตั้งชื่อมันได้อย่างไร

1
ทำไมคำหลักที่ให้ผลตอบแทนถูกนำมาใช้ร่วมกับผลตอบแทนและการทำลายไม่ใช่ด้วยตัวเอง?
ใน C # คุณสามารถสร้างวิธีการที่มีประเภทผลตอบแทนIEnumerable<T>และการใช้yield returnและyield breakเพื่อควบคุมการไหล นี่คือตัวอย่างง่ายๆที่ใช้ตัวควบคุมทั้งสอง: public IEnumerable<int> GetEvens(int start, int end) { if(end < start) yield break; if(start & 2 != 0) start++; for(int i = start; i <= end; i+=2) { yield return i; } } คำถามของฉันคือทำไมมันถูกออกแบบมาเพื่อใช้คำหลักสองคำด้วยกันyieldและไม่ได้ใช้มันเหมือนดังต่อไปนี้ด้วยคำเดียวyield"ที่ให้ค่าตอบแทน": public IEnumerable<int> GetEvens(int start, int end) { if(end < start) …
11 c# 

3
ทำไมต้อง CIL และ CLR ใน. NET
ผมเห็นภาพนี้ดีที่นี่ ฉันได้เรียนรู้ว่าคอมไพเลอร์ทั้งหมดที่สนับสนุน. net language จะแปลงซอร์สโค้ดเป็นCILรูปแบบ ตอนนี้ Microsoft จะไม่นำ.NETระบบปฏิบัติการทั้งหมดมาเขียน CLR สำหรับระบบปฏิบัติการทั้งหมด แล้วทำไมต้องเก็บรูปแบบรหัสกลางและ CLR เพื่อรัน CIL นั้น เป็นเรื่องที่ไม่ปวดหัวที่จะจัดการกับ เหตุใด Microsoft จึงเลือกเป็นเช่นนี้ แก้ไขสถาปัตยกรรมแบบนี้มีราคา มันจะลดประสิทธิภาพลงใช่มั้ย Java ทำเช่นนี้เพื่อรักษาความเป็นอิสระของแพลตฟอร์มด้วยเหตุผลใดที่. NET ทำเช่นนั้น? ทำไมไม่เก็บ C ธรรมดาอย่างคอมไพเลอร์ วิธีใดก็ตามที่จะต้องใช้คอมไพเลอร์ในการแปลงรหัสเป็น CIL หากฉันต้องการเพิ่มภาษาใหม่ใด ๆ ความแตกต่างเพียงอย่างเดียวก็คือภาษาเป้าหมาย ตาดเป็นทั้งหมด
11 .net 

2
เครื่องมือข้อมูล SQL Server & Entity Framework - มีการทำงานร่วมกันที่นี่?
ออกมาจากโครงการโดยใช้ Linq2Sql ฉันสงสัยว่าอีกอัน (ใหญ่กว่า) อาจผลักฉันเข้าไปในอ้อมแขนของ Entity Framework ฉันได้ทำการอ่านข้อมูลเกี่ยวกับเรื่องนี้แล้ว แต่สิ่งที่ฉันไม่สามารถหาได้นั้นเป็นเรื่องราวที่สอดคล้องกันเกี่ยวกับวิธีที่ SQL Server Data Tools และ Entity Framework ควร / สามารถ / อาจใช้ร่วมกันได้ พวกเขารู้สึกแยกกันโดยสิ้นเชิงและการใช้พวกมันเข้าด้วยกันเป็นวิธีที่ผิด? พวกเขามีมุมฉากเต็มเปาและฉันพลาดประเด็นไปหรือเปล่า? เหตุผลบางอย่างที่ฉันคิดว่าฉันอาจต้องการ: SSDT นั้นยอดเยี่ยมสำหรับการ 'คอมไพล์' (ตรวจสอบ) และ SQL เวอร์ชันและสกีมาที่ง่ายดาย แต่เรื่องราว 'การโยกย้าย / อัปเดต' SSDT ไม่น่าเชื่อถือ (สำหรับฉัน): "อัปเดตทุกอย่าง" ทำงานได้ดีสำหรับสคีมา แต่ไม่มีทาง (AFAIK) ที่จะสามารถทำงานกับข้อมูลได้ ในทางกลับกันฉันไม่ได้ลองการโยกย้าย EF เพื่อทราบว่ามันมีปัญหาที่คล้ายกันหรือไม่ แต่บิต Up / Down …

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

3
สถาปัตยกรรมที่พูดแล้ว abstraction layer ของฐานข้อมูลเช่น Entity Framework ของ Microsoft ทำให้ความต้องการ Data Access Layer แยกจากกันหรือไม่?
วิธีที่มันเป็น เป็นเวลาหลายปีที่ฉันจัดระเบียบโซลูชันซอฟต์แวร์ของฉันเช่น: Data Access Layer (DAL) เป็นนามธรรมธุรกิจของการเข้าถึงข้อมูล Business Logic Layer (BLL) เพื่อใช้กฎธุรกิจกับชุดข้อมูลจัดการการตรวจสอบความถูกต้อง ฯลฯ Utilities (Util) ซึ่งเป็นเพียงไลบรารีของวิธีการใช้งานทั่วไปที่ฉันสร้างขึ้นเมื่อเวลาผ่านไป Presentation Layer ซึ่งแน่นอนว่าอาจเป็นเว็บเดสก์ท็อปมือถือหรืออะไรก็ตาม วิธีที่มันเป็นตอนนี้ สำหรับสี่ปีที่ผ่านมาหรือดังนั้นฉันใช้ Entity Framework ของ Microsoft (ฉันมีอำนาจเหนือกว่า. dev dev) และฉันพบว่าการมี DAL กลายเป็นเรื่องยุ่งยากมากกว่าการทำความสะอาดเพราะบัญชี Entity Framework ได้ทำไปแล้ว งานที่ DAL ของฉันเคยทำ: มันสรุปธุรกิจของการรัน CRUDs กับฐานข้อมูล ดังนั้นฉันมักจะจบลงด้วย DAL ที่มีคอลเลกชันของวิธีการเช่นนี้: public static IQueryable<SomeObject> GetObjects(){ var db = …

3
รายการคำที่ยาวที่สุดพร้อมตัวอักษรเริ่มต้นและตัวอักษรที่ตรงกัน
เพื่อนของฉันบอกปัญหาที่เขาบอกว่าเป็นเรื่องง่าย แต่ฉันไม่สามารถหาอัลกอริทึมที่ดีที่จะใช้ทำมันได้ คุณจะได้รับการป้อนคำ 100 คำในภาษาอังกฤษแบบสุ่ม คุณต้องค้นหาสตริงคำที่ยาวที่สุดที่ตัวอักษรตัวสุดท้ายในคำเดียวตรงกับตัวอักษรตัวแรกในคำถัดไป คุณสามารถใช้แต่ละคำได้ครั้งเดียวเท่านั้น ตัวอย่างเช่นหากคุณได้รับคำว่า "cat", "dog", "that" สตริงที่ยาวที่สุดที่คุณสามารถทำได้คือ "cat -> that" หากคุณได้รับคำว่า "mouse", "moose", "unicorn" สตริงที่ยาวที่สุดที่คุณสามารถสร้างได้จะเป็นเพียงหนึ่งคำ (เนื่องจากไม่มีลิงก์คำเหล่านั้น) หากคุณได้คำว่า "bird", "dish", "harb" สตริงที่ยาวที่สุดที่คุณสามารถทำได้คือ "harb -> bird -> dish" (หรือ "dish -> harb -> bird" หรือ "bird - > dish -> harb ") ฉันคิดว่าการสร้างแบบจำลองนี้เป็นกราฟวงกลมกำกับ แต่ละโหนดจะเป็นเพียงคำเดียวโดยจุดยอดจะไปที่แต่ละคำ / โหนดที่เริ่มต้นด้วยตัวอักษรคำนี้ลงท้ายด้วย +-------+ …
11 algorithms 

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

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

3
ทำไมคอลเลกชัน java ที่แตกต่างกันจึงมีความจุเริ่มต้นแตกต่างกัน
เมื่อมองไปที่คอนสตรัคชันการสะสมที่แตกต่างกัน เหตุใด ArrayList () จึงสร้างรายการที่ว่างเปล่าด้วยความจุเริ่มต้นที่สิบและ ArrayDeque () สร้างอาร์เรย์ deque ที่ว่างเปล่าที่มีความจุเริ่มต้นเพียงพอที่จะเก็บองค์ประกอบ 16 องค์ประกอบ
11 java  collections 

2
แถวใดที่เรียงลำดับคำสั่งที่หายไปโดยเรียงลำดับ?
โปรแกรมเมอร์คนหนึ่งกำลังทดสอบและเปรียบเทียบแอปพลิเคชันเดียวกันซึ่งใช้โครงสร้างฐานข้อมูลเดียวกันและข้อมูลเดียวกันเฉพาะในฐานข้อมูลที่แยกกันสองแห่งหนึ่งแห่งคือ Oracle 8 และอีกแห่งหนึ่งกับ Oracle 9 แอปรันคิวรีโดยไม่มี ORDER BYส่วนคำสั่ง เขาอ้างว่าแบบสอบถาม ORDER-BY-less ควรส่งคืนแถวตามลำดับเดียวกันในฐานข้อมูลทั้งสอง ฉันบอกเขาว่าไม่มีการรับประกันของคำสั่งแถวเดียวกันเว้นแต่ว่าคุณจะอธิบายคำสั่ง ORDER BY ฐานข้อมูลมีดัชนีและคีย์เหมือนกัน แต่แผนอธิบายแสดงให้เห็นว่าในฐานข้อมูลหนึ่งเอ็นจินกำลังใช้คีย์ของหนึ่งในตารางที่เข้าร่วมขณะที่ในอีกฐานข้อมูลหนึ่งกำลังใช้ของอีกอัน เขายืนยันว่าสภาพแวดล้อมฐานข้อมูลทั้งสองนั้นไม่เท่ากันซึ่งเป็นเพราะพวกเขามีสถิติที่แตกต่างกันเครื่องยนต์ rdbms ที่แตกต่างกัน ฯลฯ แต่ไม่ใช่เพราะฉันไม่สามารถทำซ้ำทุกดัชนีที่ฐานข้อมูลเดิมมี ฉันบอกเขาว่าเขาต้องอธิบายให้ORDER BYประโยคถ้าคำสั่งนั้นสำคัญจริงๆ คำถาม ดังนั้นฉันสามารถอธิบายเขาได้ดีกว่า: แบบสอบถามดึงข้อมูลแถวใดเมื่อคุณไม่อธิบายให้เรียงลำดับ ORDER BY และทำไมแบบสอบถามนั้นไม่ส่งคืนแถวในลำดับเดียวกัน
11 sql  oracle  rdbms 

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