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

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

5
ทำไม% s ถึงดีกว่า + สำหรับการต่อข้อมูล
ฉันเข้าใจว่าเราควรใช้%sเพื่อเชื่อมสตริงเข้าด้วยกันแทนที่จะเป็น+Python ฉันสามารถทำสิ่งใดก็ได้: hello = "hello" world = "world" print hello + " " + world print "%s %s" % (hello, world) print "{} {}".format(hello, world) print ' '.join([hello, world]) แต่ทำไมฉันถึงควรใช้สิ่งอื่นนอกเหนือจาก+? การเขียนเรียงต่อกันด้วยวิธีง่าย+กว่าทำได้เร็วกว่า จากนั้นหากคุณดูที่สตริงการจัดรูปแบบคุณจะระบุประเภทเช่น%sและ%dและ ฉันเข้าใจว่ามันจะดีกว่าหากจะระบุประเภทให้ชัดเจน แต่ฉันอ่านแล้วว่า+ควรหลีกเลี่ยงการใช้การต่อข้อมูลแบบเรียงต่อกันแม้ว่าจะพิมพ์ง่ายกว่าก็ตาม มีเหตุผลที่ชัดเจนที่ควรรวมสตริงเข้าด้วยกันด้วยวิธีใดวิธีหนึ่งเหล่านี้หรือไม่?
88 python  strings 

3
แบ่งในกรณีเริ่มต้นในสวิตช์
ฉันเป็นบิตงงงวยในเมื่อใดก็ตามหรือไม่รวมถึงหลังจากกรณีที่ผ่านมามักจะbreakdefault switch (type) { case 'product': // Do behavior break; default: // Do default behavior break; // Is it considered to be needed? } breakมีวัตถุประสงค์เพียงอย่างเดียวในความเข้าใจของฉันที่จะหยุดรหัสจากการทำงานผ่านส่วนที่เหลือของswitch-case ก็ถือว่าเป็นตรรกะมากขึ้นแล้วจะมีbreakที่ผ่านมาเนื่องจากความสอดคล้องหรือข้ามมีมันเกิดจากการbreakใช้ไม่มีการใช้งานการทำงาน แต่อย่างใด? ทั้งสองมีเหตุผลในรูปแบบที่แตกต่างกันในความคิดของฉัน ซึ่งอาจจะได้ในระดับหนึ่งนำมาเปรียบเทียบกับตอนจบไฟล์ที่มี.php ?>ฉันไม่เคยลงท้ายด้วย?>ส่วนใหญ่เนื่องจากความเสี่ยงของการแสดงผลช่องว่าง แต่ก็สามารถยืนยันได้ว่ามันจะเป็นสิ่งตรรกะที่จะจบไฟล์ด้วย

3
ทำไมกราฟิกเวกเตอร์ที่เร่งด้วยฮาร์ดแวร์ไม่ได้ถูกถอดออก?
ฉันกำลังทำงานกับแอพที่เกี่ยวข้องกับการจัดการเวกเตอร์พา ธ แบบเรียลไทม์ที่ 60fps และฉันประหลาดใจมากที่มีข้อมูลเพียงเล็กน้อยในเรื่องนี้ ตอนแรกผมพยายามที่จะใช้ความคิดของฉันโดยใช้ CoreGraphics แต่มันก็ไม่ได้ดำเนินการอย่างเพียงพอเพื่อฉัน จากนั้นผมก็ค้นพบว่ามีความเป็นมาตรฐาน Khronos สำหรับฮาร์ดแวร์เร่งกราฟิกแบบเวกเตอร์ที่เรียกว่าOpenVGและขอบคุณจิตวิญญาณชนิดได้เขียน OpenGL ES กึ่งการดำเนินงานที่เรียกว่าMonkVG แต่ข้อเท็จจริงที่ว่า OpenVG นั้นเป็น API ที่มีประโยชน์มาก แต่ดูเหมือนว่า Khronos จะถูกทอดทิ้งมากขึ้นหรือน้อยลง ตามวิกิพีเดียตั้งแต่ปี 2011 คณะทำงาน "ตัดสินใจที่จะ ... ไม่ต้องประชุมปกติ [sic] เพื่อให้ได้มาตรฐานมากขึ้น" เอกสารที่ดีที่สุดที่ฉันหาได้ประกอบด้วยบัตรอ้างอิงเพียงใบเดียว และยิ่งไปกว่านั้นยังมีตัวอย่างของ OpenVG แทบทุกที่บนอินเทอร์เน็ต ฉันสามารถค้นหาบทเรียนของ OpenGL หลายร้อยรายการได้ในพริบตา แต่ OpenVG ดูเหมือนจะหายไปอย่างชัดเจน คุณคิดว่าเวกเตอร์ที่เร่งด้วยฮาร์ดแวร์จะมีความสำคัญมากกว่าในโลกปัจจุบันที่มีความละเอียดเพิ่มขึ้นอย่างรวดเร็วและดูเหมือนว่าหลาย บริษัท กำลังใช้วิธีการของตนเองในการทำสิ่งนี้ ตัวอย่างเช่น Qt และ Flash มีโครงร่างสำหรับเวกเตอร์ที่เร่งด้วยฮาร์ดแวร์และเครื่องมือของ Adobe หลายตัวมีการเร่งด้วยฮาร์ดแวร์เป็นตัวเลือก …

9
ตรวจสอบการจัดการข้อยกเว้นครั้งแรกหรือไม่
ฉันกำลังทำงานกับหนังสือ"Head First Python" (เป็นภาษาของฉันที่จะเรียนรู้ในปีนี้) และฉันได้ไปยังส่วนที่พวกเขาโต้เถียงเกี่ยวกับเทคนิคสองรหัส: การ ตรวจสอบการจัดการข้อยกเว้นข้อแรก นี่คือตัวอย่างของรหัสไพ ธ อน: # Checking First for eachLine in open("../../data/sketch.txt"): if eachLine.find(":") != -1: (role, lineSpoken) = eachLine.split(":",1) print("role=%(role)s lineSpoken=%(lineSpoken)s" % locals()) # Exception handling for eachLine in open("../../data/sketch.txt"): try: (role, lineSpoken) = eachLine.split(":",1) print("role=%(role)s lineSpoken=%(lineSpoken)s" % locals()) except: pass ตัวอย่างแรกเกี่ยวข้องโดยตรงกับปัญหาใน.splitฟังก์ชัน คนที่สองเพียงแค่ให้ตัวจัดการข้อยกเว้นจัดการกับมัน (และละเว้นปัญหา) …

10
เส้นแบ่งระหว่างตรรกะการทดสอบหน่วยแอปพลิเคชันกับการสร้างภาษาที่ไม่ไว้ใจอยู่ที่ไหน
พิจารณาฟังก์ชั่นเช่นนี้: function savePeople(dataStore, people) { people.forEach(person => dataStore.savePerson(person)); } มันอาจจะใช้แบบนี้: myDataStore = new Store('some connection string', 'password'); myPeople = ['Joe', 'Maggie', 'John']; savePeople(myDataStore, myPeople); ให้เราสมมติว่าStoreมีการทดสอบหน่วยของตนเองหรือได้รับการจัดหาจากผู้ขาย ในกรณีใด ๆ Storeเราไว้วางใจ และให้เราต่อไปคิดว่าจัดการข้อผิดพลาด - เช่นข้อผิดพลาดการเชื่อมต่อฐานข้อมูล - savePeopleไม่ได้เป็นความรับผิดชอบของ ที่จริงให้เราสมมติว่าตัวร้านนั้นเป็นฐานข้อมูลเวทมนต์ที่ไม่สามารถผิดพลาดได้ แต่อย่างใด ด้วยสมมติฐานเหล่านี้คำถามคือ: ควรsavePeople()ทดสอบหน่วยหรือจำนวนการทดสอบดังกล่าวเพื่อทดสอบการสร้างforEachภาษาในตัว? แน่นอนเราสามารถผ่านการเยาะเย้ยdataStoreและยืนยันที่dataStore.savePerson()เรียกว่าครั้งเดียวสำหรับแต่ละคน แน่นอนคุณสามารถโต้แย้งว่าการทดสอบดังกล่าวมีความปลอดภัยต่อการเปลี่ยนแปลงการใช้งานเช่นหากเราตัดสินใจแทนที่forEachด้วยการforวนซ้ำดั้งเดิมหรือวิธีการทำซ้ำอื่น ๆ ดังนั้นการทดสอบไม่ได้อย่างสิ้นเชิงจิ๊บจ๊อย และยังดูเหมือนว่าใกล้มาก ... นี่เป็นอีกตัวอย่างที่อาจมีผลมากกว่า พิจารณาฟังก์ชั่นที่ไม่ทำอะไรเลยนอกจากประสานงานวัตถุหรือฟังก์ชั่นอื่น ๆ ตัวอย่างเช่น: function bakeCookies(dough, pan, …

8
“ Soft Coding” คืออะไรจริงๆ?
ในบทความนี้โดย Alex Papadimoulis คุณสามารถดูตัวอย่างนี้: private void attachSupplementalDocuments() { if (stateCode == "AZ" || stateCode == "TX") { //SR008-04X/I are always required in these states attachDocument("SR008-04X"); attachDocument("SR008-04XI"); } if (ledgerAmnt >= 500000) { //Ledger of 500K or more requires AUTHLDG-1A attachDocument("AUTHLDG-1A"); } if (coInsuredCount >= 5 && orgStatusCode != "CORP") { …
87 design 

13
มันถือว่าเป็นรูปแบบการต่อต้านการเขียน SQL ในซอร์สโค้ดหรือไม่?
มันถือว่าเป็นรูปแบบการต่อต้านการ hardcode SQL ในแอปพลิเคชันเช่นนี้หรือไม่: public List<int> getPersonIDs() { List<int> listPersonIDs = new List<int>(); using (SqlConnection connection = new SqlConnection( ConfigurationManager.ConnectionStrings["Connection"].ConnectionString)) using (SqlCommand command = new SqlCommand()) { command.CommandText = "select id from Person"; command.Connection = connection; connection.Open(); SqlDataReader datareader = command.ExecuteReader(); while (datareader.Read()) { listPersonIDs.Add(Convert.ToInt32(datareader["ID"])); } } return listPersonIDs; } …
87 c#  sql 

2
MIT กับ BSD เทียบกับ Dual License
ความเข้าใจของฉันคือ: โครงการที่ได้รับอนุญาตของMITสามารถใช้ / แจกจ่ายในโครงการที่ได้รับอนุญาตBSD โครงการที่ได้รับอนุญาต BSD สามารถนำไปใช้ / แจกจ่ายใหม่ในโครงการที่ได้รับอนุญาตจาก MIT สิทธิ์การใช้งานของ MIT และ BSD 2 ข้อนั้นเหมือนกันหมด BSD 3-clause = BSD 2-clause +ประโยค"no สลักหลัง" การออกใบอนุญาตสองใบอนุญาตให้ผู้ใช้เลือกจากใบอนุญาตเหล่านั้น - ไม่ผูกมัดกับทั้งคู่ หากทุกอย่างถูกต้องแล้วประเด็นของการใช้ใบอนุญาตdual MIT / BSD คืออะไร? แม้ว่า BSD จะอ้างถึงเวอร์ชัน 3 ข้อแล้วผู้ใช้ไม่สามารถเลือกที่จะปฏิบัติตามกฎหมายลิขสิทธิ์ของ MIT ได้หรือไม่? ดูเหมือนว่าถ้าคุณต้องการใช้ประโยค "no สลักหลัง" จริง ๆ แล้วคุณต้องอนุญาตมันเป็นแค่ BSD (ไม่ใช่คู่) หากคุณไม่สนใจคำสั่ง "ไม่มีการรับรอง" MIT เพียงอย่างเดียวก็เพียงพอแล้วและ …

4
XHTML5 ตายหรือเป็นเพียงคำพ้องความหมายของ HTML5
แล้วเกิดอะไรขึ้นกับ XHTML5 http://www.w3.org/TR/html5/ หน้านั้นเป็นแบบร่างสำหรับ xhtml5 และ html5 หรือไม่ ดังนั้นจึงไม่มีความแตกต่างระหว่างหลักคำสอนเหล่านี้หรือไม่
87 html5  xhtml 

13
ความแตกต่างระหว่างไวยากรณ์และความหมายคืออะไร?
ฉันคิดเสมอว่าการอ้างอิงถึงไวยากรณ์ของภาษานั้นเหมือนกับการอ้างอิงถึงความหมายของภาษา แต่ฉันได้รับแจ้งว่าไม่เป็นเช่นนั้น ความแตกต่างคืออะไร?
87 syntax  semantics 

29
บริษัท ของฉันสามารถมอบสิทธิ์ IP ให้กับแอปพลิเคชันที่ฉันเขียนไปหลายชั่วโมงเพื่อเริ่มการทำงานอื่นได้หรือไม่ [ปิด]
ฉันเป็นผู้ฝึกงานให้กับ บริษัท ด้านสุขภาพ (ไม่ได้รับค่าจ้าง) เรียกว่าบริษัท เอและฉันสังเกตเห็นว่าพวกเขาใช้กระดาษจำนวนมากสำหรับสิ่งที่สามารถทำได้บนคอมพิวเตอร์ ไฟล์ Excel สำหรับสิ่งที่ไม่ควรอยู่ใน Excel ดังนั้นฉันจึงต้องการปรับปรุงการเขียนโปรแกรมของฉันและคิดว่ามันเป็นโอกาสที่ดีที่สุดที่จะทำ ฉันพัฒนาแอพสองตัวเพื่อใช้งาน แอปพลิเคชันเหล่านี้ทั้งหมดอยู่นอกเวลาของ บริษัท แอปพลิเคชั่นเดียวที่ฉันทำและพวกเขารักและหนึ่งในผู้อำนวยการมีน้องชายที่มีสุขภาพดี เขาต้องการให้ฉันมอบซอร์สโค้ดของฉันเพื่อให้ บริษัท น้องชายของเขาสามารถพัฒนาและขายมันได้ (ฉันไม่อยู่ในสมการ) ฉันไม่มีความตั้งใจที่จะส่งมอบรหัสของฉันเพราะฉันใช้เวลาส่วนใหญ่นอกเวลาทำ แต่ฉันไม่ต้องการเผาสะพานกับใครใน บริษัท ฉันไปที่ผู้กำกับไม่ได้และบอกเขาว่า "ฉันไม่คิดอย่างนั้น" ฉันสบายดีกับการสาธิตให้พี่ ๆ เห็นว่ามันใช้งานอย่างไร แต่บรรทัดก็ยอมแพ้รหัสของฉัน หากพวกเขาต้องการสร้างบางอย่างเช่นนั้นพวกเขาสามารถไปข้างหน้าฉันไม่มีปัญหากับมัน อะไรคือวิธีที่ถูกต้องในการเข้าใกล้สิ่งนี้และพวกเขามีสิทธิ์ที่จะทำสิ่งนี้ให้ฉันได้อย่างไร แก้ไข: ไม่มีสัญญาฉันไม่เคยเซ็นสัญญาอะไรเลย

11
ทำไมหลัก () ควรสั้น
ฉันได้เขียนโปรแกรมมานานกว่า 9 ปีและตามคำแนะนำของครูผู้สอนโปรแกรมคนแรกของฉันฉันมักจะทำให้main()ฟังก์ชั่นของฉันสั้นมาก ตอนแรกฉันไม่รู้ว่าทำไม ฉันแค่เชื่อฟังโดยไม่เข้าใจมากนักเพื่อความสุขใจของอาจารย์ หลังจากได้รับประสบการณ์ฉันรู้ว่าถ้าฉันออกแบบรหัสของฉันอย่างถูกต้องมีmain()ฟังก์ชั่นสั้น ๆแค่เกิดขึ้น การเขียนโค้ดที่ทำให้เป็นโมดูลและทำตามหลักการความรับผิดชอบเดียวทำให้รหัสของฉันถูกออกแบบเป็น "ช่อ" และmain()ทำหน้าที่เป็นตัวเร่งปฏิกิริยาเพื่อให้โปรแกรมทำงาน กรอไปข้างหน้าเมื่อไม่กี่สัปดาห์ที่ผ่านมาฉันมองไปที่โค้ด souce ของ Python และฉันพบmain()ฟังก์ชัน: /* Minimal main program -- everything is loaded from the library */ ... int main(int argc, char **argv) { ... return Py_Main(argc, argv); } งูหลามเย็ด main()ฟังก์ชั่นสั้น== รหัสที่ดี ครูการเขียนโปรแกรมถูกต้อง อยากดูลึกกว่านี้ฉันลองดู Py_Main ครบถ้วนถูกกำหนดไว้ดังนี้: /* Main program */ …

8
“ ผลข้างเคียงคืออะไร”
ฉันไม่เข้าใจแนวคิดของผลข้างเคียงอย่างชัดเจน ผลข้างเคียงในการเขียนโปรแกรมคืออะไร? มันขึ้นอยู่กับการเขียนโปรแกรมภาษา มีผลข้างเคียงภายนอกและภายในไหม? โปรดยกตัวอย่างสาเหตุที่สร้างผลข้างเคียง

6
จะดีกว่าถ้าใช้ assert หรือ IllegalArgumentException สำหรับพารามิเตอร์เมธอดที่ต้องการ?
ใน Java ซึ่งแนะนำมากขึ้นและทำไม? ทั้งสองประเภทจะโยนข้อยกเว้นดังนั้นในการจัดการพวกเขาก็เหมือนกัน assertสั้นกว่านี้เล็กน้อย แต่ฉันไม่แน่ใจว่าสำคัญแค่ไหน public void doStuff(Object obj) { assert obj != null; ... } VS public void doStuff(Object obj) { if (obj == null) { throw new IllegalArgumentException("object was null"); } ... }

9
การประมาณราคาเวลาใน codebase แบบเก่า
เมื่อเร็ว ๆ นี้ฉันเริ่มทำงานกับโปรเจ็กต์ที่มีการย้ายแอพพลิเคชั่นแบบเสาหินเก่าไปสู่สถาปัตยกรรมแบบไมโครเซอร์วิส Legacy codebase นั้นยุ่งเหยิงมาก('รหัสสปาเก็ตตี้')และมักจะเป็นฟังก์ชั่นที่เรียบง่าย (เช่นชื่อ "multiplyValueByTen") ต่อมาเผยให้เห็นตัวเองว่า ตอนนี้หัวหน้าของฉัน (ถูกต้อง) ขอให้ฉันประเมินว่าจะใช้เวลานานแค่ไหนในการเขียนคุณสมบัติ X ในสถาปัตยกรรมใหม่ แต่ฉันมีปัญหาในการหาค่าประมาณจริง บ่อยครั้งที่ฉันดูถูกดูแคลนงานมหาศาลเนื่องจากเหตุผลที่ฉันได้กล่าวไว้ข้างต้นและทำให้ตัวเองอับอายเพราะฉันไม่สามารถทำตามเวลาที่กำหนดได้ สิ่งที่สมเหตุสมผลอาจดูเหมือนจะเป็นรหัสจริงๆทราบทุกสาขาและการเรียกไปยังฟังก์ชั่นอื่น ๆ แล้วประมาณค่าใช้จ่ายเวลา แต่จริงๆแล้วมีความแตกต่างเล็กน้อยระหว่างการบันทึกรหัสเดิมและการจดบันทึกเวอร์ชันใหม่ ฉันจะเข้าใกล้สถานการณ์แบบนี้ได้อย่างไร ในขณะที่ฉันเข้าใจอย่างสมบูรณ์แบบว่าการปรับโครงสร้างรหัสดั้งเดิมทำงานอย่างไรคำถามของฉันไม่ได้เกี่ยวกับ แต่เกี่ยวกับการให้คำตอบที่สมจริงกับ "ใช้เวลานานแค่ไหนในการปรับโครงสร้าง / เขียนใหม่ส่วน X"

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