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

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

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

7
อะไรคือบทบาทของตัวติดตามปัญหาแบบดั้งเดิมเมื่อใช้บอร์ด Scrum / Kanban?
จากมุมมองระดับสูงมากสำหรับฉันดูเหมือนว่ามีเครื่องมือการจัดการโครงการ 2 ประเภท: ตัวติดตามปัญหาแบบดั้งเดิมเช่น Fogbugz, JIRA, BugZilla, Trac, Redmine เป็นต้น บอร์ดเสมือนจริง / เครื่องมือการจัดการโครงการที่คล่องตัวเช่น Pivotal Tracker, GreenHopper, AgileZen, Trello เป็นต้น แน่นอนว่าพวกเขาทับซ้อนกันไม่ทางใดก็ทางหนึ่งเช่นงาน Pivotal Tracker สามารถนำเข้าสู่ JIRA ได้ GreenHopper นั้นถูกนำไปใช้กับฐานปัญหา JIRA เป็นต้น แต่ฉันคิดว่ายังคงเห็นความแตกต่างของการวางแนวระหว่างเครื่องมือทั้งสองประเภทนี้ ดูเหมือนว่าปัญหาการติดตามแบบดั้งเดิมจะถูกนำมาใช้แม้ใน บริษัท อื่น ๆ ที่ดำเนินการจัดการโครงการแบบว่องไว คำถามของฉันคือทำไมพวกเขาทำอย่างนั้น? ฉันรู้สึกว่าเราควรใช้ตัวติดตามปัญหาใน บริษัท ของฉันด้วย แต่เมื่อฉันคิดถึงมันฉันไม่แน่ใจว่าทำไมเราถึงต้องการมัน ตัวอย่างเช่นการพัฒนา Trello ดูเหมือนว่าจะได้รับการจัดการโดยใช้ Trello เอง (ดูกำแพงเสมือนจริง ) แม้ว่าพวกเขาจะสามารถเข้าถึง Fogbugz ซึ่งเป็นหนึ่งในตัวติดตามปัญหาที่ดีที่สุด …

6
ระเบียบวิธีสำหรับการบันทึกรหัสฐานที่มีอยู่
ฉันทำงานเป็นส่วนหนึ่งของทีมในแอปพลิเคชันที่มีอยู่ซึ่งไม่มีเอกสารแบบอินไลน์หรือไม่มีเอกสารทางเทคนิค ในขณะที่ฉันกำลังทำงานกับรายงานข้อผิดพลาดต่าง ๆ ในแอปพลิเคชันฉันได้เขียนเส้นทางการค้นหาเส้นทางสำหรับตัวเอง - หมายเลขข้อผิดพลาดในสถานที่ต่าง ๆ เพื่อให้ผู้พัฒนารายต่อไปสามารถอ้างถึงหมายเลขข้อบกพร่องนั้นเพื่อดูว่าเกิดอะไรขึ้น คำถามของฉันคือ: วิธีที่มีประสิทธิภาพที่สุดสำหรับการบันทึกรหัสนี้คืออะไร? ฉันควรจัดทำเอกสารตามที่ฉันสัมผัสพื้นที่ (วิธีไวรัสถ้าคุณจะ) หรือฉันควรเอกสารจากแต่ละส่วนด้วยตนเองและไม่ปฏิบัติตามเส้นทางที่สาขาออกไปยังพื้นที่อื่น ๆ ของใบสมัคร? ฉันควรแทรกความคิดเห็นแบบอินไลน์ที่ไม่มีใครอยู่ก่อนหน้านี้ (ด้วยความกลัวว่าฉันอาจลงเอยด้วยการระบุสิ่งที่รหัสไม่ถูกต้อง) คุณจะใช้วิธีการอย่างไรในการจัดทำเอกสารของแอปพลิเคชั่นที่มีขนาดค่อนข้างใหญ่อย่างถูกต้องและรวดเร็วซึ่งไม่มีเอกสารแบบอินไลน์อยู่หรือการอ้างอิงแบบอินไลน์ไปยังเอกสารภายนอก

2
Node.js เป็นกรอบงานหรือไม่? [ปิด]
ฉันเห็นผู้สรรหาผู้พัฒนา ฯลฯ อ้างถึง Node.js เป็นกรอบ ในความคิดของฉันนี่เป็นสิ่งที่ไม่รู้ว่า Node.js เป็นอย่างไร บ่อยครั้งในคำบรรยายลักษณะงาน Node.js ถูกจัดกลุ่มเป็นห้องสมุดท่ามกลางAngularJS , Reactและอื่น ๆ โดยทั่วไปฉันเห็นว่าเป็นการถูกป้อนโดยบุคคลที่ไม่ทราบความแตกต่าง (HR, ผู้สรรหา ฯลฯ ) ในความคิดของฉัน Node.js เป็นแพลตฟอร์มหรือสภาพแวดล้อมรันไทม์ มันสลับ DOM API (JavaScript ในเบราว์เซอร์) สำหรับ API อื่น ๆ เช่นระบบไฟล์ (เนื่องจากทำงานเป็นเซิร์ฟเวอร์ไม่ใช่ในเบราว์เซอร์) ทำไมคนคิดว่า Node.js เป็นกรอบ; ฉันผิดหรือเปล่า จริง ๆ แล้วเป็นกรอบหรือไม่

5
วิธีที่ดีที่สุดในการทดสอบหน่วยวิธีการที่เรียกวิธีการอื่น ๆ ในชั้นเรียนเดียวกัน
เมื่อเร็ว ๆ นี้ฉันได้พูดคุยกับเพื่อนบางคนซึ่งวิธีการ 2 วิธีต่อไปนี้ดีที่สุดในการส่งคืนผลลัพธ์หรือการโทรไปยังวิธีการในชั้นเรียนเดียวกันจากวิธีการในชั้นเรียนเดียวกัน นี่เป็นตัวอย่างที่ง่ายมาก ในความเป็นจริงฟังก์ชั่นมีความซับซ้อนมากขึ้น ตัวอย่าง: public class MyClass { public bool FunctionA() { return FunctionB() % 2 == 0; } protected int FunctionB() { return new Random().Next(); } } ดังนั้นเพื่อทดสอบสิ่งนี้เรามี 2 วิธี วิธีที่ 1: ใช้ฟังก์ชั่นและการกระทำเพื่อแทนที่ฟังก์ชั่นของวิธีการ ตัวอย่าง: public class MyClass { public Func<int> FunctionB { get; set; } …

8
บังคับให้ผู้พัฒนารายอื่นเรียกใช้วิธีการหลังจากทำงานเสร็จ
ในห้องสมุดใน Java 7 ฉันมีคลาสที่ให้บริการกับคลาสอื่น หลังจากสร้างอินสแตนซ์ของคลาสบริการนี้วิธีการหนึ่งในนั้นอาจถูกเรียกหลายครั้ง (ลองเรียกมันว่าdoWork()เมธอด) ดังนั้นฉันไม่ทราบว่าเมื่องานของคลาสบริการเสร็จสมบูรณ์ ปัญหาคือระดับบริการใช้วัตถุหนักและควรปล่อยพวกเขา ฉันตั้งค่าส่วนนี้ในวิธีการ (เรียกว่าrelease()) แต่ไม่รับประกันว่านักพัฒนารายอื่นจะใช้วิธีนี้ มีวิธีบังคับให้ผู้พัฒนารายอื่นเรียกใช้วิธีนี้หลังจากทำงานของคลาสบริการหรือไม่ แน่นอนฉันสามารถบันทึกได้ แต่ฉันต้องการบังคับพวกเขา หมายเหตุ: ฉันไม่สามารถเรียกrelease()เมธอดในdoWork()เมธอดได้เนื่องจากdoWork() ต้องการอ็อบเจ็กต์เหล่านั้นเมื่อมันถูกเรียกในครั้งถัดไป
34 java 

3
นี่เป็นการใช้ค่าคงที่ที่เป็นสัญลักษณ์มากเกินไปหรือไม่?
ฉันค่อนข้างใหม่สำหรับวิศวกรรมซอฟต์แวร์และเพื่อเป็นแบบฝึกหัดการเรียนรู้ฉันเขียนเกมหมากรุก เพื่อนของฉันดูและชี้ให้เห็นว่ารหัสของฉันดูเหมือน for (int i = 0; i < 8; i++){ for (int j = 0; j < 8; j++){ ในขณะที่เขายืนยันว่ามันควรจะเป็นแทน for (int i = 0; i < CHESS_CONST; i++){ for (int j = 0; j < CHESS_CONST; j++){ ด้วยชื่อสัญลักษณ์ที่ดีกว่าที่ฉันไม่สามารถนึกได้ตอนนี้ ตอนนี้แน่นอนฉันรู้ว่าหลีกเลี่ยงการใช้หมายเลขเวทย์มนตร์ แต่ฉันรู้สึกเหมือนตั้งแต่ หมายเลขนี้จะไม่เปลี่ยนแปลง ชื่อนั้นไม่สามารถสื่อความหมายได้เนื่องจากมีการใช้ตัวเลขในหลาย ๆ ที่ตลอดทั้งรหัส และ ใครก็ตามที่ต้องผ่านซอร์สโค้ดสำหรับโปรแกรมหมากรุกควรรู้เกี่ยวกับหมากรุกอย่างเพียงพอเพื่อให้ทราบว่าสิ่งใดที่ 8 นั้น …

6
ควรมีการทดสอบหน่วยสำหรับนิพจน์ปกติที่ซับซ้อนหรือไม่
ฉันควรเขียนการทดสอบหน่วยสำหรับนิพจน์ปกติที่ซับซ้อนในใบสมัครของฉันหรือไม่ ในอีกด้านหนึ่งพวกเขาทดสอบได้ง่ายเพราะรูปแบบอินพุตและเอาต์พุตมักจะง่ายและกำหนดไว้อย่างดีและพวกเขามักจะกลายเป็นความซับซ้อนดังนั้นการทดสอบของพวกเขาโดยเฉพาะมีค่า ในทางกลับกัน: พวกมันเองไม่ค่อยเป็นส่วนหนึ่งของส่วนต่อประสานของบางหน่วย อาจเป็นการดีกว่าที่จะทดสอบเฉพาะส่วนต่อประสานและดำเนินการทดสอบ regexes โดยปริยาย แก้ไข: ผมเห็นด้วยกับหมอสีน้ำตาลที่ของเขาในการแสดงความคิดเห็นหมายเหตุที่เป็นกรณีพิเศษนี้หน่วยทดสอบของชิ้นส่วนภายใน แต่เนื่องจากส่วนประกอบภายใน regexes มีคุณสมบัติพิเศษบางอย่าง: regex บรรทัดเดียวนั้นซับซ้อนจริงๆโดยไม่ต้องเป็นโมดูลแยกต่างหาก Regexes แม็พอินพุตกับเอาต์พุตโดยไม่มีผลข้างเคียงใด ๆ และง่ายต่อการทดสอบแยกต่างหาก

6
ฉันจะทดสอบระบบที่วัตถุนั้นยากที่จะเลียนแบบได้อย่างไร
ฉันกำลังทำงานกับระบบต่อไปนี้: Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern เมื่อเร็ว ๆ นี้เรามีปัญหาเมื่อฉันอัปเดตเวอร์ชันของห้องสมุดที่ฉันใช้ซึ่งทำให้เกิดการประทับเวลา (ซึ่งห้องสมุดของบุคคลที่สามกลับมาเป็นlong) ซึ่งจะเปลี่ยนจากมิลลิวินาทีหลังจากยุคเป็นนาโนวินาทีหลังจากยุค ปัญหา: หากฉันเขียนการทดสอบที่จำลองวัตถุของห้องสมุดบุคคลที่สามการทดสอบของฉันจะผิดถ้าฉันทำผิดเกี่ยวกับวัตถุของห้องสมุดบุคคลที่สาม ตัวอย่างเช่นฉันไม่ทราบว่าการประทับเวลาเปลี่ยนความแม่นยำซึ่งส่งผลให้จำเป็นต้องเปลี่ยนการทดสอบหน่วยเนื่องจากการจำลองของฉันคืนข้อมูลผิด นี่ไม่ใช่ข้อผิดพลาดในไลบรารีมันเกิดขึ้นเพราะฉันพลาดบางสิ่งบางอย่างในเอกสาร ปัญหาคือฉันไม่แน่ใจเกี่ยวกับข้อมูลที่มีอยู่ในโครงสร้างข้อมูลเหล่านี้เพราะฉันไม่สามารถสร้างข้อมูลจริงได้หากไม่มีฟีดข้อมูลจริง วัตถุเหล่านี้มีขนาดใหญ่และซับซ้อนและมีข้อมูลจำนวนมากแตกต่างกัน เอกสารสำหรับห้องสมุดบุคคลที่สามไม่ดี คำถาม: ฉันจะตั้งค่าการทดสอบเพื่อทดสอบพฤติกรรมนี้ได้อย่างไร ฉันไม่แน่ใจว่าฉันสามารถแก้ปัญหานี้ได้ในการทดสอบหน่วยเพราะการทดสอบนั้นผิดพลาดได้ง่าย นอกจากนี้ระบบรวมมีขนาดใหญ่และซับซ้อนและง่ายต่อการพลาดบางสิ่งบางอย่าง ตัวอย่างเช่นในสถานการณ์ข้างต้นฉันได้ปรับการจัดการการประทับเวลาในหลายสถานที่อย่างถูกต้อง แต่ฉันพลาดหนึ่งในนั้น ระบบดูเหมือนจะทำสิ่งที่ถูกต้องเป็นส่วนใหญ่ในการทดสอบการรวมระบบของฉัน แต่เมื่อฉันปรับใช้กับการผลิต (ซึ่งมีข้อมูลมากขึ้น) ปัญหาก็ชัดเจน ตอนนี้ฉันไม่มีกระบวนการทดสอบการรวมเข้าด้วยกัน การทดสอบนั้นสำคัญ: พยายามทำให้การทดสอบหน่วยดีเพิ่มการทดสอบเพิ่มเติมเมื่อสิ่งแตกหักจากนั้นปรับใช้กับเซิร์ฟเวอร์ทดสอบของฉันและตรวจสอบให้แน่ใจว่าสิ่งต่าง ๆ ดูมีเหตุผล ปัญหาการประทับเวลานี้ผ่านการทดสอบหน่วยเนื่องจาก mocks ถูกสร้างขึ้นผิดจากนั้นจะผ่านการทดสอบการรวมเนื่องจากไม่ได้ทำให้เกิดปัญหาที่ชัดเจนและทันที ฉันไม่มีแผนกควบคุมคุณภาพ

7
เหตุใดภาษาหลักส่วนใหญ่จึงไม่สนับสนุนไวยากรณ์“ x <y <z” สำหรับการเปรียบเทียบแบบบูลีน 3 ทาง
หากฉันต้องการเปรียบเทียบตัวเลขสองตัว (หรือเอนทิตีที่มีการจัดลำดับที่ดีอื่น ๆ ) ฉันจะทำเช่นx &lt; yนั้น ถ้าผมต้องการเปรียบเทียบสามของพวกเขา, x &lt; y &lt; zนักเรียนพีชคณิตโรงเรียนมัธยมจะแนะนำพยายาม โปรแกรมเมอร์ในตัวฉันจะตอบกลับด้วย "ไม่นั่นไม่ถูกต้องคุณต้องทำx &lt; y &amp;&amp; y &lt; z" ภาษาส่วนใหญ่ที่ฉันพบเจอดูเหมือนจะไม่สนับสนุนไวยากรณ์นี้ซึ่งเป็นเรื่องแปลกเพราะมันเป็นเรื่องธรรมดาในวิชาคณิตศาสตร์ Python เป็นข้อยกเว้นที่น่าสังเกต JavaScript ดูเหมือนข้อยกเว้น แต่จริงๆแล้วเป็นเพียงผลพลอยได้ที่โชคร้ายของลำดับความสำคัญของผู้ปฏิบัติงานและการแปลงโดยนัย ใน Node.js, 1 &lt; 3 &lt; 2ประเมินเพราะมันจริงๆtrue(1 &lt; 3) &lt; 2 === true &lt; 2 === 1 &lt; 2 ดังนั้นคำถามของฉันคือ: เหตุใดจึงx &lt; y …

1
ชื่อฟังก์ชั่นที่คืนค่าอาร์กิวเมนต์?
ฟังก์ชั่นที่ไม่ทำอะไรเลยไม่มีการโต้แย้งและคืนสิ่งใด ๆ ที่เรียกว่า a noopหรือ no-op ตัวอย่างของ noop อยู่ด้านล่าง: function noop(){} http://en.wikipedia.org/wiki/NOP ดังนั้นมีชื่อฟังก์ชั่นซึ่งมีความหมายเพียงเพื่อกลับอาร์กิวเมนต์ของมันและไม่ทำอะไรอย่างอื่น? ตัวอย่างของฟังก์ชันประเภทนี้: function(a){return a}
34 functions 

6
การใช้กองซ้อนโดยใช้สองคิวคืออะไร
ฉันมีคำถามทำการบ้านต่อไปนี้: ใช้วิธีการซ้อน (x) และ pop () โดยใช้สองคิว ดูเหมือนว่าจะแปลกสำหรับฉันเพราะ: Stack คือคิว (LIFO) ฉันไม่เห็นว่าทำไมคุณต้องใช้สองคิวในการติดตั้ง ฉันค้นหารอบ ๆ : GeeksForGeeks StackOverflow และพบวิธีแก้ไขปัญหาสองสามข้อ นี่คือสิ่งที่ฉันลงเอยด้วย: public class Stack&lt;T&gt; { LinkedList&lt;T&gt; q1 = new LinkedList&lt;T&gt;(); LinkedList&lt;T&gt; q2 = new LinkedList&lt;T&gt;(); public void push(T t) { q1.addFirst(t); } public T pop() { if (q1.isEmpty()) { throw new RuntimeException( …
34 java  stack 

10
การ“ กำหนดค่าเริ่มต้นตัวแปรเสมอ” นำไปสู่ข้อบกพร่องสำคัญที่ถูกซ่อนอยู่หรือไม่
หลักเกณฑ์ C ++ Core มีกฎES.20: เริ่มต้นวัตถุเสมอ หลีกเลี่ยงข้อผิดพลาดที่ใช้ก่อนกำหนดและพฤติกรรมที่ไม่ได้กำหนดไว้ หลีกเลี่ยงปัญหาเกี่ยวกับความเข้าใจในการเริ่มต้นที่ซับซ้อน ลดความซับซ้อนของการ refactoring แต่กฎนี้ไม่ได้ช่วยในการค้นหาข้อบกพร่องมันเพียงซ่อนพวกเขา สมมติว่าโปรแกรมมีพา ธ การประมวลผลซึ่งใช้ตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้น มันเป็นข้อผิดพลาด พฤติกรรมที่ไม่ได้กำหนดไว้นอกจากนี้ยังหมายความว่ามีบางอย่างผิดปกติและโปรแกรมอาจไม่ตรงตามข้อกำหนดของผลิตภัณฑ์ เมื่อมันถูกนำไปใช้กับการผลิตอาจมีการสูญเสียเงินหรือแย่ลง เราจะตรวจสอบข้อบกพร่องได้อย่างไร เราเขียนแบบทดสอบ แต่การทดสอบไม่ครอบคลุมเส้นทางการดำเนินการ 100% และการทดสอบจะไม่ครอบคลุม 100% ของอินพุตโปรแกรม ยิ่งไปกว่านั้นแม้การทดสอบจะครอบคลุมเส้นทางการดำเนินการที่ผิดปกติ แต่ก็ยังสามารถผ่านได้ มันไม่ได้กำหนดพฤติกรรมหลังจากทั้งหมดตัวแปร uninitialized สามารถมีค่าที่ค่อนข้างถูกต้อง แต่นอกเหนือจากการทดสอบของเราเรามีคอมไพเลอร์ที่สามารถเขียนอะไรบางอย่างเช่น 0xCDCDCDCD ไปยังตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้น สิ่งนี้จะช่วยปรับปรุงอัตราการตรวจจับของการทดสอบเล็กน้อย ยิ่งไปกว่านั้น - มีเครื่องมือเช่น Address Sanitizer ที่จะอ่านค่าหน่วยความจำที่ไม่ได้กำหนดค่าเริ่มต้นทั้งหมด และในที่สุดก็มีเครื่องวิเคราะห์แบบสแตติกซึ่งสามารถดูโปรแกรมและบอกว่ามีการอ่านก่อนตั้งค่าบนพา ธ การเรียกใช้งานนั้น ดังนั้นเราจึงมีเครื่องมือที่ทรงพลังมากมาย แต่ถ้าเราเริ่มต้นตัวแปร - sanitizers ไม่พบอะไรเลย int bytes_read = …
34 c++  c 

8
การเอาชนะ Object.finalize () ไม่ดีจริงเหรอ?
ข้อโต้แย้งหลักสองข้อต่อการยกเลิกObject.finalize()คือ: คุณไม่ต้องตัดสินใจเมื่อมันถูกเรียก มันอาจจะไม่ถูกเรียกเลย หากฉันเข้าใจสิ่งนี้อย่างถูกต้องฉันไม่คิดว่าสิ่งเหล่านี้เป็นเหตุผลที่ดีพอที่จะเกลียดObject.finalize()มาก มันขึ้นอยู่กับการนำ VM ไปใช้และ GC เพื่อพิจารณาว่าเวลาที่เหมาะสมในการจัดสรรคืนวัตถุนั้นไม่ใช่นักพัฒนา เหตุใดจึงสำคัญที่ต้องตัดสินใจเมื่อObject.finalize()ถูกเรียก ตามปกติและแก้ไขให้ถูกต้องหากฉันผิดเวลาที่Object.finalize()จะไม่ถูกเรียกก็คือเมื่อแอปพลิเคชันถูกยกเลิกก่อนที่ GC จะมีโอกาสเรียกใช้ อย่างไรก็ตามวัตถุได้ถูกจัดสรรคืนเมื่อกระบวนการของแอปพลิเคชันสิ้นสุดลง จึงObject.finalize()ไม่ได้รับการเรียกเนื่องจากไม่จำเป็นต้องโทร ทำไมนักพัฒนาถึงสนใจ? ทุกครั้งที่ฉันใช้วัตถุที่ฉันต้องปิดเอง (เช่นตัวจัดการไฟล์และการเชื่อมต่อ) ฉันจะผิดหวังมาก ฉันต้องตรวจสอบอย่างต่อเนื่องว่าวัตถุมีการนำไปใช้close()หรือไม่และฉันแน่ใจว่าฉันไม่ได้รับสายบางครั้งในอดีต ทำไมมันไม่ได้เป็นเพียงที่เรียบง่ายและปลอดภัยในการเพียงแค่ปล่อยให้มันไป VM และ GC ในการกำจัดของวัตถุเหล่านี้โดยการวางclose()การดำเนินงานในObject.finalize()?

8
ทำไมนักพัฒนาไม่สร้างตัวช่วยติดตั้งบน linux? [ปิด]
ฉันแน่ใจว่ามันไม่ได้เกี่ยวกับความเกียจคร้านหรืออะไรแบบนั้น แต่ฉันไม่เข้าใจว่าทำไมนักพัฒนาของแอพที่ผู้บริโภคส่วนใหญ่หันหน้าไปทางแอปไม่ได้สร้างวิซาร์ดการติดตั้งใด ๆ แอพเดียวกันมักมีตัวติดตั้งสำหรับ Windows และ Mac OS ดังนั้นทำไมไม่ใช้ Linux มีเหตุผลทางเทคนิคสำหรับแนวโน้มนี้หรือเป็นเพียงแค่การประชุม? แก้ไข (23-09-2557): คำถามนี้ไม่ได้รับการขอให้เริ่มสงครามเปลวไฟ Windows กับ Linux ฉันใช้ระบบปฏิบัติการหลักทั้ง 3 ระบบและนอกเหนือจาก Linux แล้วอีกสองระบบ (Windows และ Mac OS) ทั้งคู่มีตัวติดตั้ง ฉันยังไม่ได้ติดตั้ง Oracle แต่สิ่งที่ฉันต้องการติดตั้งฉันไม่เคยเห็นเครื่องมือติดตั้ง GUI สำหรับ Linux ใช่ฉันรู้ว่า Linux มีผู้จัดการแพ็คเกจดังนั้นนักพัฒนาซอฟต์แวร์จึงไม่จำเป็นต้องติดตั้ง แต่ยังมีซอฟต์แวร์จำนวนมากที่ล้าสมัยในตัวจัดการแพ็คเกจเริ่มต้นหรือไม่สามารถใช้งานได้ นอกจากนี้เนื่องจาก Linux ขายเป็นทางเลือกให้ Windows สำหรับผู้ใช้ทั่วไป (Ubuntu พยายามอย่างหนักในโดเมนนี้) ดังนั้นจึงเหมาะสมกว่าที่จะให้ผู้ใช้ที่พวกเขาคุ้นเคย ยกตัวอย่างเช่นการตั้งค่า LAMP stack นี่เป็นซอฟต์แวร์โอเพ่นซอร์สทั้งหมดในที่เก็บเริ่มต้น แต่คุณสามารถตั้งค่าทุกอย่างในครั้งเดียวโดยไม่ต้องใช้สคริปต์ได้หรือไม่? …

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