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

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

12
การเปลี่ยนแปลงอย่างค่อยเป็นค่อยไปในวิธีการเขียนรหัสส่งผลต่อประสิทธิภาพของระบบหรือไม่ และฉันควรจะสนใจ
TD; DR: มีความสับสนเกี่ยวกับสิ่งที่ฉันถามดังนั้นนี่คือแนวคิดการขับขี่ที่อยู่เบื้องหลังคำถาม: ฉันมักจะตั้งคำถามว่ามันคืออะไร ฉันอาจไม่ได้พูดชัดแจ้ง แต่แรกเริ่ม แต่เจตนาได้เสมอ " เป็นโมดูลแยกแยกหลวมคู่ decoupled รหัส refactored " ช้าลงอย่างเห็นได้ชัดโดยธรรมชาติของตัวเองมากกว่า " เสาเดียวหน่วยทำทุกอย่างในที่เดียวหนึ่งไฟล์คู่แน่น " รหัส ส่วนที่เหลือเป็นเพียงรายละเอียดและอาการต่าง ๆ ของเรื่องนี้ที่ฉันเจอในตอนนี้หรือตอนนี้หรือจะในภายหลัง มันช้าลงอย่างแน่นอนในระดับหนึ่ง เช่นเดียวกับดิสก์ที่ไม่มีการดีแฟรกต์คุณต้องเลือกชิ้นส่วนจากทุกที่ มันช้ากว่า ได้อย่างแน่นอน แต่ฉันควรสนใจ และคำถามไม่ได้เกี่ยวกับ ... ไม่เกี่ยวกับการเพิ่มประสิทธิภาพขนาดเล็กการปรับให้เหมาะสมก่อนวัยและอื่น ๆ มันไม่เกี่ยวกับ "เพิ่มประสิทธิภาพส่วนนี้หรือส่วนที่ตาย" ถ้าเช่นนั้นจะเป็นอะไร เป็นเรื่องเกี่ยวกับระเบียบวิธีและเทคนิคโดยรวมและวิธีคิดเกี่ยวกับการเขียนโค้ดที่เกิดขึ้นเมื่อเวลาผ่านไป: "ฉีดรหัสนี้ในชั้นเรียนของคุณเป็นการพึ่งพา" "เขียนหนึ่งไฟล์ต่อคลาส" "แยกมุมมองของคุณออกจากฐานข้อมูลตัวควบคุมโดเมน" อย่าเขียน codeblock สปาเก็ตตี้ที่เป็นเนื้อเดียวกัน แต่เขียนส่วนประกอบแยกส่วนจำนวนมากที่ทำงานร่วมกัน มันเกี่ยวกับวิธีการและรูปแบบของรหัสที่ปัจจุบัน - ภายในทศวรรษนี้ - เห็นและสนับสนุนในกรอบการทำงานส่วนใหญ่ที่สนับสนุนการประชุมส่งต่อผ่านชุมชน มันเป็นการเปลี่ยนความคิดจาก 'monolithic blocks' เป็น …

9
อัลกอริทึมสำคัญกว่าภาษาโปรแกรมหรือไม่
ในระหว่างการประกวดGoogle Code Jamปัจจุบัน (2013) มีปัญหาที่เกิดขึ้นกับคน C ++ และ Java มากกว่า 200 บรรทัดเมื่อเทียบกับคน Python ที่แก้ไขปัญหาเดียวกันโดยใช้รหัส 40 บรรทัดเท่านั้น Python ไม่สามารถเทียบเคียงได้โดยตรงกับ C ++ และ Java แต่ความแตกต่างของคำฟุ่มเฟื่อยที่ฉันคิดว่าอาจมีอิทธิพลต่อประสิทธิภาพของอัลกอริทึม การรู้อัลกอริทึมที่ถูกต้องสำคัญอย่างไรเมื่อเทียบกับการเลือกภาษา สามารถใช้โปรแกรม Python ที่ใช้งานได้ดีใน C ++ หรือ Java ในวิธีที่ดีกว่า (ใช้อัลกอริทึมเดียวกัน) และสิ่งนี้มีความสัมพันธ์กับการใช้คำฟุ่มเฟื่อยตามธรรมชาติของภาษาโปรแกรมบางภาษาหรือไม่?
35 java  c++  algorithms  python 

9
การพัฒนาบนเซิร์ฟเวอร์ที่ใช้งานจริง
วันนี้ฉันตะโกนเพื่อพัฒนาแอปพลิเคชันบนเซิร์ฟเวอร์ที่ใช้งานจริง อ้างว่า " การพัฒนาบนเซิร์ฟเวอร์ที่ใช้งานจริงไม่เป็นที่ยอมรับ - ตลอดไป! " นี่คือสถานการณ์ ฉันตั้งค่าอินสแตนซ์การพัฒนา: http://example.com:3000 ตัวอย่างการผลิตคือ: http://example.com ฉันเสร็จสมบูรณ์ในทุกการพัฒนางานของฉันในและเมื่อลูกค้ามีความยินดีกับการเปลี่ยนแปลงที่ผมย้ายพวกเขาไปยังhttp://example.com:3000http://example.com แอปพลิเคชันที่ฉันทำงานด้วยเป็นแอพพลิเคชั่นRuby on Railsและฉันต้องบอกว่าในตอนแรกฉันพยายามตั้งค่าสภาพแวดล้อมการพัฒนาในพื้นที่ แต่ฉันก็ไม่สามารถทำงานได้ หลังจากลองไปพักหนึ่งผมก็เลิกและตัดสินใจที่จะพัฒนาบนเซิร์ฟเวอร์ที่ใช้งานจริง อีกครั้งฉันเป็นคนงี่เง่า? อาจเป็นเช่นนั้น แต่ฉันได้ทำการพัฒนาเว็บไซต์มาสองสามปีแล้วและฉันไม่เคยเจอสถานการณ์เช่นนี้ ใครถูกและทำไม

6
รูปแบบสเปรดชีตที่เป็นมิตรกับ Git? [ปิด]
เรากำลังพยายามย้ายกระบวนการเอกสารโครงการของเราจาก Google เอกสารไปยังชุดของที่เก็บ Git ที่โฮสต์ด้วยตนเอง เอกสารข้อความนั้นง่ายต่อการคอมไพล์เนื่องจากเรามักไม่ต้องการการจัดรูปแบบแฟนซีเราจะแปลงทุกอย่างเป็นพูดคำสั่งย่อยด้วยตัวเลือกเพื่อฝัง LaTeX สำหรับกรณีที่ซับซ้อน แต่สเปรดชีตเป็นเรื่องที่แตกต่างกันมาก ... มีรูปแบบสเปรดชีต (- เหมือน) ที่เป็นมิตรกับระบบควบคุมเวอร์ชัน (และยิ่งกว่านั้นคือมนุษย์สามารถอ่านได้เหมือนกับ Markdown)? "รูปแบบที่เป็นมิตร": Git ทำงานได้ดีกับรูปแบบ ( ไม่ใช้ XML) และสร้างความแตกต่างที่มนุษย์สามารถอ่านได้ ( การกำหนดค่าเพิ่มเติมที่เกี่ยวข้องกับเครื่องมือภายนอกนั้นใช้ได้) เห็นได้ชัดว่ารสชาติ Markdown อนุญาตให้สร้างตารางแบบคงที่ แต่ฉันต้องการที่จะใช้สิ่งต่าง ๆ เช่นSUM()ฯลฯ ... (โปรดทราบว่า CSV มีปัญหาเดียวกัน) ไม่มี WYSIWYG เป็นไร แต่การสนับสนุนเครื่องมือแก้ไข / เครื่องมือที่ดีจะเป็น ดี โปรดอัพเดท: คำตอบที่เป็นมิตรกับ Linux เท่านั้น ไม่มี MS Office

10
นักพัฒนาซอฟต์แวร์ควรรับผิดชอบการทดสอบอื่น ๆ นอกเหนือจากการทดสอบหน่วยหากเป็นเช่นนั้น
ขณะนี้ฉันกำลังทำงานในโครงการที่ค่อนข้างใหญ่และฉันได้ใช้ JUnit และ EasyMock เพื่อฟังก์ชั่นการทดสอบหน่วยอย่างกว้างขวาง ตอนนี้ฉันสนใจในการทดสอบประเภทอื่นที่ฉันควรกังวล ในฐานะนักพัฒนาฉันต้องรับผิดชอบเกี่ยวกับสิ่งต่างๆเช่นการทำงานหรือการทดสอบการถดถอยหรือไม่ มีวิธีที่ดีในการรวมสิ่งเหล่านี้เข้าด้วยกันในเครื่องมือเช่น Maven / Ant / Gradle หรือไม่? สิ่งเหล่านี้เหมาะสำหรับผู้ทดสอบหรือปริญญาตรีหรือไม่? มีการทดสอบประเภทอื่น ๆ ที่มีประโยชน์อีกหรือไม่
35 testing 

4
จะเปลี่ยนเป็น C ++ 11 ได้อย่างไร
ฉันเคยเขียนโปรแกรมใน C ++ มาระยะหนึ่งแล้ว แต่ส่วนใหญ่แล้วสิ่งที่อยู่ตรงกลางของคุณสมบัติระดับต่ำของ C ++ โดยที่ฉันหมายถึงส่วนใหญ่ทำงานร่วมกับพอยน์เตอร์และอาร์เรย์ดิบ ฉันคิดว่าพฤติกรรมนี้เรียกว่าการใช้ C ++ เป็น C กับคลาส อย่างไรก็ตามเรื่องนี้ฉันเพิ่งลอง C เป็นครั้งแรกเท่านั้น ฉันประหลาดใจอย่างมากที่ภาษาอย่าง C # และ Java ซ่อนรายละเอียดเหล่านี้ไว้ในห้องสมุดมาตรฐานที่สะดวกสบายเช่นพจนานุกรมและรายการ ฉันทราบว่าไลบรารีมาตรฐาน C ++ มีคอนเทนเนอร์มากมายเช่นเวกเตอร์, แผนที่และสตริงเช่นกันและ C ++ 11 จะเพิ่มเฉพาะสิ่งนี้โดยใช้ std :: array และลูป ranged ฉันจะเรียนรู้ที่จะใช้ประโยชน์จากคุณสมบัติภาษาสมัยใหม่เหล่านี้ได้อย่างไรและเหมาะสมที่สุดกับช่วงเวลาใด ถูกต้องหรือไม่ว่าวิศวกรรมซอฟต์แวร์ใน C ++ ปัจจุบันส่วนใหญ่ไม่มีการจัดการหน่วยความจำด้วยตนเอง สุดท้ายฉันควรใช้คอมไพเลอร์ตัวใดเพื่อสร้างมาตรฐานใหม่ให้ได้มากที่สุด Visual Studio มีเครื่องมือการดีบักที่ยอดเยี่ยม แต่ VS2012 ก็ดูเหมือนว่าจะมีการสนับสนุน C …
35 c++  c++11 

2
เทียบเท่าหลักการของ SOLID สำหรับการโปรแกรมเชิงฟังก์ชัน
ฉันพบว่าหลักการของ SOLIDค่อนข้างมีประโยชน์เมื่อคิดถึงการออกแบบเชิงวัตถุ มีหลักการเกี่ยวกับภาษาที่ไม่เชื่อเรื่องพระเจ้า / ชุดที่คล้ายกันเหมาะสำหรับการเขียนโปรแกรมการทำงานหรือไม่?


5
ฉันผิดที่คิดว่าต้องการบางอย่างเช่น AutoMapper เป็นสิ่งบ่งบอกถึงการออกแบบที่ไม่ดีหรือไม่?
Automapperเป็น "ผู้ทำแผนที่วัตถุ - วัตถุ" สำหรับ. Net ซึ่งหมายถึงการคัดลอกวัตถุจากคลาสไปยังคลาสอื่นที่แสดงถึงสิ่งเดียวกัน ทำไมสิ่งนี้ถึงมีประโยชน์ การทำซ้ำของคลาสเคยมีประโยชน์ / ออกแบบดีหรือไม่?
35 c#  design  .net 

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

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

2
การเลือกการนำ JAX-RS ไปใช้สำหรับโครงการใหม่
ฉันกำลังเริ่มโครงการ Java ใหม่ซึ่งจะต้องมี RESTful API มันจะเป็นแอปพลิเคชันธุรกิจ SaaS ที่ให้บริการลูกค้ามือถือ ฉันได้พัฒนาโครงการหนึ่งกับ Java EE 6 แต่ฉันไม่คุ้นเคยกับระบบนิเวศมากนักเนื่องจากประสบการณ์ส่วนใหญ่ของฉันอยู่บนแพลตฟอร์ม Microsoft ซึ่งจะเป็นตัวเลือกที่เหมาะสมสำหรับการใช้งาน JAX-RS สำหรับโครงการใหม่เช่นที่อธิบายไว้ ตัดสินจากรายการของวิกิพีเดียดูเหมือนว่าคู่แข่งหลักคือ Jersey, Apache CXF, RESTeasy และ Restlet แต่การเปรียบเทียบการนำ JAX-RS ไปใช้ในวิกิพีเดียนั้นมาจากปี 2008 ความประทับใจครั้งแรกของฉันจากหน้าแรกของพวกเขาคือ: CXFตั้งเป้าหมายที่จะเป็นโซลูชั่นที่ครอบคลุมมาก (เตือนให้ฉันนึกถึง WCF ในพื้นที่ของ Microsoft) ซึ่งทำให้ฉันคิดว่ามันมีความซับซ้อนในการเข้าใจการตั้งค่าและการดีบักมากกว่าสิ่งที่ฉันต้องการ Jerseyเป็นการนำมาใช้อ้างอิงและอาจเป็นทางเลือกที่ดี แต่เป็นมรดกจาก Sun และฉันไม่แน่ใจว่า Oracle จัดการกับมันอย่างไร (หน้าประกาศไม่ทำงานและการแจ้งเตือนครั้งล่าสุดจาก 4 เดือนก่อน); RESTeasyมาจาก JBoss และอาจเป็นตัวเลือกที่ดีแม้ว่าฉันจะไม่แน่ใจเกี่ยวกับการเรียนรู้ ดูเหมือนว่าRestletจะได้รับความนิยม แต่มีประวัติมากมายฉันไม่แน่ใจว่ามันทันสมัยใน Java …
35 java  rest  java-ee 

5
ข้อดีข้อเสียของแอปพลิเคชันเว็บ HTML / JavaScript เท่านั้น [ปิด]
ฉันมาจากพื้นหลังในรูปแบบ ASP.NET และพบว่าการเขียนโค้ดด้านเซิร์ฟเวอร์มีประสิทธิภาพมากในอดีต อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันต้องการเลิกใช้โค้ดฝั่งเซิร์ฟเวอร์ของส่วนหน้าและแทนที่ด้วย HTML / JavaScript ที่บริสุทธิ์ซึ่งเข้าถึงข้อมูลผ่านทาง JSON webservices ฉันไม่มีประสบการณ์จริงในเรื่องนี้ดังนั้นฉันจึงอยากได้ยินว่านี่เป็นรุ่นที่ผ่านการทดลองและทดสอบแล้วหรือไม่ นอกจากนี้ยังมีข้อผิดพลาดรอบตัวมันคืออะไร? ฉันพบว่าการควบคุมผู้ใช้ ASP.NET มีประโยชน์มากดังนั้นฉันจึงอยากจะรักษาทฤษฎีเอาไว้โดยการเก็บแม่แบบมาร์กอัปในไฟล์ HTML แยกต่างหากบนเซิร์ฟเวอร์ สิ่งเหล่านี้จะถูกดึงและใช้งานผ่าน jQuery AJAX และ jQuery HTML plugin plugin ตามลำดับ ข้อมูลใด ๆ ที่จะได้รับการชื่นชมอย่างมาก ป.ล. ขออภัยสำหรับคำถาม noob แต่สถาปัตยกรรมเว็บประเภทนี้เรียกว่า web-2.0 หรือฉันไม่ได้ติดตามอย่างสมบูรณ์หรือไม่

3
ข้อความที่ส่งผ่านใน OO คืออะไร?
ฉันได้เรียนรู้การเขียนโปรแกรม OO เป็นหลักใน C ++, C # และ Java ฉันคิดว่าฉันมีความเข้าใจเป็นอย่างดีเกี่ยวกับความเข้าใจของฉันเกี่ยวกับการห่อหุ้มการสืบทอดและความหลากหลาย (รวมถึงการอ่านคำถามจำนวนมากบนไซต์นี้) สิ่งหนึ่งที่ดูเหมือนจะปรากฏขึ้นที่นี่และมีแนวคิดของ "การส่งข้อความ" เห็นได้ชัดว่านี่คือสิ่งที่ไม่ได้ใช้ในขณะที่การเขียนโปรแกรม OO ในภาษาหลักของวันนี้ แต่ได้รับการสนับสนุนโดย Smalltalk คำถามของฉันคือ: ข้อความผ่านคืออะไร (มีคนให้ตัวอย่างที่เป็นประโยชน์ได้หรือไม่) มีการสนับสนุน "ข้อความส่งผ่าน" นี้ใน C ++, C # หรือ Java หรือไม่
35 java  c#  c++  object-oriented 


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