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

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

10
สามารถใช้หลักการความรับผิดชอบเดี่ยว / กับรหัสใหม่ได้หรือไม่?
หลักการที่ถูกกำหนดให้เป็นโมดูลที่มีเหตุผลหนึ่งที่มีการเปลี่ยนแปลง คำถามของฉันคือแน่นอนว่าเหตุผลการเปลี่ยนแปลงเหล่านี้ไม่เป็นที่รู้จักจนกว่ารหัสจะเริ่มเปลี่ยนไปจริง ๆ ?? สวยมากชิ้นส่วนของรหัสทุกคนมีเหตุผลมากมายว่าทำไมมันอาจอาจจะเปลี่ยน แต่แน่นอนความพยายามที่จะคาดว่าจะมีสิ่งเหล่านี้และการออกแบบรหัสของคุณมีในใจจะจบลงด้วยรหัสที่น่าสงสารมาก เป็นความคิดที่ดีกว่าหรือที่จะเริ่มใช้ SRP เมื่อคำขอเปลี่ยนรหัสเริ่มเข้ามาเท่านั้น โดยเฉพาะอย่างยิ่งเมื่อชิ้นส่วนของรหัสมีการเปลี่ยนแปลงมากกว่าหนึ่งครั้งด้วยเหตุผลมากกว่าหนึ่งข้อดังนั้นการพิสูจน์ว่ามีเหตุผลมากกว่าหนึ่งข้อที่จะเปลี่ยนแปลง มันฟังดูต่อต้านการว่องไวมากในการพยายามเดาสาเหตุของการเปลี่ยนแปลง ตัวอย่างจะเป็นส่วนหนึ่งของรหัสที่พิมพ์เอกสาร คำขอเข้ามาเพื่อเปลี่ยนแปลงให้พิมพ์เป็น PDF จากนั้นมีการร้องขอครั้งที่สองเพื่อเปลี่ยนแปลงคำขอเพื่อนำการจัดรูปแบบที่แตกต่างไปใช้กับเอกสาร ณ จุดนี้คุณมีหลักฐานมากกว่าหนึ่งเหตุผลในการเปลี่ยนแปลง (และการละเมิด SRP) และควรทำการปรับโครงสร้างที่เหมาะสม

10
สถาปนิกสามารถทำงานกับทีม Scrum ที่จัดระเบียบตัวเองได้อย่างไร
องค์กรที่มีทีม Scrum เปรียวจำนวนหนึ่งก็มีคนกลุ่มเล็ก ๆ ที่ได้รับการแต่งตั้งให้เป็น "สถาปนิกองค์กร" กลุ่ม EA ทำหน้าที่เป็นผู้ควบคุมและผู้รักษาประตูเพื่อคุณภาพและความสม่ำเสมอในการตัดสินใจ สิ่งนี้นำไปสู่การทับซ้อนระหว่างการตัดสินใจของทีมและการตัดสินใจของ EA ตัวอย่างเช่นทีมอาจต้องการใช้ไลบรารี X หรือต้องการใช้ REST แทน SOAP แต่ EA ไม่เห็นด้วย ตอนนี้อาจนำไปสู่ความยุ่งยากเมื่อการตัดสินใจของทีมถูกครอบงำ เมื่อนำไปไกลก็อาจนำไปสู่สถานการณ์ที่คนอีเอ "คว้า" พลังทั้งหมดและทีมก็รู้สึกปลดเปลื้องและไม่คล่องตัวมากเลย คู่มือการแย่งชิงกันมีนี้จะพูดเกี่ยวกับมัน การจัดระเบียบตนเอง: ไม่มีใคร (ไม่ใช่แม้แต่ Scrum Master) บอกทีมพัฒนาถึงวิธีเปลี่ยน Backlog ผลิตภัณฑ์ให้เป็นหน้าที่การทำงานที่เพิ่มขึ้นได้ นั่นสมเหตุสมผลหรือไม่ ทีม EA ควรถูกยกเลิกหรือไม่ ทีมควรปฏิเสธหรือปฏิบัติตามเพียง?

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

3
Haskell มีประเภทที่ขึ้นต่อกันหรือไม่
ฉันรู้ว่า Haskell มีความสามารถในการกำหนดประเภทของประเภทอื่น (คล้ายกับเทมเพลตการเขียนโปรแกรมใน C ++) แต่ฉันสงสัยว่า Haskell สามารถพาราเม็ตอัปประเภทที่มีค่ามากกว่าได้หรือไม่ ด้วยประเภทที่ขึ้นอยู่กับคุณสามารถมีประเภทที่ parametrised กว่าจำนวนเต็มเช่นเวกเตอร์ขนาด n, เมทริกซ์ของขนาด n × m เป็นต้น ถ้าไม่ทำไมไม่ และมีความเป็นไปได้ที่จะรองรับในอนาคตหรือไม่?
20 haskell 

3
จะปรับปรุงประสิทธิภาพด้วยการเขียนโปรแกรมฟังก์ชั่นได้อย่างไร?
ฉันเพิ่งจะได้รับการเรียนรู้ Haskell สำหรับคำแนะนำที่ดีมากและในทางปฏิบัติฉันต้องการที่จะแก้ปัญหาProject Euler ปัญหา 5ด้วยซึ่งระบุ: จำนวนบวกที่เล็กที่สุดคืออะไรหารด้วยจำนวนทั้งหมดตั้งแต่ 1 ถึง 20 อย่างเท่าเทียมกัน? ฉันตัดสินใจที่จะเขียนฟังก์ชั่นก่อนว่าจำนวนที่กำหนดนั้นสามารถหารด้วยตัวเลขเหล่านี้ได้หรือไม่: divisable x = all (\y -> x `mod` y == 0)[1..20] จากนั้นฉันคำนวณขนาดเล็กที่สุดโดยใช้head: sm = head [x | x <- [1..], divisable x] และในที่สุดก็เขียนบรรทัดเพื่อแสดงผลลัพธ์: main = putStrLn $ show $ sm น่าเสียดายที่ใช้เวลาประมาณ 30 วินาทีจึงจะเสร็จ การทำสิ่งเดียวกันกับตัวเลข 1 ถึง 10 ให้ผลลัพธ์เกือบจะในทันที …
20 haskell 

1
แรงจูงใจและข้อผิดพลาด (?) ของคำหลักอัตโนมัติใน C ++ 11
ฉันเพิ่งสงสัยว่าทำไมคำหลักที่autoถูกเลือกใน C ++ 11 เพื่อทำเครื่องหมายตัวแปรที่ต้องสรุปประเภทของคอมไพเลอร์เช่น auto x = 1; ตั้งแต่ var ดูเหมือนจะพบได้ทั่วไปในภาษาการเขียนโปรแกรมอื่น ๆ (เช่น C #, Scala, JavaScript) และ เท่าที่ฉันเข้าใจความหมายใหม่ของการautoแบ่งความเข้ากันได้แบบย้อนหลัง (ไม่ค่อยได้ใช้ แต่มีความหมายแตกต่างกันในการแก้ไข C ++ ก่อนหน้าดูตัวอย่างที่นี่ ) ฉันต้องการถามว่ามีเหตุผลพิเศษในการเลือกauto(เพื่อประโยชน์ของvarคำหลักอื่นหรือไม่) มีการอภิปรายเฉพาะเกี่ยวกับปัญหานี้ก่อนปล่อยมาตรฐาน C ++ 11 หรือไม่ นอกจากนี้ยังมีความเข้ากันไม่ได้ที่เราควรระวังเมื่อทำการคอมไพล์รหัส C ++ ใหม่ด้วยคอมไพเลอร์ C ++ 11 หรือไม่?

3
การควบคุมแหล่งที่มาถูกคิดค้นเมื่อใด
ฉันตระหนักถึงระบบควบคุมหลายเวอร์ชัน: CVS, SVN, TFS และอื่น ๆ ... ฉันใช้ Google เป็นครั้งแรก "การควบคุมการแก้ไข / ระบบควบคุมเวอร์ชัน" และเห็นคำตอบที่ขัดแย้งกัน การควบคุมแหล่งที่มาถูกคิดค้นเมื่อใด ใครเป็นคนคิดค้นมัน? มันเรียกว่าอะไร?

2
Y combinator และการปรับหางเรียกให้เหมาะสม
คำจำกัดความของ Y combinator ใน F # คือ let rec y f x = f (y f) x f คาดว่าจะเป็นอาร์กิวเมนต์แรกที่มีความต่อเนื่องสำหรับปัญหาย่อยแบบเรียกซ้ำ การใช้ yf เป็นสิ่งต่อเนื่องเราจะเห็นว่า f จะถูกนำไปใช้กับการโทรติดต่ออย่างต่อเนื่องในขณะที่เราสามารถพัฒนาได้ let y f x = f (y f) x = f (f (y f)) x = f (f (f (y f))) x etc... ปัญหาคือโครงร่างนี้ precludes โดยใช้การปรับ …

6
คนที่ได้รับเงินเพื่อเขียนโค้ด แต่ทำคะแนนได้ต่ำใน“ เมทริกซ์ความสามารถของโปรแกรมเมอร์” มีหน้าที่ทางจริยธรรมในการหางานประเภทอื่นหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ผู้คนแนะนำให้ฉัน "หางานทำในสิ่งที่คุณทำได้ดี" แต่ความจริงก็คือฉันไม่เชื่อว่าฉันเก่งในเรื่องอื่นนอกเหนือจากการเขียนโค้ด ฉันไม่คิดว่าฉันจะสามารถออกแบบหรือวางโครงสร้างโปรแกรมได้ อย่าเข้าใจฉันผิดฉันไม่ใช่คนเขียนโปรแกรมที่ไม่สามารถเขียนโปรแกรม fizz buzz ได้ ฉันเป็นเหมือนโปรแกรมเมอร์ที่ไม่สามารถทำอะไรได้มากไปกว่าการทำงานให้เสร็จ ไม่ใช่ว่าฉันมีทัศนคติที่ "ทำน้อยที่สุด"; ฉันรู้ว่าข้อ จำกัด ของฉันในฐานะโปรแกรมเมอร์ ตัวอย่างเช่นการใช้อัลกอริทึมการเรียงลำดับด่วนเป็นสิ่งที่ฉันสามารถทำได้โดยอาศัยการท่องจำท่องจำ (นั่นคือถ้าฉันเคยพบแรงจูงใจในการใช้ช่วงเวลาที่ดีของวันของฉันพยายามที่จะใช้อัลกอริธึมทั้งหมดกับหน่วยความจำ เช่น "อืมมฉันเห็นแล้วมันสมเหตุสมผลแล้วฉันเห็นตรรกะ ... ") เมื่อพูดถึงการสร้างและออกแบบแอปพลิเคชันฉันรู้สึกว่าฉันทำอะไรไม่ถูก เนื่องจากฉันไม่เห็นคำตอบที่ถูกต้องในตอนแรกฉันเพิ่งโทรไปตัดสินที่เก้าครั้งจากสิบครั้งฉันเสียใจในภายหลัง ฉันยังคงได้รับการเลื่อนตำแหน่งและการยกย่องจากเพื่อนร่วมงานของฉันดังนั้นคนอื่น ๆ จึงไม่จำเป็นต้องแบ่งปันความคิดเห็นของฉัน แม้ว่าการพูดอย่างเป็นกลางฉันก็ไม่มีความสามารถในการเรียนรู้หรือพลังสมองที่แท้จริงที่ต้องการจะเป็นจริงมากกว่าสิ่งที่เป็นโปรแกรมเมอร์ 'สูงกว่าค่าเฉลี่ยเล็กน้อย' ฉันสงสัยว่าจริง ๆ แล้วฉันมีหน้าที่ทางจริยธรรมที่จะทำให้มีที่ว่างสำหรับคนที่มีความสามารถมากกว่าและหางานประเภทอื่นแม้ว่าฉันจะค่อนข้างมั่นใจว่าฉันจะไม่พบบทบาทอื่นที่ฉันมีคุณสมบัติดีกว่า คำถามของฉันคือ "โปรแกรมเมอร์โดยเฉลี่ยมีที่อยู่ในทีมหรือไม่"
20 skills  ethics 

5
เหตุใดห้องสมุดสมัยใหม่จึงไม่ใช้ OOP
ฉันเป็นโปรแกรมเมอร์ C ++ ระดับต้น แต่ฉันเข้าใจแนวคิดของภาษาค่อนข้างดี เมื่อฉันเริ่มเรียนรู้ไลบรารี C ++ ภายนอกเช่น SDL, OpenGL (อาจเป็นอย่างอื่น) ด้วยความประหลาดใจที่ยิ่งใหญ่ของฉันฉันพบว่าพวกเขาไม่ได้ใช้แนวคิด C ++ เลย ตัวอย่างเช่นทั้ง SDL และ OpenGL ไม่ใช้คลาสหรือข้อยกเว้นเลือกฟังก์ชั่นและรหัสข้อผิดพลาด ใน OpenGL ฉันเคยเห็นฟังก์ชั่นเช่น glVertex2f ซึ่งใช้ตัวแปรลอย 2 ตัวเป็นอินพุตและน่าจะดีกว่าเทมเพลต นอกจากนี้บางครั้งห้องสมุดเหล่านี้ใช้มาร์กอสในขณะที่ดูเหมือนว่าเป็นข้อตกลงทั่วไปที่ใช้มาโครไม่ดี โดยรวมแล้วพวกเขาดูเหมือนจะเขียนในสไตล์ C มากกว่าในสไตล์ C ++ แต่พวกเขาเป็นภาษาที่แตกต่างกันโดยสิ้นเชิงใช่มั้ย คำถามคือเหตุใดห้องสมุดสมัยใหม่จึงไม่ใช้ข้อดีของภาษาที่เขียน

3
ฉันจะแสดงความสัมพันธ์ที่ลึกซึ้งในข้อมูลของฉันได้อย่างไร
"A" เกี่ยวข้องกับ "B" และ "C" ฉันจะแสดงให้เห็นว่า "B" และ "C" อาจเกี่ยวข้องกับบริบทนี้ได้อย่างไร ตัวอย่าง: นี่คือหัวข้อข่าวบางส่วนเกี่ยวกับละครบรอดเวย์ล่าสุด: Glengarry Glen Ross ของ David Mamet นำแสดงโดย Al Pacino เปิดบรอดเวย์ Al Pacino ใน 'Glengarry Glen Ross': นักวิจารณ์คิดอย่างไร Al Pacino ได้รับบทวิจารณ์ที่ไม่สดใสสำหรับบทละครบรอดเวย์ รีวิวโรงละคร: Glengarry Glen Ross กำลังขายดาวของมันอย่างหนัก Glengarry Glen Ross; เฮ้ใครฆ่าไฟ Klieg? ปัญหา: การเรียกใช้ฟัซซี่ - สตริงที่ตรงกันกับระเบียนเหล่านี้จะสร้างความสัมพันธ์บางอย่าง แต่ไม่ใช่อื่น ๆ แม้ว่าผู้อ่านของมนุษย์สามารถเลือกพวกเขาออกจากบริบทในชุดข้อมูลที่มีขนาดใหญ่กว่ามาก ฉันจะค้นหาความสัมพันธ์ที่แนะนำ …

7
ไฟล์ส่วนหัวดีจริงหรือ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันพบว่าไฟล์ส่วนหัวมีประโยชน์เมื่อเรียกดูไฟล์ต้นฉบับ C ++ เพราะพวกเขาให้ "บทสรุป" ของฟังก์ชั่นและสมาชิกข้อมูลทั้งหมดในชั้นเรียน ทำไมภาษาอื่น ๆ อีกมากมาย (เช่น Ruby, Python, Java และอื่น ๆ ) ไม่มีคุณสมบัติเช่นนี้ นี่เป็นพื้นที่ที่การใช้คำฟุ่มเฟือยของ C ++ มีประโยชน์ไหม?
20 c++ 

4
Open source library เจ้าของโครงการสามารถเปลี่ยนใบอนุญาตให้มีข้อ จำกัด มากขึ้นได้หรือไม่
บริษัท ออกไลบรารี่ที่มีลิขสิทธิ์ MIT แบบโอเพ่นซอร์ส หากพวกเขาต้องการพวกเขาจะเปลี่ยนใบอนุญาตให้มีข้อ จำกัด มาก ๆ เพื่อให้คู่แข่งไม่สามารถใช้งานได้หรือไม่? สิ่งนี้จะส่งผลกระทบต่อรุ่นก่อนหน้าอย่างไร หมายความว่าถ้าในวันที่ 1 พฤศจิกายนพวกเขาทำให้มัน จำกัด มากกับใบอนุญาตอื่น ๆ ทุกรุ่นก่อนวันที่ 1 พฤศจิกายนจะยังคงอยู่ใน MIT?

4
'การค้นพบ' ใน REST API ต้องการอะไรเมื่อลูกค้ายังไม่ก้าวหน้าพอที่จะใช้มันได้
การพูดคุยที่หลากหลายที่ฉันได้ดูและแบบฝึกหัดที่ฉันสแกนบน REST ดูเหมือนจะเน้นสิ่งที่เรียกว่า 'การค้นพบ' สำหรับความเข้าใจที่ จำกัด ของฉันคำศัพท์น่าจะหมายถึงว่าลูกค้าควรจะสามารถไปhttp://URL- และรับรายการสิ่งที่สามารถทำได้โดยอัตโนมัติ สิ่งที่ฉันมีปัญหาในการทำความเข้าใจ - คือ 'ลูกค้าซอฟต์แวร์' ไม่ใช่มนุษย์ พวกเขาเป็นเพียงโปรแกรมที่ไม่มีความรู้ที่เข้าใจง่ายเพื่อทำความเข้าใจว่าจะทำอย่างไรกับลิงก์ที่ให้ไว้ มีเพียงคนเท่านั้นที่สามารถไปที่เว็บไซต์และทำความเข้าใจกับข้อความและลิงก์ที่นำเสนอและดำเนินการกับมัน ดังนั้นจุดของการค้นพบคืออะไรเมื่อรหัสลูกค้าที่เข้าถึง URL ที่ค้นพบดังกล่าวไม่สามารถทำอะไรกับมันได้เว้นแต่ผู้พัฒนามนุษย์ของลูกค้าจะทำการทดลองจริง ๆ กับทรัพยากรที่นำเสนอ? ดูเหมือนว่าสิ่งเดียวกันกับการกำหนดชุดของฟังก์ชั่นที่มีอยู่ในคู่มือเอกสารเพียงจากทิศทางที่แตกต่างและจริง ๆ แล้วเกี่ยวข้องกับการทำงานมากขึ้นสำหรับนักพัฒนา เหตุใดแนวทางที่สองนี้ของการกำหนดล่วงหน้าสิ่งที่สามารถทำได้ในเอกสารภายนอกกับทรัพยากร REST ที่แท้จริงถือว่าต่ำกว่า
20 rest  api  hateoas 

7
ตรงกันข้ามกับคำว่า "Backporting" หรือไม่?
ดังที่ฉันเข้าใจแล้วคำว่า "Backporting" ใช้เพื่ออธิบายการแก้ไขที่ใช้ในเวอร์ชันในอนาคตซึ่งมีการย้ายไปยังเวอร์ชันก่อนหน้าด้วย นิยามของ Wikipediaมีดังต่อไปนี้: Backportingคือการดำเนินการแก้ไขซอฟต์แวร์บางอย่าง (แพตช์) และนำไปใช้กับซอฟต์แวร์รุ่นเก่ากว่าที่สร้างไว้ในตอนแรก เป็นส่วนหนึ่งของขั้นตอนการบำรุงรักษาในกระบวนการพัฒนาซอฟต์แวร์ ... ตัวอย่างเช่น: ปัญหาถูกค้นพบและแก้ไขใน V2.0 การแก้ไขเดียวกันถูกพอร์ตและนำไปใช้กับ V1.5 คำนี้เมื่อทำสิ่งนี้ในทิศทางตรงกันข้ามคืออะไร? ปัญหาถูกค้นพบและแก้ไขใน V1.5 การแก้ไขเดียวกันถูกพอร์ตและนำไปใช้กับ V2.0 คำว่า "Backporting" จะยังใช้อยู่หรือไม่ หรือมีคำเช่น "การส่งต่อ" (ซึ่งฟังดูคล้ายกับ "การส่งต่อพอร์ต")?

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