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

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

6
อะไรคือความแตกต่างระหว่างคลาสนามธรรมอินเตอร์เฟสและเวลาที่จะใช้
เมื่อเร็ว ๆ นี้ฉันเริ่มคลุมหัวของฉันรอบ ๆ OOP และตอนนี้ฉันมาถึงจุดที่ยิ่งฉันอ่านความแตกต่างระหว่างคลาสนามธรรมและอินเทอร์เฟซมากเท่าไหร่ฉันก็ยิ่งสับสนมากขึ้น จนถึงตอนนี้ไม่สามารถยกตัวอย่างได้ อินเทอร์เฟซเป็นพิมพ์เขียวโครงสร้างมากขึ้นหรือน้อยลงที่กำหนดโครงกระดูกและบทคัดย่อต่างกันโดยสามารถใช้โค้ดบางส่วนได้ ฉันต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสิ่งเหล่านี้ผ่านสถานการณ์เฉพาะของฉัน นี่คือลิงค์ไปยังคำถามแรกของฉันหากคุณต้องการข้อมูลพื้นฐานเพิ่มเติมเล็กน้อย: โมเดลการออกแบบที่ดีสำหรับคลาสใหม่ของฉันคืออะไร นี่คือสองคลาสที่ฉันสร้าง: class Ad { $title; $description $price; function get_data($website){ } function validate_price(){ } } class calendar_event { $title; $description $start_date; function get_data($website){ //guts } function validate_dates(){ //guts } } ดังนั้นอย่างที่คุณเห็นคลาสเหล่านี้เกือบจะเหมือนกัน ไม่ได้แสดงที่นี่ แต่มีฟังก์ชั่นอื่น ๆlike get_zip(), save_to_database()ที่มีร่วมกันข้ามชั้นเรียนของฉัน ฉันยังได้เพิ่มคลาสรถยนต์และสัตว์เลี้ยงอื่น ๆ ซึ่งมีวิธีการทั่วไปและคุณสมบัติของหลักสูตรเฉพาะสำหรับคลาสเหล่านั้น (เช่นระยะทางน้ำหนักและอื่น …

1
การตอบสนองที่เหมาะสมสำหรับส่วนที่เหลือ REST - บันทึกใหม่เต็มหรือเพียงแค่ค่ารหัสบันทึก?
ฉันกำลังสร้าง REST API ที่อนุญาตให้มีการแทรก (POST ไม่ใช่ idempotent) และอัปเดต (PUT, idempotent) เพื่อเพิ่ม / อัปเดตฐานข้อมูลไปยังแอปพลิเคชันของเรา ฉันสงสัยว่ามีมาตรฐานหรือแนวปฏิบัติที่ดีที่สุดเกี่ยวกับข้อมูลที่เราส่งกลับไปยังลูกค้าในการตอบสนองสำหรับการดำเนินการ POST (แทรก) เราจำเป็นต้องส่งกลับอย่างน้อยค่าบันทึก ID (เช่นบันทึกใหม่ของคุณคือบันทึก # 1234) เราควรตอบสนองกับวัตถุเต็มหรือไม่? (เช่นโดยพื้นฐานแล้วคำตอบเดียวกับที่พวกเขาได้รับกลับมาจากคำขอ "GET / object_type / 1234") เราควรตอบสนองด้วยค่า ID ใหม่เท่านั้นหรือไม่ (เช่น "{id: 1234}" ซึ่งหมายความว่าหากพวกเขาต้องการที่จะดึงข้อมูลทั้งหมดพวกเขาจำเป็นต้องทำคำขอ HTTP GET เพิ่มเติมเพื่อคว้าบันทึกทั้งหมด) ส่วนหัวเปลี่ยนเส้นทางชี้ไปที่ URL สำหรับวัตถุเต็มหรือไม่ มีอะไรอีกบ้าง?
15 rest 

6
ฉันจะพัฒนาทักษะของฉันในขณะทำงานในโครงการจริงได้อย่างไรหากไม่มีนักพัฒนาที่มีประสบการณ์มากกว่านี้ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันเป็นผู้นำในการพัฒนา บริษัท ขนาดเล็กที่ทำงานร่วมกับ C # และ ASP.Net ทีมของเรามีขนาดเล็ก 2-3 คนไม่มีประสบการณ์มากในการพัฒนาและออกแบบ ฉันไม่มีโอกาสที่จะเรียนรู้จากนักพัฒนาอาวุโสมากขึ้นไม่มีใครในทีมของฉันที่จะแนะนำฉันและช่วยฉันเลือกวิธีที่ดีที่สุดเนื่องจากฉันดูแลโครงการส่วนใหญ่ด้วยตนเอง ฉันจะพัฒนาทักษะการพัฒนาซอฟต์แวร์ของฉันในขณะทำงานในโครงการจริงได้อย่างไรหากไม่มีนักพัฒนาที่มีประสบการณ์มากกว่านี้

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

6
เราควรแยกรหัสสำหรับการวิเคราะห์ความครอบคลุมรหัสหรือไม่
ฉันทำงานกับแอพพลิเคชั่นหลายตัว ปัจจุบันการครอบคลุมโค้ดของพวกเขาค่อนข้างต่ำ: โดยทั่วไประหว่าง 10 และ 50% ตั้งแต่หลายสัปดาห์เราได้พูดคุยกับทีมงานบังกาลอร์ (ส่วนหลักของการพัฒนาในต่างประเทศในอินเดีย) เกี่ยวกับการยกเว้นแพคเกจหรือคลาสสำหรับ Cobertura (เครื่องมือครอบคลุมรหัสของเราแม้ว่าเราจะย้ายไปที่ JaCoCo) มุมมองของพวกเขามีดังต่อไปนี้เนื่องจากพวกเขาจะไม่เขียนการทดสอบหน่วยใด ๆ ในบางเลเยอร์ของแอปพลิเคชัน(1)เลเยอร์เหล่านี้ควรแยกออกจากการวัดความครอบคลุมของรหัส ในคำพูดของคนอื่น ๆ ที่พวกเขาต้องการที่จะ จำกัด การวัดความคุ้มครองรหัสเพื่อรหัสที่มีการทดสอบหรือควรจะทดสอบ นอกจากนี้เมื่อพวกเขาทดสอบหน่วยการเรียนสำหรับคลาสที่ซับซ้อนประโยชน์ที่ได้รับซึ่งล้วน แต่ครอบคลุมในเรื่องการครอบคลุมโค้ดนั้นจะไม่ถูกสังเกตเห็นในแอปพลิเคชันขนาดใหญ่ การลดขอบเขตของการครอบคลุมโค้ดจะทำให้ความพยายามในลักษณะนี้ชัดเจนยิ่งขึ้น ... ที่น่าสนใจของวิธีนี้คือการที่เราจะมีมาตรการคุ้มครองรหัสที่บ่งชี้ว่าสถานะปัจจุบันของส่วนหนึ่งของโปรแกรมที่เราพิจารณาเป็นทดสอบ อย่างไรก็ตามมุมมองของฉันคือเรากำลังแกล้งทำตัวเลข โซลูชันนี้เป็นวิธีที่ง่ายในการเข้าถึงระดับการครอบคลุมโค้ดที่สูงขึ้นโดยไม่ต้องใช้ความพยายามใด ๆ อีกประเด็นหนึ่งที่ทำให้ฉันรำคาญใจคือ: ถ้าเราแสดงความครอบคลุมที่เพิ่มขึ้นจากหนึ่งสัปดาห์ไปอีกหนึ่งสัปดาห์เราจะบอกได้อย่างไรว่าข่าวดีนี้เกิดจากการทำงานที่ดีของนักพัฒนาหรือเกิดจากการยกเว้นใหม่ นอกจากนี้เราจะไม่สามารถทราบได้อย่างชัดเจนถึงสิ่งที่ถูกพิจารณาในการวัดความครอบคลุมโค้ด ตัวอย่างเช่นถ้าฉันมี 10,000 เส้นของการประยุกต์ใช้รหัสที่มี 40% ของความคุ้มครองรหัสผมสามารถหักค่าใช้จ่ายที่ 40% ของฐานรหัสของฉันมีการทดสอบ(2) แต่จะเกิดอะไรขึ้นถ้าเราตั้งค่าการยกเว้น หากรหัสครอบคลุมอยู่ในขณะนี้ 60% ฉันจะหักอะไรได้แน่ มีการทดสอบ 60% ของรหัสฐาน "สำคัญ" ของฉันหรือไม่ ฉันสามารถ เท่าที่ฉันเป็นห่วงฉันชอบที่จะรักษาคุณค่าของรหัส "ของจริง" …

7
ทำไมไม่ยอมรับการเปลี่ยนแปลงที่ไม่ได้แก้ไข?
ใน VCS แบบดั้งเดิมฉันสามารถเข้าใจได้ว่าทำไมคุณถึงไม่ยอมส่งไฟล์ที่ไม่ได้แก้ไขเพราะคุณสามารถทำลายบิลด์ อย่างไรก็ตามฉันไม่เข้าใจว่าทำไมคุณไม่ควรส่งไฟล์ที่ไม่ได้แก้ไขใน DVCS (บางไฟล์จะป้องกันไม่ให้คุณส่งไฟล์) แต่ฉันคิดว่าที่เก็บของคุณควรถูกล็อคจากการผลักและดึงแต่ไม่ได้กระทำ ความสามารถในการส่งมอบระหว่างกระบวนการผสานมีข้อดีหลายประการ (ดังที่ฉันเห็น): การเปลี่ยนแปลงที่เกิดขึ้นจริงรวมอยู่ในประวัติศาสตร์ หากการรวมมีขนาดใหญ่มากคุณสามารถทำสัญญาเป็นระยะได้ หากคุณทำผิดพลาดมันจะง่ายกว่ามากในการย้อนกลับ (โดยไม่ต้องทำซ้ำการผสานทั้งหมด) ไฟล์อาจยังคงถูกตั้งค่าสถานะเป็นไม่ได้แก้ไขจนกว่าจะมีการทำเครื่องหมายว่าแก้ไขแล้ว สิ่งนี้จะป้องกันการผลัก / ดึง คุณอาจจะมีชุดของเซ็ตการแก้ไขทำหน้าที่เป็นผสานแทนที่จะเป็นชุดเดียว git rerereนี้จะช่วยให้คุณยังคงใช้เครื่องมือเช่น เหตุใดจึงมีการส่งไฟล์ที่ไม่ได้รับการแก้ไข / ป้องกัน? มีเหตุผลอื่นนอกเหนือจากประเพณีหรือไม่?

6
เหตุใดการเขียนโปรแกรมขั้นสูง (XP) จึงล้าสมัยเพื่อ Agile, Kanban และอื่น ๆ
ฉันชอบ XP (การเขียนโปรแกรมขั้นสูง) โดยเฉพาะอย่างยิ่งส่วนที่มีโปรแกรมเมอร์ 2 คนที่หน้าจอเดียวกันเนื่องจากวิธีแก้ปัญหามักจะพบได้เร็วขึ้นหากคุณเพียงอธิบายว่าคุณกำลังทำอะไรและจับคู่การเขียนโปรแกรมบังคับให้คุณอธิบายสิ่งที่คุณ การทำ ในช่วง 10 ปีที่ผ่านมารูปแบบการทำงานของ XP ดูเหมือนจะล้าสมัยไปแล้วเนื่องจากวิธีการทำงาน: Agile และ / หรือ Kanban ทำไม? ตั้งแต่ XP ดูเหมือนว่าฉันจะเป็นวิธีที่ดีมากในการทำงานและเป็นจำนวนมากเกี่ยวกับการเขียนโปรแกรมในขณะที่ Agile และ Kanban เป็นมากกว่าเกี่ยวกับกระบวนการ

3
การเตรียมตัวสำหรับความท้าทายที่ปิดกั้น [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา เพียงไม่กี่วันที่ผ่านมาผมค้นพบCodilityและผมพยายามที่ท้าทายของพวกเขา และฉันต้องบอกว่า ฉันได้รับแผ่นหลัง ฉันไม่แน่ใจว่าปัญหาคืออะไร แต่ฉันจะเลียแผลของฉันและรอวิธีแก้ปัญหาที่จะออกมาและเปรียบเทียบกับของฉันเอง ในระหว่างนี้ฉันต้องการเตรียมพร้อมสำหรับความท้าทายต่อไปดังนั้นฉันจึงอ่านโพสต์บล็อกก่อนหน้านี้และดูวิธีแก้ปัญหาก่อนหน้า มีสิ่งใหม่มากมายที่ฉันไม่เคยได้ยินเหมือน (ต้นไม้คาร์ทีเซียนอัลกอริทึมการเรียงลำดับต่างๆ ฯลฯ ) ดังนั้นหนึ่งจะเตรียมสำหรับความท้าทายดังกล่าว (โดยเฉพาะอย่างยิ่ง O (x) เวลาและความซับซ้อนของพื้นที่) ฉันควรอ่านอะไรเพื่อเตรียมพร้อมสำหรับงานดังกล่าว
15 skills 

5
ภาษาโปรแกรมล่าสุดสำหรับ AI หรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ไม่กี่ทศวรรษที่ผ่านมาการเขียนโปรแกรมภาษาของทางเลือกสำหรับ AI เป็นอย่างใดอย่างหนึ่งเปิดฉากหรือLISP , และอื่น ๆ อีกสองสามคนที่ไม่ได้เป็นที่รู้จักกันเป็นอย่างดี ส่วนใหญ่ออกแบบมาก่อนยุค 70 การเปลี่ยนแปลงเกิดขึ้นมากมายในหลาย ๆ โดเมนเฉพาะภาษา แต่ในโดเมน AI มันไม่ได้โผล่ขึ้นมามากเหมือนในเว็บภาษาหรือสคริปต์เฉพาะเป็นต้น มีภาษาโปรแกรมล่าสุดที่มีจุดประสงค์เพื่อเปลี่ยนเกมใน AI และเรียนรู้จากความไม่เพียงพอของภาษาเดิมหรือไม่?

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

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

7
การเขียนโปรแกรมเทียบกับการวางแผน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว เมื่อเร็ว ๆ นี้ฉันได้รับมอบหมายงานการวางแผนระดับสูงให้มากขึ้นเนื่องจากหัวหน้าทีมของฉันออกเดินทาง ฉันเกลียดการวางแผนระยะยาว สมองของฉันดูเหมือนจะไม่มีสายตามธรรมชาติและฉันก็ไม่สนใจที่จะใช้เวลาในการเรียนรู้ (มันยากพอที่จะติดตามด้านการเขียนโปรแกรมของรูปภาพ) สามารถเป็นโปรแกรมเมอร์ที่ดีได้หรือไม่หากไม่ได้เป็นนักวางแผนระดับสูง ในฐานะโปรแกรมเมอร์อาวุโสคนหนึ่งคาดว่าจะเก่งในการวางแผนผลิตภัณฑ์ทั้งหมดและเลือกวันที่เสร็จสมบูรณ์หรือไม่

10
ระดับต่อไปของสิ่งที่เป็นนามธรรมคืออะไร? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา เนื่องจากภาษาการเขียนโปรแกรมในขั้นต้นใช้เพียงบรรทัดของโค้ดที่ดำเนินการตามลำดับและมันได้พัฒนาไปสู่การรวมฟังก์ชั่นซึ่งเป็นหนึ่งในระดับแรกของนามธรรมและจากนั้นคลาสและวัตถุจะถูกสร้างขึ้นเพื่อนามธรรม ระดับต่อไปของสิ่งที่เป็นนามธรรมคืออะไร? มีอะไรที่เป็นนามธรรมมากกว่าชั้นเรียนหรือยังมีอีกบ้าง?

7
ใน C และ C ++ วิธีการใดที่สามารถป้องกันการใช้งานมอบหมาย (=) โดยไม่ได้ตั้งใจโดยที่จำเป็นต้องมีความเท่าเทียมกัน (==)
ใน C และ C ++ มันง่ายมากที่จะเขียนโค้ดต่อไปนี้พร้อมกับข้อผิดพลาดร้ายแรง char responseChar = getchar(); int confirmExit = 'y' == tolower(responseChar); if (confirmExit = 1) { exit(0); } ข้อผิดพลาดคือคำสั่ง if ควรได้รับ: if (confirmExit == 1) ดังที่เขียนไว้มันจะออกทุกครั้งเนื่องจากการกำหนดconfirmExitตัวแปรเกิดขึ้นจากนั้นconfirmExitจะถูกใช้เป็นผลลัพธ์ของการแสดงออก มีวิธีที่ดีในการป้องกันข้อผิดพลาดประเภทนี้หรือไม่?

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

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