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

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

4
จำเป็นต้องมีการรวบรวมขยะหรือไม่สำหรับการดำเนินการปิดอย่างปลอดภัยหรือไม่?
ฉันเพิ่งเข้าร่วมหลักสูตรออนไลน์เกี่ยวกับภาษาการเขียนโปรแกรมซึ่งมีการนำเสนอการปิด ฉันเขียนสองตัวอย่างที่ได้รับแรงบันดาลใจจากหลักสูตรนี้เพื่อให้บริบทก่อนถามคำถาม ตัวอย่างแรกคือฟังก์ชัน SML ที่สร้างรายการตัวเลขจาก 1 ถึง x โดยที่ x คือพารามิเตอร์ของฟังก์ชัน: fun countup_from1 (x: int) = let fun count (from: int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end ใน SML REPL: val countup_from1 = fn : int …

1
ฉันควรเขียนการทดสอบเพื่อพิสูจน์ว่าการลบรหัสแก้ไขข้อผิดพลาดหรือไม่?
บางครั้งฉันจะพบกับสถานการณ์ที่การแก้ไขข้อผิดพลาดนั้นฉันต้องลบส่วนของรหัส ผู้พิถีพิถันใน TDD จะ (ฉันคิดว่า) สนับสนุนการเขียนการทดสอบที่ล้มเหลวการลบรหัสจากนั้นดูการทดสอบผ่าน ตอนนี้ดูเหมือนแปลกจริง ๆ ที่มีการทดสอบยืนยันว่ามีการลบรหัสบางส่วน แน่นอนฉันคิดว่ามันจะช่วยให้แน่ใจว่าไม่มีใครขุดลงในการควบคุมแหล่งที่มาและวางรหัสนั้นกลับมา แต่มันคุ้มค่าหรือไม่ หากมันคุ้มค่าแน่นอนว่ามันมีค่าน้อยกว่าการเขียนรหัสทดสอบที่เพิ่มเข้ามาใช่ไหม?
14 unit-testing  tdd  bug 

4
การใช้ไวยากรณ์ภาษาธรรมชาติใน API ได้อย่างคล่องแคล่ว
ฉันกำลังหาข้อสรุปเกี่ยวกับ API ของฐานข้อมูล WebSQL / Phonegap และฉันพบว่าตัวเองทั้งที่ถูกดึงดูดและสงสัยว่าจะกำหนด API ได้อย่างคล่องแคล่วซึ่งเลียนแบบการใช้ไวยากรณ์ภาษาอังกฤษตามธรรมชาติ อาจอธิบายได้ง่ายที่สุดผ่านตัวอย่าง ต่อไปนี้เป็นข้อความค้นหาที่ถูกต้องทั้งหมดในไวยากรณ์ของฉันและความคิดเห็นจะอธิบายความหมายที่ต้องการ: //find user where name equals "foo" or email starts with "foo@" find("user").where("name").equals("foo").and("email").startsWith("foo@") //find user where name equals "foo" or "bar" find("user").where("name").equals("foo").or("bar"); //find user where name equals "foo" or ends with "bar" find("user").where("name").equals("foo").or().endsWith("bar"); //find user where name equals or ends …
14 javascript  api 

3
การแยกวิเคราะห์ไฟล์ทั่วไปใน Java โดยใช้รูปแบบกลยุทธ์
ฉันกำลังทำงานกับผลิตภัณฑ์ที่ความรับผิดชอบของหนึ่งในโมดูลคือการแยกวิเคราะห์ไฟล์ XML และถ่ายโอนเนื้อหาที่ต้องการในฐานข้อมูล แม้ว่าความต้องการในปัจจุบันจะเป็นเพียงการแยกวิเคราะห์ไฟล์ XML แต่ฉันต้องการออกแบบโมดูลการแยกวิเคราะห์ในแบบที่ฉันสามารถรองรับไฟล์ประเภทใดก็ได้ในอนาคต เหตุผลสำหรับวิธีนี้คือเรากำลังสร้างผลิตภัณฑ์นี้สำหรับลูกค้าเฉพาะ แต่วางแผนที่จะขายให้กับลูกค้ารายอื่นในอนาคตอันใกล้ ระบบทั้งหมดในระบบนิเวศสำหรับลูกค้าปัจจุบันผลิตและใช้ไฟล์ XML แต่นี่อาจไม่เป็นกรณีสำหรับลูกค้ารายอื่น ฉันพยายามทำอะไรจนถึงตอนนี้? (ปัจจุบัน) ฉันมีการออกแบบต่อไปนี้ในใจซึ่งขึ้นอยู่กับรูปแบบกลยุทธ์ ฉันได้เขียนรหัสลงในคราสอย่างรวดเร็วเพื่อถ่ายทอดการออกแบบของฉันดังนั้นมันจะดีมากหากแง่มุมอื่น ๆ เช่นวิธีการที่เหมาะสมในการจัดการข้อยกเว้นถูกละเว้นในตอนนี้ Parser:อินเตอร์เฟสกลยุทธ์ที่แสดงเมธอดการวิเคราะห์ public interface Parser<T> { public T parse(String inputFile); } * เหตุผลในการใช้พารามิเตอร์ทั่วไปคืออนุญาตประเภทการส่งคืนใด ๆ รวมถึงความปลอดภัยของประเภทในเวลารวบรวม ProductDataXmlParserคลาสที่เป็นรูปธรรมสำหรับการวิเคราะห์ไฟล์ product.xml ที่มีข้อมูลที่เกี่ยวข้องกับผลิตภัณฑ์ (ใช้ XMLBeans) public class ProductDataXmlParser implements Parser<ProductDataTYPE> { public ProductDataTYPE parse(String inputFile) { ProductDataTYPE productDataDoc = …
14 java  design  parsing  xml 

2
วิธีการสร้างเว็บไซต์ ASP.NET MVC แบบแยกส่วน
ฉันอยู่ในขั้นตอนการวางแผนสำหรับระบบอินทราเน็ตของพนักงานที่จะสร้างด้วย ASP.NET MVC 4 เราต้องการให้ไซต์ประกอบด้วย "โมดูล" แยกจากกันซึ่งแต่ละอันมีคุณสมบัติที่แตกต่างกัน: การส่งข้อความการเปลี่ยนแปลงเงินเดือน ฯลฯ ฉันต้องการให้โมดูลเหล่านี้สามารถเปิดใช้งานหรือปิดใช้งานในเวลารวบรวม หน้าแรกจะแสดงการนำทางบางประเภทที่จะเชื่อมโยงไปยังแต่ละโมดูลที่โหลด มันเป็นเรื่องง่ายจนถึงตอนนี้ แต่ฉันไม่ต้องการคุณลักษณะการนำทางที่ต้องรู้เกี่ยวกับโมดูลล่วงหน้า กล่าวอีกนัยหนึ่งฉันต้องการให้โมดูลค้นพบแบบไดนามิก; ฉันต้องการที่จะสามารถเขียนรหัสสำหรับโมดูลใหม่แล้วมีลิงค์เพิ่มไปยังแถบนำทางโดยไม่มีการเปลี่ยนแปลงรหัสใด ๆ ในแหล่งที่มา แต่ละโมดูลควรมีวิธีการลงทะเบียนด้วยแถบการนำทางและที่สำคัญกว่านี้ควรทำสำหรับแต่ละโมดูลเมื่อโหลด ฉันเชื่อว่าสิ่งนี้จะขัดขวางการใช้พื้นที่ของ MVC เนื่องจากสิ่งเหล่านี้ได้รับการออกแบบมาสำหรับกรณีที่รู้จักเค้าโครงของไซต์ไว้ล่วงหน้า MEF ดูเหมือนว่าอาจจะเหมาะสมแม้ว่าคนดูเหมือนจะประสบความสำเร็จในการรวม MEF กับ MVC MEF เป็นวิธีที่จะไปที่นี่จริง ๆ หรือมีวิธีที่ดีกว่าในการบรรลุสิ่งที่ฉันต้องการหรือไม่?

5
การจัดเก็บข้อมูลเมตาในข้อความในโครงสร้างข้อมูลที่ไม่ต่อเนื่อง
ฉันกำลังพัฒนาโปรแกรมที่จะต้องมีการจัดเก็บแบบอินไลน์ , intextเมตาดาต้า สิ่งที่ฉันหมายถึงคือสิ่งต่อไปนี้สมมติว่าเรามีข้อความยาวและเราต้องการเก็บข้อมูลเมตาบางส่วนที่เชื่อมต่อกับคำเฉพาะหรือประโยคของข้อความ อะไรจะเป็นวิธีที่ดีที่สุดในการจัดเก็บข้อมูลนี้ ความคิดแรกของฉันคือการรวมไว้ในข้อความMarkdownไวยากรณ์บางอย่างที่จะถูกแยกวิเคราะห์ในการดึง บางสิ่งที่มีลักษณะเช่นนี้: Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam __nonummy nibh__[@note this sounds really funny latin] euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. นี่จะแนะนำปัญหาสองประการที่ฉันสามารถนึกได้: สิ่งหนึ่งที่ค่อนข้างเล็กคือถ้าไวยากรณ์ดังกล่าวเกิดขึ้นโดยบังเอิญในข้อความดังกล่าวมันสามารถยุ่งกับการแยกวิเคราะห์ สิ่งที่สำคัญที่สุดคือสิ่งนี้จะไม่เก็บข้อมูลเมตานี้แยกจากข้อความ ฉันต้องการให้มีโครงสร้างข้อมูลแบบแยกเพื่อเก็บข้อมูลนี้เช่นตารางฐานข้อมูลที่แตกต่างกันซึ่งข้อมูลเมตาเหล่านี้ถูกเก็บไว้เพื่อให้ฉันสามารถใช้พวกเขาในรูปแบบที่ไม่ต่อเนื่อง: การสืบค้นสถิติการเรียงลำดับและอื่น ๆ แก้ไข:เนื่องจากผู้ตอบลบคำตอบของเขาฉันคิดว่ามันอาจเป็นการดีที่จะเพิ่มข้อเสนอแนะของเขาที่นี่เนื่องจากเป็นข้อเสนอแนะที่ใช้การได้ซึ่งขยายได้ในแนวคิดแรกนี้ โปสเตอร์แนะนำให้ใช้ไวยากรณ์ที่คล้ายกัน แต่จะเชื่อมโยงข้อมูลเมตาไปPRIMARY KEYของmetadataตารางฐานข้อมูล สิ่งที่มีลักษณะเช่นนี้: Lorem ipsum dolor sit amet, consectetuer …

6
การเปลี่ยนแปลงในการปฏิบัติงานละเมิดหลักการการทดแทน Liskov หรือไม่?
พูดว่าฉันมี: interface Thing { GetThing(); } class FastThing : Thing { public int GetThing() { return 1; } } class SlowThing : Thing { public int GetThing() { return GetThingFromDatabase(); } } นี่เป็นการละเมิดหลักการทดแทน Liskov หรือไม่?

1
เราใช้รูปแบบพื้นที่เก็บข้อมูลใช่มั้ย
เรากำลังใช้คลาสที่แยกจากกัน-repositoryเพื่อต่อท้ายเรียกข้อมูลจากฐานข้อมูล สำหรับแต่ละตารางที่เก็บของตนเอง ตัวอย่างเช่นเรามีcustomerrepositoryคลาสที่มีวิธีการทุกอย่างเพื่อดึงลูกค้าและvacancyrepositoryที่มีวิธีการทุกชนิดเพื่อดึงตำแหน่งที่ว่าง ฉันมีคำถามสองข้อเกี่ยวกับวิธีการทำสิ่งนี้: วิธีรับข้อมูลที่ครอบคลุมหลายตาราง ตัวอย่างเช่นฉันมีหน้าจอที่แสดงลูกค้าทั้งหมดที่ยังไม่ได้สร้างตำแหน่งว่าง ที่สามารถcustomerrepositoryใช้วิธีการจากvacancyrespositoryหรือทำทั้งสองอย่างที่เก็บกลับผลลัพธ์และจะมีระดับที่สูงขึ้นในลำดับชั้น (ชื่อให้ของมันdataservice) ที่ได้รับผลจากทั้งเก็บและรวมเป็น 1 ผล? พื้นที่เก็บข้อมูลสามารถจัดการตรรกะได้เท่าใด ฉันคิดว่ามันโอเคที่จะใช้ 'where active == true' ในที่เก็บเพื่อเรียกใช้เฉพาะเร็กคอร์ดที่ใช้งานอยู่หรือว่าควรจัดการตรรกะง่ายๆโดยคลาสที่สูงกว่าในลำดับชั้น (ลองตั้งชื่อ a dataservice)? ตัวอย่างที่ฉันพบตอนนี้ก็คืออันนี้: เรามีรายการคำถามซึ่งมีหนึ่งคำถามขึ้นไป คำถามสามารถมีผลลัพธ์ซึ่งถืออยู่ในตารางแยกต่างหาก ดังนั้นเมื่อคุณต้องการดึงผลลัพธ์รวมของรายการคำถามคุณต้องรวมข้อมูลจากquestionlistตารางตารางคำถามและquestionstatusตาราง ตอนนี้เรามีที่เก็บข้อมูล 3 แห่งสำหรับตารางเหล่านี้ ถ้าฉันจะถามquestionlistrepositoryสิ่งที่เป็นผลรวมสำหรับรายการหมายเลข 12 มันจะต้องได้รับข้อมูลจากสองที่เก็บอื่น ๆ และด้วยเหตุนี้มีตรรกะบางอย่างในนั้นที่ได้รับอนุญาต? หรือมีquestionlistdataserviceที่รู้ที่เก็บที่จะใช้? อีกอย่างหนึ่ง: ที่เก็บข้อมูลของเราสามารถส่งผลIQueryableให้บริการโทรศัพท์สามารถรวมผลลัพธ์ได้อย่างง่ายดาย แต่ถ้าเป็นกรณีนี้ฉันไม่คิดว่ามันเป็นความคิดที่ดีที่จะดึงเนื้อหาทั้งหมดของตารางทั้งสามจาก ฐานข้อมูล

8
ทางเลือกอื่นสำหรับตัวบ่งชี้ "การผ่าน / การสร้างไม่ดี"
เมื่อมีการรวมอย่างต่อเนื่องในการดำเนินการทดสอบในแต่ละการกระทำแนวทางปฏิบัติที่ดีที่สุดคือการทดสอบทั้งหมดที่ผ่านตลอดเวลา (หรือที่รู้จักว่า ฉันพบปัญหาบางอย่างกับที่: ตัวอย่างหนึ่งไม่สามารถช่วยโครงการโอเพ่นซอร์สโดยการสร้างการทดสอบที่สอดคล้องกับตั๋ว ฉันรู้ว่าฉันเสนอ Pull Request ให้กับโปรเจคโอเพ่นซอร์สที่มีการทดสอบความล้มเหลวบิลด์จะถูกทำเครื่องหมายว่าล้มเหลวและโปรเจ็กต์จะไม่ต้องการรวมเข้ากับที่เก็บเพราะมันจะ "ทำลายบิลด์" และฉันไม่เชื่อว่ามันเป็นสิ่งที่ไม่ดีที่มีการทดสอบที่ล้มเหลวใน repo ของคุณเหมือนมีปัญหาในตัวติดตามของคุณ สิ่งเหล่านี้เป็นเพียงสิ่งที่รอการแก้ไข เช่นเดียวกับใน บริษัท หากคุณทำงานกับ TDD คุณจะไม่สามารถเขียนทดสอบกระทำและเขียนรหัสตรรกะที่ทำแบบทดสอบได้ นั่นหมายความว่าถ้าฉันเขียนแบบทดสอบ 4-5 เรื่องบนแล็ปท็อปของฉันฉันไม่สามารถยืนยันได้ก่อนวันหยุด ไม่มีใครสามารถคืนงานของฉันได้ ฉันไม่สามารถแม้แต่ "แบ่งปัน" กับเพื่อนร่วมงานได้ยกเว้นโดยการส่งทางอีเมลเช่น นอกจากนี้ยังป้องกันการทำงานกับคนคนหนึ่งที่เขียนแบบทดสอบอีกคนหนึ่งเขียนแบบ ทั้งหมดที่จะพูดว่าฉันใช้ผิด / เข้าใจผิดกระบวนการสร้าง / บูรณาการอย่างต่อเนื่องหรือไม่ สำหรับฉันแล้วดูเหมือนว่า "ผ่าน" / "ไม่ผ่าน" เป็นตัวบ่งชี้ที่แคบเกินไป มีวิธีที่จะทำให้การรวมระบบอย่างต่อเนื่องและเข้ากันได้กับ TDD หรือไม่? อาจมีวิธีแก้ปัญหามาตรฐาน / การปฏิบัติเพื่อแยก "การทดสอบใหม่" (ที่สามารถล้มเหลว) และ "การทดสอบการถดถอย" (ที่ไม่ควรล้มเหลวเพราะพวกเขาเคยทำงาน)?


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

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

8
คำถามที่เกี่ยวข้องกับการออกแบบ OO ในการสัมภาษณ์ทางเทคนิค [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เมื่อไม่นานมานี้ฉันได้เข้ารับการสัมภาษณ์ไม่กี่ครั้งและ บริษัท ได้รับการขอให้ตอบคำถาม "ออกแบบ [แบบจำลองการแทรก]" มากกว่าสองสามครั้ง เป็นเรื่องปกติในอุตสาหกรรมทุกวันนี้หรือไม่? ฉันอยู่ในโลกของซอฟต์แวร์มานานกว่าสองทศวรรษแล้วและได้เข้าร่วมการสัมภาษณ์ของฉัน แต่ฉันเห็นรูปแบบนี้ในการสัมภาษณ์เกิดขึ้นเมื่อเร็ว ๆ นี้ ฉันรู้สึกว่าคำถามเปิดกว้างมาก ตัวอย่างเช่นฉันถูกขอให้วาดแผนภาพคลาสเพื่อ "ออกแบบที่จอดรถ" ฉันไม่แน่ใจว่าผู้สัมภาษณ์คาดหวังรายละเอียดระดับใด นี่คือการทดสอบออนไลน์ที่ฉันคาดว่าจะแนบไดอะแกรม visio ดังนั้นฉันไม่สามารถถามพวกเขาว่าความคาดหวังของพวกเขาคืออะไร คุณใช้คำถามแบบนี้ในการสัมภาษณ์หรือไม่? พวกเขาเกี่ยวข้องกับไดอะแกรมของคลาสเท่านั้นหรือคุณยังถามลำดับผังงานและ ERDs (ของหลักสูตรตามลักษณะของตำแหน่ง) พวกเขามีประสิทธิภาพในกระบวนการจ้างงานของคุณหรือไม่ * แก้ไขเพื่อการตอบสนองของ Kevin * ตัวอย่างเช่น: คำถามที่สมบูรณ์อาจเป็น "ออกแบบระบบการจัดการที่จอดรถที่สามารถใช้เพื่อค้นหาช่องว่าง" ฉันสามารถทำได้มี 2 ชั้นParkingLotและSlotหรือฉันจะไปบนเพื่อเพิ่มIVehicleและVehicleและCarและMotorcycleชั้นเรียน ฉันจะวาดเส้นที่ไหน? public class ParkingLot { IVehicle Vehicle {set; get;} List<Slot> …

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

2
เหตุใดการใช้ไลบรารี C ++ จึงมีความซับซ้อน
ก่อนอื่นฉันต้องการทราบว่าฉันรัก C ++ และฉันเป็นหนึ่งในคนเหล่านั้นที่คิดว่าการเขียนโค้ดใน C ++ ง่ายกว่า Java ยกเว้นสิ่งเล็ก ๆ น้อย ๆ อย่างหนึ่ง: ห้องสมุด ใน Java คุณสามารถเพิ่ม jar ลงใน build path และเสร็จแล้ว ใน C ++ คุณจะต้องตั้งค่าหลายพา ธ สำหรับไฟล์ส่วนหัวและไลบรารีเอง ในบางกรณีคุณต้องใช้แฟล็กบิลด์พิเศษ ฉันใช้ Visual Studio, Code Blocks เป็นหลักและไม่มี IDE เลย ตัวเลือกทั้ง 3 ไม่แตกต่างกันมากเมื่อพูดถึงการใช้ไลบรารีภายนอก ฉันสงสัยว่าทำไมไม่มีทางเลือกที่ง่ายกว่านี้? เช่นเดียวกับการมีไฟล์. zip แบบพิเศษที่มีทุกสิ่งที่คุณต้องการในที่เดียวเพื่อให้ IDE สามารถทำงานทั้งหมดให้คุณได้ มีอุปสรรคทางเทคนิคสำหรับสิ่งนี้หรือไม่?
14 java  c++  libraries 

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