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

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

2
การแยกโครงการในกระบวนการ Github
มีโครงการใน Github ที่ฉันชอบและต้องการใช้เป็นส่วนใหญ่ มีบางสิ่งที่ฉันต้องการจะทำแตกต่าง / ลบออกซึ่งไม่สมเหตุสมผลกับสิ่งที่ฉันต้องการ / ต้องการ นอกจากนี้ฉันต้องการเพิ่มบางสิ่งเช่นกัน ตามที่ฉันเข้าใจฉันควรแยกโครงการและฉันสามารถเปลี่ยนแปลงสิ่งที่ฉันต้องการและผลักดันกลับไปที่ส้อมของฉัน จากนั้นฉันก็ต้องการที่จะดึงการเปลี่ยนแปลงจากโครงการเดิมเป็นครั้งคราวดังนั้นฉันจึงได้รับการแก้ไขข้อบกพร่อง / คุณสมบัติล่าสุด ฉันเลิกใช้แล้วฉันคิดว่ามันควรจะใช้ได้ไหม จะนำมาซึ่งการเปลี่ยนแปลงจากโครงการเดิมได้อย่างไร

5
มีหนังสือบัญญัติในชุด x86 หรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา มีหนังสือมากมายในการชุมนุม อย่างไรก็ตามพวกเขามักจะจัดการกับ ISAs ซึ่งฉันไม่สนใจเช่น MIPS หรือ ARM ฉันไม่ได้จัดการกับสถาปัตยกรรมเหล่านี้ ไม่มีเหตุผลที่ฉันจะพยายามเรียนรู้พวกเขา แต่หนังสือประกอบ x86 ดูเหมือน ... ไม่มีอยู่จริง สมมติว่าฉันกำลังพยายามสร้างคอมไพเลอร์ของเล่นที่สร้างไฟล์ Windows Portable Executable มีหนังสือออกบ้างไหมว่าเป็นมาตรฐาน de-facto สำหรับอธิบายวิธีปฏิบัติที่ดีที่สุดวิธีการออกแบบและข้อมูลที่เป็นประโยชน์อื่น ๆ ในชุดประกอบ x86? หนังสือเล่มไหนที่ทำให้มันพิเศษ?
25 learning  books  assembly  x86 

4
ชี้แจงหลักการเปิด / ปิด
ตามที่ฉันได้อธิบายหลักการเปิด / ปิดระบุว่าเมื่อเขียนรหัสไม่ควรแก้ไข (นอกเหนือจากการแก้ไขข้อผิดพลาด) แต่หากกฎธุรกิจของฉันเปลี่ยนฉันไม่ควรแก้ไขรหัสที่ใช้การเปลี่ยนแปลงเหล่านั้นหรือ ฉันสงสัยว่าฉันไม่เข้าใจบางสิ่งเกี่ยวกับหลักการเพราะมันไม่สมเหตุสมผลสำหรับฉัน

7
ลำดับที่ถูกต้องในการอ่านหนังสือเหล่านี้คืออะไร? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันเป็นนักพัฒนารุ่นเยาว์ C # ฉันเรียนรู้ที่บ้านและตอนนี้ฉันได้งานแรกแล้ว :) ฉันต้องการซื้อหนังสือเหล่านี้ แต่คำสั่งที่ถูกต้องในการอ่านหนังสือเหล่านี้คืออะไร? รหัสเสร็จสมบูรณ์: คู่มือปฏิบัติของการสร้างซอฟต์แวร์ Clean Code: คู่มือของงานฝีมือซอฟต์แวร์ Agile ในทางปฏิบัติโปรแกรมเมอร์
25 c#  learning  books 

5
คุณระบุตัวพิมพ์“ edge” บนอัลกอริทึมได้อย่างไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา โดยทั่วไปแล้วคุณจะทราบได้อย่างไรว่ากรณีใดที่เลวร้ายที่สุดหรือดีที่สุดของคุณและกรณี "ขอบ" อื่น ๆ ที่คุณอาจมีก่อนที่จะมีและคุณจะเตรียมรหัสสำหรับพวกเขาได้อย่างไร

13
เหตุใดการเพิ่มบุคคลเพิ่มเติมในโปรเจ็กต์ล่าช้าจึงทำได้ในภายหลัง
มันเป็นภาษิตที่ใช้กันทั่วไปว่าการเพิ่มโปรแกรมเมอร์มากขึ้นไปยังโปรเจ็กต์ล่าช้าจะทำให้เรื่องแย่ลง ทำไมนี้

1
แนะนำวิธีปฏิบัติที่ดีที่สุดในการสร้างคลาสคงที่
คำถามนี้ถูกโยกย้ายจาก Code Exchange Stack Stack เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 5 ปีที่ผ่านมา มีการถกเถียงกันระหว่างสมาชิกในทีมของฉันเกี่ยวกับการประกาศค่าคงที่ เรากำลังเคลื่อนย้ายตัวแปรคงที่ไปยังคลาสที่แยกจากกันดังนี้ public class Constants { public const string StateId = "ST"; public const string CountryId = "CI"; } สมาชิกในทีมของฉันสองสามคนแนะนำว่าเราประกาศชั้นเรียนเป็นแบบปิดผนึกเพื่อหลีกเลี่ยงตัวเลือกการเอาชนะและมีคนแนะนำว่าเราทำเครื่องหมายว่าเป็นแบบคงที่เพื่อหลีกเลี่ยงการสร้างชั้นเรียนแบบคงที่ อย่างไรก็ตามฉันต้องการให้มันเป็นแบบปิดผนึกด้วยตัวสร้างแบบคงที่เนื่องจากมันจะช่วยให้เราสามารถเริ่มต้นตัวแปรแบบอ่านอย่างเดียวในความต้องการในอนาคต กรุณาให้คำแนะนำกับเรา
25 c#  class 

8
ใช้สตริงว่างเป็นโมฆะหรือลบคุณสมบัติว่างในคำขอ API / ตอบกลับ
เมื่อถ่ายโอนออบเจ็กต์ผ่าน API เช่นเดียวกับในรูปแบบ schemaless JSON วิธีที่เหมาะสมที่สุดในการส่งคืนคุณสมบัติสตริงที่ไม่มีอยู่คืออะไร? ฉันรู้ว่ามีหลายวิธีในการทำเช่นนี้ในตัวอย่างในลิงค์ด้านล่าง หลีกเลี่ยงการเป็นโมฆะ ส่งคืน null ลบคุณสมบัติที่ว่างเปล่า ฉันแน่ใจว่าฉันเคยใช้เป็นโมฆะในอดีต แต่ไม่มีเหตุผลที่ดีที่จะทำเช่นนั้น ดูเหมือนว่าจะใช้ null ทันทีเมื่อจัดการกับฐานข้อมูล แต่ฐานข้อมูลดูเหมือนว่ารายละเอียดการใช้งานที่ไม่ควรเกี่ยวข้องกับฝ่ายที่อยู่อีกด้านหนึ่งของ API เช่นพวกเขาอาจใช้ที่เก็บข้อมูลสกีมาที่เก็บเฉพาะคุณสมบัติที่มีค่า (ไม่ใช่ค่า Null) จากมุมมองของรหัสการ จำกัด ฟังก์ชั่นสตริงให้ใช้งานได้กับประเภทเดียวเท่านั้นคือstring(ไม่ใช่ null) ทำให้ง่ายต่อการพิสูจน์ หลีกเลี่ยงโมฆะก็เป็นสาเหตุของการมีOptionวัตถุ ดังนั้นหากรหัสที่สร้างคำขอ / ตอบสนองไม่ได้ใช้ค่า null ฉันเดาว่าเป็นรหัสที่อีกด้านหนึ่งของ API จะไม่ถูกบังคับให้ใช้ค่า null เช่นกัน ฉันชอบความคิดที่จะใช้สตริงว่างเปล่าเป็นวิธีง่ายๆในการหลีกเลี่ยงการใช้ null อาร์กิวเมนต์หนึ่งที่ฉันได้ยินว่าใช้ null และเทียบกับสตริงว่างคือสตริงว่างหมายความว่ามีคุณสมบัติอยู่ แม้ว่าฉันจะเข้าใจความแตกต่างฉันยังสงสัยว่ามันเป็นเพียงรายละเอียดการใช้งานและถ้าใช้สตริงว่างหรือว่างเปล่าทำให้เกิดความแตกต่างในชีวิตจริง ฉันยังสงสัยว่าสตริงว่างนั้นคล้ายคลึงกับอาร์เรย์ว่างหรือไม่ ดังนั้นวิธีไหนที่ดีที่สุดในการทำสิ่งเหล่านี้ มันขึ้นอยู่กับรูปแบบของวัตถุที่ถูกถ่ายโอน (schema / schemaless) หรือไม่?

9
จะสื่อสารลำดับการแทรกนั้นสำคัญอย่างไรในแผนที่?
ฉันกำลังดึงชุดของสิ่งอันดับจากฐานข้อมูลและวางลงในแผนที่ แบบสอบถามฐานข้อมูลมีราคาแพง ไม่มีการจัดเรียงองค์ประกอบตามธรรมชาติที่เห็นได้ชัดในแผนที่ แต่ลำดับการแทรกยังคงสำคัญ การเรียงลำดับแผนที่จะเป็นการดำเนินการที่หนักหน่วงดังนั้นฉันต้องการหลีกเลี่ยงการทำเช่นนั้นเนื่องจากผลลัพธ์แบบสอบถามนั้นได้เรียงลำดับตามที่ฉันต้องการแล้ว ดังนั้นฉันเพิ่งเก็บผลลัพธ์แบบสอบถามลงในLinkedHashMapและส่งคืนแผนที่จากวิธี DAO: public LinkedHashMap<Key, Value> fetchData() ฉันมีวิธีprocessDataที่ควรทำการประมวลผลบนแผนที่ - แก้ไขค่าบางอย่างเพิ่มคีย์ / ค่าใหม่ มันถูกกำหนดให้เป็น public void processData(LinkedHashMap<Key, Value> data) {...} อย่างไรก็ตาม linters หลายตัว (Sonar ฯลฯ ) บ่นว่าประเภทของ 'data' ควรเป็นส่วนต่อประสานเช่น 'Map' แทนที่จะใช้ "LinkedHashMap" ( squid S1319 ) โดยพื้นฐานแล้วมันบอกว่าฉันควรจะมี public void processData(Map<Key, Value> data) {...} แต่ฉันต้องการให้ลายเซ็นของวิธีการบอกว่าลำดับของแผนที่มีความสำคัญกับอัลกอริธึมprocessDataเพื่อที่ว่าวิธีการของฉันจะไม่ผ่านแผนที่แบบสุ่มใด ๆ ฉันไม่ต้องการใช้SortedMapเพราะ (จากjavadoc …
24 java  code-quality  map 

6
การอ้างอิงแบบวงกลมไปยังตัวชี้พาเรนต์ยอมรับได้เมื่อใด
คำถามStack Overflowนี้เกี่ยวกับชายด์ที่มีการอ้างอิงถึงพาเรนต์ผ่านตัวชี้ ความเห็นค่อนข้างสำคัญในตอนแรกของการออกแบบซึ่งเป็นความคิดที่น่ากลัว ฉันเข้าใจว่านี่อาจไม่ใช่ความคิดที่ดีที่สุดโดยทั่วไป จากกฎทั่วไปของหัวแม่มือดูเหมือนว่ายุติธรรมที่จะพูดว่า "อย่าทำอย่างนี้!" อย่างไรก็ตามฉันสงสัยว่ามีเงื่อนไขอะไรบ้างที่คุณจะต้องทำอะไรแบบนี้ คำถามนี้ที่นี่และคำตอบ / ความเห็นที่เกี่ยวข้องแนะนำแม้กระทั่งกราฟที่จะไม่ทำสิ่งนี้
24 design 

5
ใน Java ผู้ช่วยส่วนตัวควรไปด้านบนหรือด้านล่างวิธีสาธารณะ? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันสังเกตเห็นว่าผู้ร่วมงานกับฉันมีแนวปฏิบัติที่ตรงกันข้ามเกี่ยวกับการเรียงลำดับวิธีการในคลาส Java ของเรา หนึ่งในเราเริ่มเรียนด้วยวิธีการสาธารณะที่สำคัญแล้วให้ผู้ช่วยส่วนตัวทั้งหมดหลังจากนั้น อีกคนหนึ่งของเราทำให้แน่ใจว่าวิธีการสาธารณะเป็นจุดสิ้นสุด เห็นได้ชัดว่านี่เป็นเพียงปัญหาสไตล์และไม่มีคำตอบที่ถูกต้อง อย่างไรก็ตามก่อนที่เราจะตัดสินใจว่าเรื่องนี้เป็นอีกการต่อสู้ของ Yooks vs Zooks และเลือกอย่างใดอย่างหนึ่งโดยพลการฉันสงสัยว่าบางทีอาจจะมีคำแนะนำสไตล์ Java มาตรฐานหรือเหตุผลบางประการที่ทำไมวิธีหนึ่งดีกว่าวิธีอื่น

3
การดิ้นรนกับการขึ้นต่อเนื่องของวงจรในการทดสอบหน่วย
ฉันพยายามฝึกฝน TDD โดยใช้มันเพื่อพัฒนาวิเช่น Bit Vector ฉันบังเอิญใช้สวิฟท์ แต่นี่เป็นคำถามที่ไม่เชื่อเรื่องภาษา My BitVectoris คือตัวstructที่เก็บ single UInt64และนำเสนอ API เหนือมันที่ให้คุณปฏิบัติต่อมันเหมือนกับคอลเลกชัน รายละเอียดไม่สำคัญมาก แต่มันค่อนข้างง่าย 57 บิตสูงเป็นบิตหน่วยเก็บข้อมูลและ 6 บิตด้านล่างเป็นบิต "นับ" ซึ่งจะบอกคุณว่าบิตหน่วยเก็บข้อมูลจำนวนหนึ่งเก็บค่าที่มีอยู่จริงได้อย่างไร จนถึงตอนนี้ฉันมีความสามารถที่เรียบง่ายไม่กี่อย่าง: เครื่องมือเริ่มต้นที่สร้างเวกเตอร์บิตที่ว่างเปล่า countทรัพย์สินของประเภทInt isEmptyทรัพย์สินของประเภทBool ตัวดำเนินการความเสมอภาค ( ==) หมายเหตุ: นี่เป็นตัวดำเนินการค่าความเท่าเทียมกันObject.equals()ใน Java ไม่ใช่ตัวดำเนินการความเท่าเทียมกันอ้างอิงเช่น==ใน Java ฉันวิ่งเข้าไปในกลุ่มพึ่งพาพึ่งพาวงจร: BitVectorหน่วยทดสอบที่ทดสอบความจำเป็นในการเริ่มต้นของฉันที่จะตรวจสอบว่ามีการสร้างขึ้นใหม่ สามารถทำได้หนึ่งใน 3 วิธี: ตรวจสอบ bv.count == 0 ตรวจสอบ bv.isEmpty == true ตรวจสอบว่า bv == …

1
โมดูลที่ต้องการเทียบกับการฉีดพึ่งพาใน Javascript
วันนี้มีคำถามโผล่ในใจของฉัน: วิธีที่เราใช้ Javascript กับเกือบทุกอย่างที่ถือว่าเป็นแนวปฏิบัติที่ดีในการพัฒนาซอฟต์แวร์แบบดั้งเดิมหรือไม่? ฉันมีชุดคำถาม / ข้อสังเกตที่เกี่ยวข้องกับคำชี้แจงนี้ แต่เพื่อให้เป็นไปตามรูปแบบของ StackExchange มันจะดีกว่าถ้าฉันแยกพวกเขาออกเป็นคำถามที่แตกต่างกัน โมดูลที่ต้องการ รหัส Javascript มาตรฐานทุกวันนี้ดูเหมือนว่า: const someModule = require('./someModule') module.exports = function doSomethingWithRequest() { // do stuff someModule.someFunc() // do other stuff } ข้อดี การห่อหุ้ม: โมดูลทำงานแบบสแตนด์อโลนและรู้ทุกอย่างที่จำเป็นในการทำหน้าที่ของมัน ลูกค้าสามารถใช้โมดูลได้ง่ายขึ้น ข้อเสีย การตรวจสอบได้แย่: นี่คือมาตรฐานเมื่อไม่ได้ใช้ DI แต่ในภาษาแบบไดนามิกเช่นจาวาสคริปต์ไว้ก็สามารถโกง * โดยโมดูลเหมือนหรือmockeryrewire แน่นอนมันละเมิดกรม - ไม่ต้องสับสนกับการพึ่งพาการฉีด - เนื่องจากฉันสามารถนำเข้าโมดูลที่เป็นรูปธรรมได้เท่านั้น มันอาจละเมิดOCP - …

4
วิธีการจัดการสิ่งที่ต้องทำในคำขอดึง?
คำถามนี้ถูกย้ายจากการแลกเปลี่ยนการประกันคุณภาพซอฟต์แวร์และการทดสอบสแต็คเพราะสามารถตอบได้ใน Software Engineering Stack Exchange ย้ายไป เมื่อปีที่แล้ว เมื่อฉันตรวจทานการเปลี่ยนแปลงในคำขอดึงบางครั้งฉันสะดุดความคิดเห็นด้วยหมายเหตุ "สิ่งที่ต้องทำ" ซึ่งอาจมีสาเหตุที่แตกต่างกันในกรณีของเราส่วนใหญ่เนื่องจาก: โซลูชันที่ใช้ในการแก้ปัญหานั้นสามารถปรับปรุงได้ แต่จะต้องใช้เวลามากขึ้นในการลงทุน ผู้เขียนเลือกวิธีแก้ปัญหาที่รวดเร็วกว่า แต่ใส่ความเห็นว่าอาจมีตัวเลือกที่ดีกว่า มีรหัสชั่วคราวเพื่อแก้ไขข้อบกพร่องที่มีอยู่ซึ่งควรได้รับการแก้ไขในไม่ช้า การรู้ว่าTODOโดยทั่วไปแล้วจะอยู่ใน codebase ตลอดอายุการใช้งานของ codebase ฉันจะตอบสนองต่อพวกเขาอย่างไรในคำขอดึง ฉันจะขอให้หลีกเลี่ยงอย่างสุภาพได้อย่างไรหรือหากมีเหตุผลจริง ๆ ฉันจะแน่ใจได้อย่างไรว่าผู้เขียนประชาสัมพันธ์จะติดตามมันในอนาคต

8
ในการกระทำของผู้ใช้วันละครั้ง: รีเซ็ต 24 ชั่วโมงเทียบกับรีเซ็ตเที่ยงคืน [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน12 เดือนที่ผ่านมา เมื่อผู้ใช้สามารถทำการกระทำได้วันละครั้งเท่านั้นเช่นรับตั๋วฟรีสำหรับการแข่งขันมีความเป็นไปได้สองอย่างที่ฉันได้พบในประสบการณ์ของฉัน 1) รีเซ็ต 24 ชั่วโมง หากเขาทำการกระทำในวันที่ 1 เมื่อเวลา 23:45 น. เขาจะสามารถดำเนินการได้อีกครั้งในวันที่ 2 ในวันที่หรือหลังเวลา 11:45 เขาจะไม่สามารถทำได้ 11:44 ในวันที่ 2 2) รีเซ็ตเที่ยงคืน (หรือเวลาใดก็ได้) ไม่ว่าผู้ใช้จะทำอะไรในวันที่ 1 เมื่อใดก็ตามที่กลายเป็นเที่ยงคืนและวันที่ 2 เริ่มต้นเขาจะสามารถดำเนินการได้อีกครั้ง ทั้งสอง จำกัด ผู้ใช้ในการดำเนินการเพียงหนึ่งการกระทำต่อวัน แต่ฉันมักจะเจอวิธีที่ 1 ซึ่งฉันคิดว่าไม่สะดวกด้วยเหตุผลสองประการ: ก่อนอื่นฉันต้องรอเวลา และครั้งที่สองในช่วงเวลานานการประทับเวลาของฉันที่ดำเนินการจะกลายเป็นในภายหลังและหลังจากนั้นเนื่องจากฉันจะไม่สามารถดำเนินการได้อย่างแน่นอน ณ เวลาประทับนั้นทุกวันเพียงไม่กี่วินาทีหรือนาทีต่อมา มีเหตุผลทางเทคนิคหรือไม่ที่ใครจะชอบวิธีที่ 1 แม้ว่าในความคิดของฉันข้อเสียที่สำคัญสำหรับผู้ใช้ที่ระบุไว้ล่วงหน้า? แก้ไขเพื่อระบุ: ฉันกำลังพูดถึงตัวอย่างโดยเฉพาะอย่างยิ่งที่ไม่จำเป็นต้องใช้เวลาว่าง 24 ชั่วโมงเช่นในการหมุนฟรีในปัจจุบันของ …

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