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

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

5
การแก้ไขข้อบกพร่องที่จะให้ผลประโยชน์คุ้มค่าที่สุด [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันต้องการทราบแนวคิดของการจัดหมวดหมู่ข้อบกพร่องโดยพิจารณาจากความง่ายในการแก้และประโยชน์ที่จะได้รับ ตัวอย่างเช่นหากมีข้อผิดพลาดซึ่งจะใช้เวลาหนึ่งชั่วโมง (ปิดไฟล์สองครั้งและอื่น ๆ ) เพื่อแก้ปัญหา vs อีกอันหนึ่งซึ่งใช้เวลาหนึ่งวัน แต่ถ้าการแก้ไขข้อผิดพลาดครั้งแรกนั้นไม่สำคัญมากฉันก็คงจะแก้ไขข้อที่สองได้ มีงานวิจัยใดบ้างที่จัดกลุ่มข้อบกพร่องโดยพิจารณาจากประโยชน์ด้านต้นทุนหรือตัวชี้วัดที่คล้ายคลึงกัน สมมติว่าเป็นไปได้ที่จะจัดหมวดหมู่บั๊กตามลักษณะของข้อบกพร่องเช่นความเสี่ยงด้านความปลอดภัยข้อผิดพลาดของหน่วยความจำข้อผิดพลาดเชิงตรรกะ ฯลฯ ในมิติอื่น ๆ อาจมีพารามิเตอร์เช่นความยากลำบาก (ง่ายปานกลางยาก) มีมิติอื่น ๆ ที่ฉันควรมองหาหรือไม่ เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นฉันสามารถสรุปได้สองสิ่ง: โปรแกรมเมอร์ทุกคนในทีมมีความสามารถเท่าเทียมกันในการแก้ไขข้อบกพร่องใด ๆ ไม่มีกำหนด

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

2
ที่เก็บข้อมูลในหน่วยความจำใน Haskell
ฉันต้องการติดตั้งที่เก็บข้อมูลในหน่วยความจำสำหรับบริการบนเว็บใน Haskell ฉันต้องการเรียกใช้ธุรกรรมในSTMmonad เมื่อฉัน google hash table steam Haskellฉันได้รับสิ่งนี้เท่านั้น: Data. BTree. HashTable. STM.ชื่อโมดูลและความซับซ้อนแนะนำให้ใช้สิ่งนี้เป็นทรี ฉันคิดว่าอาร์เรย์ควรมีประสิทธิภาพมากกว่าสำหรับตารางแฮชที่ไม่แน่นอน มีเหตุผลที่จะหลีกเลี่ยงการใช้อาร์เรย์สำหรับSTMhashtable หรือไม่? ฉันจะได้รับอะไรกับตารางแฮชไอน้ำนี้หรือฉันควรใช้เพียงเตะอบไอน้ำไปยังIntMap?

2
เราควรเลียนแบบเอนทิตีและวัตถุที่มีค่าเมื่อทำ DDD หรือไม่
หลังจากที่อ่านไม่กี่ บทความเกี่ยวกับnewable VS ฉีดวัตถุและวิธีการแนวความคิดเหล่านี้เกี่ยวข้องกับ DDD บริการหน่วยงานและวัตถุค่าฉันถูกทิ้งให้อยู่กับข้อสงสัยบางอย่างเกี่ยวกับการใช้ newables ในรหัสของฉันโดยเฉพาะอย่างยิ่งในการทดสอบหน่วยของฉัน ผู้สมัครหลักสำหรับ newables คือ Entities และ Value objects หมายถึงแทนที่จะฉีดการขึ้นต่อกันเหล่านี้ไปยังอ็อบเจกต์อื่นเราควรnewเป็นเพียงตัวอย่างของอ็อบเจกต์เหล่านี้และใช้มันโดยตรงในโค้ด อย่างไรก็ตามแนวปฏิบัติที่ดีของ DDD สนับสนุนการมอบหมายความรับผิดชอบให้แก่หน่วยงานและวัตถุที่มีค่าหากพวกเขาเห็นว่าเหมาะสม ดังนั้นเอนทิตีและวัตถุค่าจะสิ้นสุดลงด้วยตรรกะทางธุรกิจที่ร้ายแรงบางอย่างในนั้น ตอนนี้ถ้าบริการทำงานบนเอนทิตีหรือวัตถุที่มีค่าฉันควรล้อเลียนเอนทิตีหรือวัตถุที่มีค่าและส่งจำลองไปยังบริการ (การเยาะเย้ยจะต้องมีinterfaceสำหรับวัตถุค่าหรือหน่วยงานที่ดูเหมือนจะสนับสนุน) หรือฉันควรnewเป็นเพียงแค่เอนทิตี / ค่าวัตถุและผ่านการใช้งานที่เป็นรูปธรรมไปยังบริการและทำให้เป็นการละเมิดหลักการทดสอบหน่วยของการทดสอบเพียงหนึ่งหน่วย?

3
จะโหลดและจัดเก็บการตั้งค่าจากไฟล์ได้ที่ไหน
ฉันคิดว่าคำถามนี้ควรใช้กับโปรแกรมส่วนใหญ่ที่โหลดการตั้งค่าจากไฟล์ คำถามของฉันมาจากมุมมองการเขียนโปรแกรมและเป็นวิธีจัดการกับการโหลดการตั้งค่าจากไฟล์ในแง่ของคลาสและการเข้าถึงที่แตกต่างกัน ตัวอย่างเช่น หากโปรแกรมมีsettings.iniไฟล์อย่างง่ายเนื้อหาของมันควรจะโหลดในload()วิธีการเรียนหรือบางทีนวกรรมิก? ควรเก็บค่าไว้ในpublic staticตัวแปรหรือควรมีstaticวิธีรับและตั้งค่าคุณสมบัติหรือไม่ จะเกิดอะไรขึ้นหากไฟล์ไม่มีอยู่หรืออ่านไม่ได้? คุณจะให้โปรแกรมที่เหลือรู้ว่าไม่สามารถรับคุณสมบัติเหล่านั้นได้อย่างไร เป็นต้น ฉันหวังว่าฉันจะขอสิ่งนี้ในสถานที่ที่เหมาะสมที่นี่ ฉันต้องการตั้งคำถามให้เป็นผู้ไม่เชื่อเรื่องภาษามากที่สุด แต่ฉันมุ่งเน้นที่ภาษาที่มีสิ่งต่าง ๆ เช่นมรดกโดยเฉพาะ Java และ C # .NET

4
สิ่งที่มีความหมายโดย“ สิ่งที่ต้องทำวิธีการสร้าง Stub อัตโนมัติ”? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันใช้ eclipse สำหรับการเขียนโปรแกรม Android และทุกที่นี่และฉันเห็นคำสั่ง "สิ่งที่ต้องทำวิธีการสร้างอัตโนมัติต้นขั้ว" ฉันเข้าใจว่าวิธีเหล่านี้ถูกสร้างขึ้นโดยอัตโนมัติโดย eclipse เมื่อสร้างคลาสและกิจกรรมทริกเกอร์อื่น ๆ แต่ฉันไม่เข้าใจว่าจำเป็นต้องพูดถึงทุกที่ จำเป็นต้องพูดถึงสิ่งนี้ทุกที่ซ้ำแล้วซ้ำอีกหรือไม่

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

4
รายการอินเตอร์เฟสเป็นสิ่งที่เป็นนามธรรมหรือไม่?
ถ้าผมมีตัวแปรที่มีListมันอาจจะมีวัตถุจำนวนมากที่แตกต่างกันเช่นหรือArrayList LinkedListความแตกต่างระหว่าง a LinkedListและa ArrayListนั้นค่อนข้างใหญ่ พฤติกรรม O ใหญ่ของวิธีการนั้นแตกต่างกันอย่างมาก ยกตัวอย่างเช่นการเรียงลำดับListแล้วใช้มันเพื่อทำการค้นหาไบนารีเป็นอย่างดี ok สำหรับแต่จะไม่ทำให้รู้สึกด้วยArrayListLinkedList

3
เหตุใด Quicksort จึงเรียกว่า“ Quicksort”
ประเด็นของคำถามนี้ไม่ได้เป็นการอภิปรายถึงข้อดีของอัลกอริทึมการเรียงลำดับอื่น ๆ - แน่นอนว่ามีคำถามอื่น ๆ อีกมากมายที่ทำเช่นนี้ คำถามนี้เกี่ยวกับชื่อ เหตุใด Quicksort จึงเรียกว่า "Quicksort" แน่นอนว่ามันเป็น "เร็ว" ส่วนใหญ่ แต่ไม่เสมอไป ความเป็นไปได้ของการเสื่อมสภาพไปยัง O (N ^ 2) เป็นที่รู้จักกันดี มีการแก้ไข Quicksort มากมายที่ช่วยลดปัญหานี้ แต่กรณีที่นำกรณีที่แย่ที่สุดมาสู่ O (n log n) ที่รับประกันจะไม่เรียกว่า Quicksort อีกต่อไป (เช่น Introsort) ฉันแค่สงสัยว่าทำไมอัลกอริธึมการเรียงลำดับที่รู้จักกันดีทั้งหมดนี่เป็นสิ่งเดียวที่สมควรได้รับชื่อ "ด่วน" ซึ่งไม่ได้อธิบายว่าอัลกอริทึมทำงานอย่างไร แต่เร็วแค่ไหน (ปกติ) การรวมกันเรียกว่าเพราะมันรวมข้อมูล Heapsort เรียกว่าเพราะใช้ฮีป Introsort ได้รับชื่อจาก "Introspective" เนื่องจากตรวจสอบประสิทธิภาพของตัวเองเพื่อตัดสินใจว่าเมื่อใดที่จะเปลี่ยนจาก Quicksort เป็น Heapsort ในทำนองเดียวกันสำหรับคนที่ช้ากว่า …

5
ทีมต่อสู้หลายคนย้ายไปที่ค้างค้างเดียว
ขณะนี้เรามีทีมการต่อสู้ 5 ทีมที่ทำงานในส่วนที่เหลือของผลิตภัณฑ์ในปีที่ผ่านมา แต่ละทีมทำงานบนระบบเฉพาะของตัวเอง แต่เทคโนโลยีพื้นฐานเหมือนกัน. Net มีการถกเถียงกันมากมายเกี่ยวกับการย้ายไปยังทีมงานที่มีฟีเจอร์ซึ่งทำงานนอกงานเดียว เหตุผลก็คือหนึ่งในระบบหลักของเรามีงานจำนวนมากเข้ามาและพวกเขาก็มีความสามารถไม่เพียงพอที่จะส่งมอบงานทั้งหมดในปีนี้ อีกเหตุผลหนึ่งที่ฉันเชื่อว่าเป็นเหตุผลสำคัญที่ให้ความยืดหยุ่นในการปรับตัวต่อการเปลี่ยนแปลงพอร์ตโฟลิโออย่างรวดเร็ว มีการตัดสินใจเปลี่ยนสองทีมให้ทำงานใน Backlog เดียว แต่ผู้พัฒนาไม่มีประสบการณ์ในระบบอื่น สิ่งหนึ่งที่เราทำคือการข้ามทักษะโดยการย้ายนักพัฒนาระบบประสบการณ์มาที่ทีม คำถามของฉันคือคุณเคยมีประสบการณ์การย้ายไปที่ค้างเพียงครั้งเดียวสำหรับสองระบบที่แตกต่างกันหรือไม่ ความท้าทายของคุณคืออะไร? คุณต้องทำอะไรเพื่อให้มันทำงาน?
9 agile  scrum 

2
การเข้ารหัสไม่สามารถย้อนกลับได้?
ฉันอยู่ภายใต้การแสดงผลที่ไม่สามารถถอดรหัสสตริงที่เข้ารหัสดังนั้นค่าดั้งเดิมจะสูญหายไปตลอดกาล อย่างไรก็ตามหากสตริงต่อไปนี้เท่ากับ "Dominic" (ชื่อของฉัน) จะไม่มีวิธีตรรกะในการย้อนกลับ การเป็นแบบไม่สุ่มไม่ขึ้นอยู่กับวันที่ / เวลา แต่มีวิธีการแบบตรรกะหรือไม่? 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE= ไม่ว่าฉันจะเข้ารหัส "Dominic" (สตริง) กี่ครั้งหรือกี่ครั้งก็ตามมันก็เท่ากับเสมอ ดังนั้นไม่ควรมีวิธีถอดรหัสสตริงเช่นนั้นหรือ ตัวอย่างของสิ่งที่ฉันพูดถึง: public string EncryptPassword(string password) { return Convert.ToBase64String( System.Security.Cryptography.SHA256.Create() .ComputeHash(Encoding.UTF8.GetBytes(password))); }

1
มีโปรแกรมประเภทใดบ้างที่แสดงให้เห็นถึงคุณสมบัติและการใช้ภาษาการเขียนโปรแกรมที่แตกต่างกันมากที่สุด?
เราทุกคนรู้ว่า“ สุนัขจิ้งจอกสีน้ำตาลกระโดดข้ามสุนัขขี้เกียจ” ใช้เป็นเกณฑ์มาตรฐานสำหรับการพิมพ์และแบบอักษร ฉันสงสัยว่ามี“ Lazy Dog” ที่คล้ายกันสำหรับภาษาโปรแกรมหรือไม่ มีภาษาการเขียนโปรแกรมที่แตกต่างกันมากมายพร้อมด้วยคุณสมบัติและไวยากรณ์ทุกประเภทที่คล้ายกันหรือแตกต่างกัน ปัญหาคือ: ผู้ใช้จะสับสนเมื่อใช้ภาษาต่าง ๆ ในเวลาเดียวกัน แม้ว่าความแตกต่างระหว่างภาษาต่าง ๆ จะต้องมีบางสิ่งที่เหมือนกันคืองานหรืองานประจำ หากเราใช้งานเดียวกันในภาษาต่างๆและพยายามครอบคลุมคุณสมบัติที่ใช้บ่อยที่สุดการเรียนรู้ภาษาหรือการเปรียบเทียบจะง่ายขึ้นมาก โปรแกรมประเภทนี้ไม่จำเป็นต้องใช้เวลานานมากเช่นเดียวกับการสอน แต่เป็นเรื่องธรรมดาและเป็นนามธรรมมากพอ มันมีอยู่หรือไม่

1
ฉันจะจัดการไซต์ Jekyll + Bootstrap + Git ได้อย่างไร
ดังนั้นหลังจากหลายปีของการสร้างเว็บไซต์ตั้งแต่เริ่มต้น (และยกตัวเองขึ้นมามาก) ฉันได้จุ่มนิ้วเท้าของฉันเป็นสองโครงการที่มีมาหลายปีที่ฉันหลีกเลี่ยง: Bootstrap และ Jekyll การออกแบบเป็นงานที่กำหนดเองอย่างมากซึ่งทำให้ฉันต้องขุดลงไปที่ LESS ดังนั้นฉันจึงมีไฟล์ต้นฉบับ Bootstrap สินทรัพย์ที่มาและไดเรกทอรีการสร้างภายในไดเรกทอรีนั้น ถ้างั้นก็มีด้าน Jekyll ที่มีโครงสร้างของตัวเองฉันกำลังเชื่อมโยงในไดเรกทอรีสร้าง Bootstrap และเนื้อหาขั้นสุดท้าย (สิ่งที่ฉันต้องการให้บริการจริง) ฝังอยู่ใน_siteไดเรกทอรี นี่คือลักษณะ: /.git/* /.gitignore /bootstrap/ /bootstrap/... a load of source files ... /bootstrap/bootstrap/ # the build output /jek/ /jek/... all the jekyll files ... /jek/bootstrap/ # symlink on ../bootstrap/bootstrap/ /jek/_site # the stuff …

4
เราควรระวังเรื่องการโกหกหรือไม่?
นี่หมายถึงการอภิปรายในคำตอบและความคิดเห็นของคำถามนี้: อะไรคือความเกลียดชังต่อเอกสารในอุตสาหกรรม? . คำตอบอ้างว่า "รหัสไม่สามารถโกหกได้" และควรเป็นที่ตั้งของสถานที่แทนที่จะไปถึงเอกสาร หลายความคิดเห็นชี้ให้เห็นว่า "รหัสสามารถโกหกได้" มีความจริงทั้งสองด้านอย่างน้อยส่วนหนึ่งเป็นเพราะการจัดการเอกสารไม่ดีและไม่เหมาะสม เราควรจะมองหาโค้ดโกหกเปรียบเทียบกับเอกสารที่มีอยู่หรือไม่? หรือมันมักจะเป็นแหล่งที่ดีที่สุดสำหรับสิ่งที่ต้องทำ? หากเป็นรหัสที่คล่องแคล่วมีแนวโน้มที่จะโกหกน้อยลงหรือรหัสนั้นไม่สามารถโกหกได้ทั้งหมดหรือไม่

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

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