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

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

8
อะไรคือความแตกต่างระหว่าง 'เลเยอร์ของสิ่งที่เป็นนามธรรม' และ 'ระดับทางอ้อม'?
ฉันไม่แน่ใจว่าสามารถใช้ทั้งสองคำได้หรือไม่ อาจจะมีความแตกต่างทางวิชาการในวิทยาการคอมพิวเตอร์ซึ่งไม่เกี่ยวข้องกับการเขียนโปรแกรมแบบวันต่อวันหรือไม่ หรือฉันสามารถใช้ทั้งคำแทนกันได้โดยไม่ผิด อาจขึ้นอยู่กับบริบทที่ฉันใช้ทั้งสองคำ แก้ไข: ในเหตุผลที่ว่าทำไมผมพบคำทั้งสองอาจจะใช้แทนกันเป็นรายการเกี่ยวกับวิกิพีเดียชั้นที่เป็นนามธรรม คุณสามารถหาคำพูดของDavid Wheelers ที่ว่า 'ปัญหาทั้งหมดในวิทยาการคอมพิวเตอร์สามารถแก้ไขได้ด้วยการเปลี่ยนทิศทางในระดับอื่น'

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

5
ทำไมโทนสีเข้มในบรรณาธิการจึงเป็นที่นิยม? [ปิด]
ทุกวันนี้เกือบทุกคนใช้โทนสีเข้มในโปรแกรมแก้ไขโค้ด - พื้นหลังสีเข้มพร้อมข้อความสีอ่อน แม้แต่บรรณาธิการที่ใช้เว็บส่วนใหญ่ (เช่น Github) ก็มีโครงร่างสีเข้ม ฉันไม่เห็นประโยชน์โดยสุจริต สายตามนุษย์ดีกว่าในการอ่านตัวอักษรสีเข้มบนพื้นหลังที่สว่าง นอกจากนี้โทนสีดำบนสีขาวยังทำงานได้ดีขึ้นมากเมื่อคุณอยู่ในสภาพแวดล้อมที่มีแสงสว่างเพียงพอ ฉันกำลังนั่งอยู่ในสำนักงานที่มีดวงอาทิตย์ส่องผ่านหน้าต่าง ฉันสามารถอ่านข้อความในโปรแกรมแก้ไขของฉัน (gVim ที่มีข้อความสีเข้มบนพื้นหลังสีขาว) ได้ดี แต่บนคอนโซลลินุกซ์มันยากกว่ามาก การแก้ไขข้อความในคอนโซลเป็นไปไม่ได้สำหรับฉัน ทุกอย่างดูเหมือนจะเป็นเรื่องแปลกสำหรับฉันเริ่มต้นจากการตั้งค่าเริ่มต้นใน IDEs / บรรณาธิการ แต่บางทีฉันแปลก ๆ .. ;) อย่างไรก็ตามทำไมทุกคนใช้สิ่งเหล่านี้

5
มันยังคงถูกต้องหรือไม่ที่จะพูดเกี่ยวกับแบบจำลองโลหิตจางในบริบทของการเขียนโปรแกรมเชิงหน้าที่?
รูปแบบการออกแบบยุทธวิธี DDD ส่วนใหญ่อยู่ในกรอบความคิดเชิงวัตถุและแบบจำลองโลหิตจางอธิบายถึงสถานการณ์เมื่อตรรกะทางธุรกิจทั้งหมดถูกนำไปใช้ในการบริการมากกว่าวัตถุจึงทำให้เป็น DTO กล่าวอีกนัยหนึ่งแบบจำลองโลหิตจางเป็นคำพ้องความหมายของรูปแบบกระบวนการซึ่งไม่แนะนำสำหรับแบบจำลองที่ซับซ้อน ฉันไม่ได้มีประสบการณ์มากในการเขียนโปรแกรมฟังก์ชั่นที่บริสุทธิ์ แต่ฉันต้องการที่จะรู้ว่า DDD เหมาะสมกับกระบวนทัศน์ของ FP หรือไม่และยังมีคำว่า อัปเดต : หนังสือและวิดีโอที่เผยแพร่ล่าสุดเมื่อไม่นานมานี้ในหัวเรื่อง

7
วิธีที่ต้องการในการจัดเก็บการกำหนดค่าแอปพลิเคชันคืออะไร?
ส่วนใหญ่ฉันเก็บการกำหนดค่าแอปพลิเคชันการพัฒนาในไดเรกทอรีรากของโครงการเช่นนี้ app |-- config.json แต่นั่นไม่ได้เป็นวิธีที่ดีที่สุดเนื่องจากการกำหนดค่านี้จะถูกเก็บไว้ในระบบควบคุมเวอร์ชัน - อาจส่งผลให้เกิดการรั่วไหลของชื่อผู้ใช้รหัสผ่านและข้อมูลที่ละเอียดอ่อนอื่น ๆ คู่มือแนะนำแอพ 12 Factorแนะนำให้วางไฟล์กำหนดค่าโดยรวมและใช้ตัวแปรสภาพแวดล้อมสำหรับการตั้งค่า: ... เก็บ config ในตัวแปรสภาพแวดล้อม Env vars สามารถเปลี่ยนแปลงได้ง่ายระหว่าง Deploys โดยไม่ต้องเปลี่ยนรหัสใด ๆ ต่างจากไฟล์ปรับแต่งมีโอกาสน้อยที่จะถูกตรวจสอบลงในรหัสซื้อคืนโดยไม่ได้ตั้งใจ และแตกต่างจากไฟล์ปรับแต่งที่กำหนดเองหรือกลไกการกำหนดค่าอื่น ๆ เช่นคุณสมบัติระบบ Java พวกเขาเป็นมาตรฐานภาษาและระบบปฏิบัติการไม่เชื่อเรื่องพระเจ้า ฟังดูดีสำหรับฉันจริง ๆ แต่ร้านใดร้านหนึ่งพูดว่าตัวแปรสภาพแวดล้อมโดยไม่ตรวจสอบสิ่งเหล่านั้นลงในการควบคุมแหล่งที่มา? และเครื่องมือใดที่ฉันสามารถใช้เพื่อส่งตัวแปรเหล่านั้นไปยังแอป สามารถมีตัวเลือกการกำหนดค่าได้หลายสิบตัวและพิมพ์ด้วยมือทุกครั้งที่คุณเปิดแอปไม่ดี - ดังนั้นจึงต้องเก็บไว้ในไฟล์บางประเภท ไฟล์ดังกล่าวจะจบลงในการควบคุมแหล่งและเรากลับไปที่ที่เราเริ่ม มีวิธีจัดการตัวเลือกการกำหนดค่าที่ยอมรับกันโดยทั่วไปหรือไม่ซึ่งไม่มีความเสี่ยงในการจัดเก็บการกำหนดค่าท้องถิ่นในการควบคุมแหล่งที่มา?

7
ฉันควรมีการทดสอบหน่วยสำหรับข้อบกพร่องที่รู้จักหรือไม่?
หากรหัสของฉันมีข้อบกพร่องที่ทราบซึ่งควรได้รับการแก้ไข แต่ยังไม่และจะไม่ได้รับการแก้ไขสำหรับรุ่นปัจจุบันและอาจไม่ได้รับการแก้ไขในอนาคตอันใกล้หากมีการทดสอบหน่วยที่ล้มเหลวสำหรับข้อบกพร่องนั้นใน ชุดทดสอบ? ถ้าฉันเพิ่มการทดสอบหน่วยมันจะล้มเหลว (ชัดเจน) และการชินกับการทดสอบที่ล้มเหลวดูเหมือนจะเป็นความคิดที่ไม่ดี ในทางกลับกันถ้ามันเป็นข้อบกพร่องที่รู้จักกันและมีกรณีความล้มเหลวที่รู้จักกันมันก็แปลกที่จะทำให้มันออกจากชุดทดสอบตามที่ควรจะได้รับการแก้ไขในบางจุดและการทดสอบที่มีอยู่แล้ว
37 unit-testing  tdd 

4
LPCTSTR คืออะไร
สิ่งที่เป็นLPCTSTRและLPCTSTRเหมือน (เช่นHDC) และสิ่งที่มันไม่ยืน?
37 c++  windows 

1
C ++ 11 รวม std :: stoi ทำไมไม่ std :: itos?
ฉันสังเกตเห็นถึงความยินดีที่ C ++ 11 มีstd::sto@ตระกูลของฟังก์ชั่นสำหรับการเปิด ints / floats / longs อย่างง่ายดายจากสตริง อย่างไรก็ตามฉันก็แปลกใจว่าสิ่งที่ตรงกันข้ามไม่ได้ดำเนินการ เหตุใดคณะกรรมการมาตรฐานจึงไม่รวมstd::itosตระกูลของหน้าที่ในการย้ายจาก ints / float / อะไรก็ตาม (back) ไปเป็น strings?
37 c++  parsing  strings  c++11 

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

5
จะอธิบายการเปลี่ยนแปลงทางสถาปัตยกรรมที่ทำลายมาตรฐานของ REST ได้อย่างไร?
ฉันเสนอการเปลี่ยนแปลงโครงการซอฟต์แวร์ที่ได้รับการออกแบบมาไม่ดีนักซึ่งมีปัญหามากมาย ในระดับสูงโครงการใช้ Angular บน front-end และใช้ REST APIs ต่างๆ ซึ่งเป็นสิ่งที่ยอดเยี่ยม (ฉันไม่เห็นความจำเป็นในการเปลี่ยนแปลงเทคโนโลยีหรือเครื่องมือของเรา) ปัญหาคือรหัสฐานมีขนาดใหญ่กว่าใน API มากกว่าฝั่งเซิร์ฟเวอร์ ตรรกะทางธุรกิจส่วนใหญ่อาศัยอยู่ใน UI ด้วย REST APIs ที่เป็นอินเตอร์เฟสฐานข้อมูล CRUD อย่างง่ายไปยังเลเยอร์ UI ตัวอย่างเช่น POST ให้กับลูกค้าจะสร้างระเบียนลูกค้าในขณะที่ PUT จะแก้ไขลูกค้ารายนั้น ไม่มากและไม่มากน้อย อย่างไรก็ตามตรรกะทางธุรกิจของเรานั้นมีความต้องการมากกว่านั้น กระบวนการทั่วไปในการสร้างลูกค้านั้นค่อนข้างมากกว่าการแทรก 1 บันทึกฐานข้อมูล มันจะจัดเตรียมข้อมูลในตารางที่จำเป็นอื่น ๆ ทำการตรวจสอบความถูกต้องและการคำนวณบางอย่าง ฯลฯ ฉันต้องการทำการเรียก POST / PUT หนึ่งครั้งเพื่อสรุปพฤติกรรมทั้งหมดนี้เพื่อลดภาระของลูกค้าที่บริโภค ดังนั้นมุมมองของฉันคือว่า orchestration ที่ครอบคลุมนี้ควรมีชีวิตอยู่บนเซิร์ฟเวอร์ (ที่เรามีการควบคุมเต็มรูปแบบบันทึก ฯลฯ ) ไม่ใช่ UI …

2
ไฟล์ CSV UTF-8 ควรมี BOM (เครื่องหมายคำสั่งซื้อแบบไบต์) หรือไม่
ของเราซอฟแวร์สายของธุรกิจที่จะช่วยให้ผู้ใช้สามารถบันทึกข้อมูลบางอย่างเป็นCSV เนื่องจากมีรูปแบบที่แตกต่างกันจำนวนมาก (ทั้งหมดเรียกว่า "CSV") ที่ใช้งานอยู่ใน wild เราจึงต้องตัดสินใจว่า "รูปแบบเริ่มต้น" ควรเป็นอย่างไร เกี่ยวกับสาย / แยกสนามและหนีออกมามีความเป็นมาตรฐานที่เราสามารถใช้: RFC 4180 เกี่ยวกับการเข้ารหัสข้อความUTF-8ดูเหมือนว่าจะเกิดขึ้นในทศวรรษที่ผ่านมาเป็น "รูปแบบไฟล์ข้อความเริ่มต้น" ดังนั้นเราจะใช้มัน คำถามหนึ่งที่เปิดค้างอยู่คือ: เราควรเพิ่มBOMในช่วงเริ่มต้นหรือไม่? ฉันได้อ่านความคิดเห็นและข้อดี / ข้อเสียหลายประการเกี่ยวกับการใช้ BOM โดยทั่วไปแล้ว แต่มีคำแนะนำ "เป็นทางการ" หรืออย่างน้อยฉันทามติชุมชนบางประการเกี่ยวกับการใช้ BOM ในไฟล์ CSV หรือไม่

3
เมื่อออกแบบระบบเป็นวิธีปฏิบัติที่ดีที่สุดในการรองรับการออกแบบรอบกรอบที่คุณจะใช้หรือไม่?
เมื่อพัฒนาระบบหรือแอพพลิเคชั่นที่คุณวางแผนที่จะใช้กับเฟรมเวิร์กบางอย่างมันเป็นการปฏิบัติที่ดีที่สุดในการออกแบบระบบโดยไม่ต้องมีเฟรมเวิร์กในใจหรือดีกว่าในการออกแบบระบบด้วยความคิด ด้วยสิ่งนี้".

7
การสร้างวัตถุด้วยพารามิเตอร์ null ในการทดสอบหน่วยตกลงหรือไม่
ฉันเริ่มเขียนการทดสอบหน่วยสำหรับโครงการปัจจุบันของฉัน ฉันไม่ได้มีประสบการณ์กับมันจริงๆ ฉันต้องการ "รับ" อย่างสมบูรณ์ดังนั้นฉันจึงไม่ใช้เฟรมเวิร์ก IoC หรือไลบรารีที่เยาะเย้ย ฉันสงสัยว่ามีอะไรผิดปกติหรือเปล่ากับการให้อาร์กิวเมนต์ที่เป็นโมฆะแก่ตัวสร้างวัตถุในการทดสอบหน่วย ให้ฉันให้รหัสตัวอย่าง: public class CarRadio {...} public class Motor { public void SetSpeed(float speed){...} } public class Car { public Car(CarRadio carRadio, Motor motor){...} } public class SpeedLimit { public bool IsViolatedBy(Car car){...} } แต่อีกตัวอย่างรหัสรถยนต์ (TM) ได้ลดเหลือเพียงบางส่วนที่สำคัญสำหรับคำถาม ตอนนี้ฉันเขียนการทดสอบแบบนี้: public class SpeedLimitTest { public …

7
การใช้“ ใหม่” ในตัวสร้างไม่ดีเสมอหรือไม่
ฉันได้อ่านว่าการใช้ "ใหม่" ในคอนสตรัคเตอร์ (สำหรับวัตถุอื่นที่ไม่ใช่วัตถุที่มีค่าอย่างง่าย) นั้นเป็นวิธีที่ไม่ดีเนื่องจากทำให้การทดสอบหน่วยเป็นไปไม่ได้ เนื่องจากฉันไม่ได้มีประสบการณ์จริงในการทดสอบหน่วยฉันพยายามรวบรวมกฎที่ฉันจะเรียนรู้ก่อน นอกจากนี้นี่เป็นกฎที่ใช้ได้โดยทั่วไปไม่ว่าจะใช้ภาษาใด

8
การเพิ่มประเภทส่งคืนไปยังวิธีการอัปเดตเป็นการละเมิด“ หลักการความรับผิดชอบเดี่ยว” หรือไม่?
ฉันมีวิธีที่อัปเดตข้อมูลพนักงานในฐานข้อมูล Employeeชั้นจะไม่เปลี่ยนรูปเพื่อ "ปรับปรุง" วัตถุหมายถึงจริงยกตัวอย่างวัตถุใหม่ ฉันต้องการให้Updateวิธีการส่งคืนอินสแตนซ์ใหม่Employeeด้วยข้อมูลที่อัปเดต แต่เนื่องจากตอนนี้ฉันสามารถพูดได้ว่าความรับผิดชอบของวิธีนี้คือการอัปเดตข้อมูลพนักงานและการดึงข้อมูลจากฐานข้อมูลเป็นEmployeeวัตถุใหม่มันละเมิดหลักการความรับผิดชอบเดี่ยวหรือไม่ มีการอัปเดตระเบียน DB เอง จากนั้นวัตถุใหม่จะถูกสร้างอินสแตนซ์เพื่อแสดงระเบียนนี้

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