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

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

2
เหตุผลของคำสั่ง return ในการเรียกใช้ฟังก์ชันแบบเรียกซ้ำ
ฉันเพิ่งสงสัยในใจ รูทีนย่อยต่อไปนี้ (เพื่อค้นหาองค์ประกอบในรายการ) มีคำสั่ง return ที่ท้าย: list *search_list(list *l, item_type x) { if (l == NULL) return(NULL); if (l->item == x) return(l); else return( search_list(l->next, x) ); } ฉันไม่สามารถรับความสำคัญของคำสั่ง return ในตอนท้าย (เช่น return search_list (l-> next, x)) มันจะมีประโยชน์จริง ๆ ถ้าใครสามารถอธิบายแนวคิดนี้โดยใช้โมเดลสแต็ก

2
การเขียนโปรแกรมเชิงวัตถุเทียบกับเวกเตอร์
ฉันขาดการออกแบบเชิงวัตถุและเชิงเวกเตอร์ ฉันชอบความสามารถโครงสร้างและความปลอดภัยที่วัตถุมอบให้กับสถาปัตยกรรมทั้งหมด แต่ในขณะเดียวกันความเร็วนั้นสำคัญมากสำหรับฉันและการมีตัวแปรลอยแบบง่าย ๆ ในอาเรย์ช่วยในภาษา / ไลบรารีที่ใช้เวกเตอร์เช่น Matlab หรือ numpy ใน Python นี่คือส่วนหนึ่งของรหัสที่ฉันเขียนเพื่ออธิบายจุดของฉัน ปัญหา: การเพิ่มหมายเลขความผันผวนของ Tow หาก x และ y เป็นสองตัวเลขความผันผวนผลรวมของความผันผวนคือ (x ^ 2 + y ^ 2) ^ 0.5 (สมมติว่ามีเงื่อนไขทางคณิตศาสตร์บางอย่าง แต่นั่นไม่ใช่สิ่งสำคัญที่นี่) ฉันต้องการดำเนินการนี้อย่างรวดเร็วและในเวลาเดียวกันฉันต้องแน่ใจว่าผู้คนไม่เพียงเพิ่มความผันผวนในทางที่ผิด (x + y) ทั้งสองอย่างนี้มีความสำคัญ การออกแบบตาม OO จะเป็นดังนี้: from datetime import datetime from pandas import * class Volatility: …

2
ลุงบ๊อบหมายความว่าอะไรโดย 'ชื่อวลีคำนาม'?
ฉันอ่านรหัสสะอาดโดยลุงบ๊อบ เนื่องจากฉันไม่ใช่เจ้าของภาษาฉันจึงไม่เข้าใจข้อความต่อไปนี้: คลาสและวัตถุที่ควรจะมีคำนามหรือนามวลีชื่อเช่น Customer, WikiPage, และAccount AddressParserคำหลีกเลี่ยงชอบ Manager, Processor, DataหรือInfoในชื่อของชั้นเรียน ชื่อคลาสไม่ควรเป็นคำกริยา ที่ผมรู้ว่าไม่มีใครManager, Processor, DataและInfoเป็นคำกริยาไม่ได้หรือไม่ อะไรคือจุดที่เขาต้องการเน้น

2
Shared Cache - แนวทางปฏิบัติที่ไม่ถูกต้อง
ฉันอยากจะรู้ว่าอะไรจะเป็นวิธีที่ดีกว่าในการทำให้วัตถุแคช / อัปเดตเป็นโมฆะ ข้อกำหนดเบื้องต้น มีเซิร์ฟเวอร์ memcached ระยะไกล (ทำหน้าที่เป็นแคชสำหรับหลาย ๆ แอปพลิเคชัน) เซิร์ฟเวอร์ทั้งหมดโฮสต์โดย Azure (ภูมิภาคที่สัมพันธ์กัน, ดาต้าเซ็นเตอร์เดียวกัน) ขนาดวัตถุแคชมีตั้งแต่ 200 ไบต์จนถึง 50 กิโลไบต์ วิธีที่ 1 (เก็บในแคชโดยเร็ว) สร้างวัตถุ A -> store ในฐานข้อมูลและเก็บไว้ในแคช วัตถุ A ที่ไคลเอนต์ร้องขอ -> ตรวจสอบแคชเพื่อการมีอยู่ของระบบมิฉะนั้นดึงข้อมูลจากฐานข้อมูลและเก็บไว้ในแคช วัตถุ A รับการอัพเดท -> จัดเก็บในฐานข้อมูลจัดเก็บในแคช วิธีที่ 1 ดูเหมือนจะตรงไปตรงมามากกว่า หากมีการสร้างบางสิ่งให้ใส่แคชโดยเร็ว ไม่ว่าจะมีใครบางคนจะต้องการมัน วิธีที่ 2 (สันหลังยาวแคชสโตร์) สร้างวัตถุ A -> store ในฐานข้อมูลแล้ว …

3
ใน MVC ควรเรียก DAO จาก Controller หรือ Model
ฉันได้เห็นข้อโต้แย้งต่าง ๆ กับ DAO ที่ถูกเรียกจากคอนโทรลเลอร์คลาสโดยตรงและ DAO จากคลาส Model สิ่งประดิษฐ์ฉันรู้สึกว่าถ้าเราติดตาม MVC pattern ตัวควบคุมไม่ควรควบคู่กับ DAO แต่เป็น Model class ควรเรียกใช้ DAO จากภายในและผู้ควบคุมควรเรียกใช้คลาสโมเดลเพราะเราสามารถแยกคลาสโมเดลออกจากเว็บแอปพลิเคชันและแสดงฟังก์ชันการทำงานสำหรับวิธีต่างๆเช่นบริการ REST เพื่อใช้คลาสโมเดลของเรา หากเราเขียนการร้องขอ DAO ในคอนโทรลเลอร์จะไม่สามารถใช้บริการ REST เพื่อนำฟังก์ชันการทำงานกลับมาใช้ใหม่ได้ใช่ไหม ฉันได้สรุปแนวทางทั้งสองด้านล่าง วิธีการ # 1 public class CustomerController extends HttpServlet { proctected void doPost(....) { Customer customer = new Customer("xxxxx","23",1); new CustomerDAO().save(customer); } } วิธีการ …

6
ใส่คำอธิบายประกอบซอร์สโค้ดที่มีไดอะแกรมเป็นความคิดเห็น
ฉันเขียนโค้ด (c ++ และ javascript) เป็นจำนวนมากซึ่งสัมผัสกับเรขาคณิตและกราฟิกการคำนวณและหัวข้อเหล่านั้นดังนั้นฉันจึงพบว่าไดอะแกรมภาพนั้นเป็นส่วนที่ขาดไม่ได้ของกระบวนการแก้ปัญหา ฉันได้ตัดสินใจแล้วว่า "โอ้ไม่น่าอัศจรรย์ถ้าฉันสามารถแนบแผนภาพวาดด้วยมือกับชิ้นส่วนของรหัสเพื่อแสดงความคิดเห็น" และนี่จะทำให้ฉันกลับมามีบางสิ่งที่ฉันทำ วัน, สัปดาห์, เดือนก่อนหน้านี้และไกลโพ้นอัลกอริทึมของฉันอีกครั้งอย่างรวดเร็ว ในฐานะผู้เรียนรู้ภาพฉันรู้สึกว่าสิ่งนี้มีศักยภาพในการปรับปรุงประสิทธิภาพการทำงานของฉันด้วยการเขียนโปรแกรมเกือบทุกประเภทเนื่องจากแผนภาพง่าย ๆ สามารถช่วยให้เข้าใจและให้เหตุผลเกี่ยวกับโครงสร้างข้อมูลที่ไม่สำคัญ กราฟตัวอย่าง ในระหว่างชั้นเรียนทฤษฎีกราฟที่มหาวิทยาลัยฉันสามารถเข้าใจความสัมพันธ์ของกราฟที่จริง ๆ แล้วฉันสามารถวาดภาพตัวแทนของแผนภาพ ดังนั้น... ไม่มี IDE ให้ความรู้ของฉันช่วยให้คุณบันทึกภาพเป็นความคิดเห็นในการรหัส ความคิดของฉันคือการที่ฉันหรือคนอื่นสามารถใช้เครื่องมือที่ใช้งานง่ายพอสมควรซึ่งสามารถแปลงรูปภาพให้เป็นสตริงไบนารีพื้นฐาน 64 ซึ่งฉันสามารถแทรกลงในรหัสของฉันได้ หากกระบวนการแปลง / แทรกสามารถเพิ่มความคล่องตัวได้มากพอจะทำให้สามารถเชื่อมต่อระหว่างไดอะแกรมและรหัสจริงได้ดีกว่าดังนั้นฉันไม่จำเป็นต้องค้นหาตามลำดับเวลาในโน้ตบุ๊คของฉันอีกต่อไป น่าประทับใจยิ่งกว่า: ปลั๊กอินสำหรับ IDE ในการแยกวิเคราะห์และแสดงภาพโดยอัตโนมัติ ไม่มีอะไรยากเกี่ยวกับสิ่งนี้จากมุมมองทางทฤษฎี ฉันเดาว่ามันจะใช้เวลาเพิ่มสำหรับฉันที่จะคิดออกว่าจะขยาย IDEs ที่ชื่นชอบและดูแลปลั๊กอินเหล่านี้ได้อย่างไรดังนั้นฉันจึงมีความสุขกับโค้ดโพสต์โปรเซสเซอร์ซึ่งจะแยกวิเคราะห์และ การเรนเดอร์รูปภาพและแสดงภาพแบบเคียงข้างกันด้วยโค้ด, ภายในเบราว์เซอร์หรือบางสิ่งบางอย่าง ตั้งแต่ฉันเป็นโปรแกรมเมอร์จาวาสคริปต์โดยการค้า คนอื่นคิดอย่างไร ใครบ้างที่จ่ายสำหรับสิ่งนี้ ฉันจะ แต่บางทีฉันอาจจะชี้ให้เห็นว่าไม่ว่าฉันหรือเพื่อนร่วมงานจำนวนมากของฉันจะจ่ายเงินสำหรับสิ่งนั้นวิธีเดียวที่สิ่งนั้นมีแนวโน้มที่จะประสบความสำเร็จก็คือผ่านการเปิดตัวโอเพนซอร์ส

11
หลักการ KISS นำไปใช้กับการออกแบบภาษาการเขียนโปรแกรม?
KISS ("ทำให้มันง่ายโง่" หรือ "ทำให้มันง่าย ๆ โง่ ๆ ", ดูตัวอย่างที่นี่ ) เป็นหลักการสำคัญในการพัฒนาซอฟต์แวร์แม้ว่ามันจะมีต้นกำเนิดมาจากวิศวกรรม อ้างถึงจากบทความวิกิพีเดีย: หลักการนี้เป็นตัวอย่างที่ดีที่สุดโดยเรื่องราวของจอห์นสันส่งทีมวิศวกรออกแบบพร้อมเครื่องมือจำนวนหนึ่งด้วยความท้าทายที่เครื่องบินเจ็ทที่พวกเขากำลังออกแบบต้องได้รับการซ่อมโดยช่างทั่วไปในสนามรบภายใต้เงื่อนไขการต่อสู้ด้วยเครื่องมือเหล่านี้เท่านั้น ดังนั้น 'โง่' หมายถึงความสัมพันธ์ระหว่างวิธีที่สิ่งต่าง ๆ แตกหักและความซับซ้อนที่มีอยู่เพื่อแก้ไข หากฉันต้องการนำสิ่งนี้ไปใช้ในด้านการพัฒนาซอฟต์แวร์ฉันจะแทนที่ "เครื่องบินเจ็ท" ด้วย "ชิ้นส่วนของซอฟต์แวร์", "ช่างทั่วไป" กับ "นักพัฒนาเฉลี่ย" และ "ภายใต้เงื่อนไขการต่อสู้" กับ "ภายใต้การพัฒนา / บำรุงรักษาซอฟต์แวร์ เงื่อนไข "(กำหนดเวลา, ข้อ จำกัด ด้านเวลา, การประชุม / การขัดจังหวะ, เครื่องมือที่มีให้และอื่น ๆ ) ดังนั้นจึงเป็นความคิดที่ยอมรับกันโดยทั่วไปว่าควรพยายามเก็บชิ้นส่วนของซอฟต์แวร์ที่เรียบง่าย (หรือโง่อย่างง่ายในกรณีที่คุณไม่ใส่เครื่องหมายจุลภาค) เพื่อให้สามารถทำงานได้ในภายหลัง แต่หลักการ KISS สามารถนำไปใช้กับการออกแบบภาษาโปรแกรมได้หรือไม่ คุณรู้ภาษาการเขียนโปรแกรมใด ๆ …

4
เมื่อไม่ใช้ Spring เพื่อยกตัวอย่างถั่ว
ฉันพยายามเข้าใจว่าการใช้สปริงอย่างถูกต้องจะเป็นอย่างไร ไม่เกี่ยวกับวากยสัมพันธ์ แต่ในแง่ของวัตถุประสงค์ หากมีใครใช้ Spring รหัส Spring ควรแทนที่รหัสการเริ่มต้นถั่วทั้งหมดหรือไม่ เมื่อไรที่จะใช้หรือเมื่อไม่ใช้ Spring เพื่อยกตัวอย่างถั่ว อาจเป็นตัวอย่างรหัสต่อไปนี้จะช่วยให้คุณเข้าใจภาวะที่กลืนไม่เข้าคายไม่ออกของฉัน: List<ClassA> caList = new ArrayList<ClassA>(); for (String name : nameList) { ClassA ca = new ClassA(); ca.setName(name); caList.add(ca); } หากฉันกำหนดค่าสปริงมันจะกลายเป็นสิ่งที่ชอบ: List<ClassA> caList = new ArrayList<ClassA>(); for (String name : nameList) { ClassA ca = (ClassA)SomeContext.getBean(BeanLookupConstants.CLASS_A); ca.setName(name); caList.add(ca); } …
14 java  spring 

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

5
ควรบังคับใช้มาตรฐานการเข้ารหัสโดยเซิร์ฟเวอร์รวมอย่างต่อเนื่องหรือไม่
ควรบังคับใช้มาตรฐาน / รูปแบบการเข้ารหัสโดยเซิร์ฟเวอร์รวมอย่างต่อเนื่องที่ใช้เครื่องมือวิเคราะห์แบบคงที่ (เช่น PMD, StyleCop / FxCop) และการสร้างล้มเหลวหากไม่ปฏิบัติตามมาตรฐาน? กฎประเภทใดที่ไม่ควรใช้ในการสร้างล้มเหลว

4
การเข้าถึงที่เก็บจากโดเมน
สมมติว่าเรามีระบบบันทึกงานเมื่อมีการบันทึกงานผู้ใช้จะระบุหมวดหมู่และค่าเริ่มต้นของงานเป็นสถานะ 'ดีเด่น' สมมติในกรณีนี้ว่าหมวดหมู่และสถานะจะต้องมีการใช้งานเป็นเอนทิตี ปกติฉันจะทำสิ่งนี้: แอพลิเคชันเลเยอร์: public class TaskService { //... public void Add(Guid categoryId, string description) { var category = _categoryRepository.GetById(categoryId); var status = _statusRepository.GetById(Constants.Status.OutstandingId); var task = Task.Create(category, status, description); _taskRepository.Save(task); } } Entity: public class Task { //... public static void Create(Category category, Status status, string description) { …

4
ทำไมการลดขนาด HTML / Javascript จึงมีประโยชน์
ทำไมการลดขนาด HTML / Javascript จึงมีประโยชน์เมื่อโปรโตคอล HTTP รองรับการบีบอัดข้อมูล gzip อยู่แล้ว? ฉันตระหนักดีว่า Javascript / HTML minification มีศักยภาพที่จะลดขนาดของ JavaScript / HTML ไฟล์โดยการลบช่องว่างที่ไม่จำเป็นและอาจเปลี่ยนชื่อตัวแปรไม่กี่ตัวอักษรแต่ละ แต่ไม่ได้อัลกอริทึม LZW การทำโดยเฉพาะอย่างยิ่งได้ดีเมื่อมีหลายซ้ำแล้วซ้ำอีก ตัวอักษร (เช่นช่องว่างมากมาย) ฉันรู้ว่าเครื่องมือการทำให้เป็นขนาดเล็กของ Javascript นั้นทำมากกว่าลดขนาด ตัวอย่างเช่นคอมไพเลอร์ตัวปิดของ Google ก็พยายามปรับปรุงประสิทธิภาพของโค้ดโดยการทำฟังก์ชั่นอินไลน์และทำการวิเคราะห์อื่น ๆ แต่วัตถุประสงค์หลักของการลดขนาดจาวาสคริปต์ก็เพื่อลดขนาดไฟล์ ฉันยังตระหนักว่ามีเหตุผลอื่น ๆ ที่คุณอาจต้องการลดทอนจาก performace เช่นรหัส obfuscation แต่อีกครั้งเหตุผลนั้นมักไม่ได้เน้นมากเท่ากับการเพิ่มประสิทธิภาพและการลดขนาดไฟล์ ตัวอย่างเช่นการปิดคอมไพเลอร์ไม่ได้โฆษณาว่าเป็นเครื่องมือทำให้งงงวย แต่เป็นตัวลดขนาดรหัสและตัวเพิ่มความเร็วในการดาวน์โหลด ดังนั้นประสิทธิภาพที่คุณได้รับจากการลดขนาดJavascript / HTML จริงๆเมื่อคุณลดขนาดไฟล์ลงอย่างมากด้วยการบีบอัด gzip
14 javascript  html  http  minify 

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

4
สับสนเกี่ยวกับการแก้ไขงานค้างในระหว่างการวิ่ง
เมื่อเร็ว ๆ นี้ฉันได้อ่านเกี่ยวกับการต่อสู้หลายครั้งและฉันพบว่าสิ่งที่ฉันดูเหมือนจะเป็นข้อมูลที่ขัดแย้งกันไม่ว่าจะเป็นการดีหรือไม่ที่จะเปลี่ยนงานค้างในระหว่างการวิ่ง บทความวิกิพีเดียในการต่อสู้บอกว่ามันไม่ได้ตกลงต่างๆและบทความอื่น ๆ ที่พูดแบบนี้เช่นกัน อาจารย์สอนการพัฒนาซอฟต์แวร์ของฉันก็สอนเรื่องเดียวกันในภาพรวมของการต่อสู้ อย่างไรก็ตามฉันอ่านScrum และ XP จาก Trenchesและอธิบายส่วนของรายการที่ไม่ได้วางแผนไว้บน taskboard ดังนั้นฉันจึงค้นหาScrum Guideและมันบอกว่าในระหว่างการวิ่ง "ไม่มีการเปลี่ยนแปลงใด ๆ ที่จะส่งผลกระทบต่อเป้าหมาย Sprint" และในการอภิปรายของเป้าหมาย Sprint "หากงานนั้นแตกต่างจากที่คาดการณ์ไว้ทีมพัฒนา จากนั้นพวกเขาก็ร่วมมือกับเจ้าของผลิตภัณฑ์เพื่อเจรจาขอบเขตของ Sprint Backlog ภายใน Sprint " มันจะพูดในการสนทนาของ Sprint Backlog: Sprint Backlog เป็นแผนที่มีรายละเอียดเพียงพอที่สามารถเข้าใจการเปลี่ยนแปลงในความคืบหน้าใน Daily Scrum ทีมพัฒนาปรับเปลี่ยน Sprint Backlog ตลอด Sprint และ Sprint Backlog ปรากฏในระหว่าง Sprint การเกิดขึ้นนี้เกิดขึ้นเมื่อทีมพัฒนาทำงานผ่านแผนและเรียนรู้เพิ่มเติมเกี่ยวกับงานที่จำเป็นเพื่อให้บรรลุเป้าหมาย Sprint เมื่อจำเป็นต้องมีงานใหม่ทีมพัฒนาจะเพิ่มเข้าไปใน Sprint …

5
เป็นวิธีที่ดีที่สุดในการตรวจสอบรหัสก่อนที่จะมุ่งมั่นที่ลำต้นคืออะไร? (SVN)
เป็นวิธีที่ดีที่สุดในการตรวจสอบรหัสก่อนที่จะมุ่งมั่นที่ลำต้น SVN คืออะไร? แนวคิดหนึ่งที่ฉันคิดคือการให้นักพัฒนาส่งรหัสของเขาไปที่สาขาแล้วทบทวนรหัสของเขาในขณะที่รวมการแก้ไขสาขาเข้ากับลำต้น นี่เป็นวิธีปฏิบัติที่ดีหรือไม่? ถ้าไม่สามารถทำอะไรได้อีกเพื่อตรวจสอบรหัสก่อนที่จะมุ่งมั่นที่ลำต้น?

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