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

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

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

6
คุณสามารถเปลี่ยนใบอนุญาตเมื่อคุณเลือกได้หรือไม่
ฉันกำลังทำงานกับผลิตภัณฑ์ที่ฉันไม่รู้สึกว่าพร้อมอย่างสมบูรณ์ แต่ฉันมีกลุ่มผู้ใช้ที่มีความสนใจที่จะใช้ผลิตภัณฑ์นี้ในฐานะผู้ทดสอบ "อัลฟา" ฉันต้องการให้ผลิตภัณฑ์ฟรีแก่พวกเขาในฐานะผู้ทดสอบ "alpha" แต่ฉันต้องการอนุญาตซอฟต์แวร์ในภายหลัง เป็นไปได้ไหม ใครสามารถชี้ให้ฉันไปที่ลิงก์ / หนังสือ / บทความ / ฯลฯ ขอบคุณ แก้ไข: เนื่องจากการขาดความชัดเจนของฉันและตอบคำถามฉันคิดว่าฉันควรเพิ่มคำสั่งนี้ ฉันยังไม่ได้ตัดสินใจว่าจะปิดโครงการหรือโอเพ่นซอร์สนี้หรือไม่ ฐานผู้ใช้ที่ต้องการจับมือพวกเขาทำให้ฉันประหลาดใจและฉันกังวลเกี่ยวกับตัวเลือกของฉันเท่าที่สามารถมอบให้พวกเขาตอนนี้เป็นโอเพ่นซอร์สและภายหลังเปลี่ยนเป็นโอเพ่นซอร์สหรือ ในทางกลับกัน ขอบคุณทุกคนที่ตอบและแสดงความคิดเห็น ฉันขอขอบคุณข้อมูลเชิงลึก
47 licensing 

22
วิธีปฏิบัติที่ดีก่อนที่จะตรวจสอบในซอร์สโค้ดคืออะไร [ปิด]
ทีมของฉันใช้ Team Foundation Server สำหรับการควบคุมแหล่งที่มาและวันนี้ฉันแก้ไขข้อบกพร่องและแอปพลิเคชันทดสอบควันก่อนที่ฉันจะตรวจสอบ แต่ฉันลืมที่จะแสดงความคิดเห็นรหัสบางอย่าง (รหัสนี้ทำให้ UI แปลกเล็กน้อย) ฉันต้องการทราบวิธีปฏิบัติที่ดีก่อนที่จะตรวจสอบรหัสใน - ฉันไม่ต้องการทำผิดประเภทนี้อีกครั้ง

9
อะไรคือข้อเสียของการเขียนโปรแกรมทดสอบครั้งแรก?
มันคือความโกรธในปัจจุบัน "ทุกคน" แนะนำให้มัน ในตัวของมันเองและทำให้ฉันสงสัย มีข้อเสียอะไรบ้างที่คุณพบเมื่อทำการพัฒนาแบบทดสอบก่อน ฉันกำลังมองหาประสบการณ์ส่วนตัวจากผู้ปฏิบัติงานที่มีความรู้ - ฉันสามารถอ่าน musings สมมุติของหนึ่งร้อย wannabes ที่อื่น ๆ บนอินเทอร์เน็ต ฉันถามไม่ได้เพราะฉันกำลังมองหาที่จะเกลียด TDD แต่เป็นหน้าที่ของฉันในการปรับปรุงกระบวนการพัฒนาซอฟต์แวร์และยิ่งเราสามารถเรียนรู้เกี่ยวกับปัญหาที่ผู้คนพบมากขึ้นโอกาสที่เราจะปรับปรุงกระบวนการดีขึ้น

20
ทำไมจำนวนโปรแกรมเมอร์ที่ดูเหมือนไม่สมส่วนก็ไม่ดี? [ปิด]
อาจเป็นเพียงประสบการณ์ส่วนตัวของฉัน แต่ฉันเชื่อมโยงกับกลุ่มและประเภทของผู้คนที่แตกต่างกันและดูเหมือนว่าฉันเป็นโปรแกรมเมอร์ที่ฉันพบเป็นร้อยละขนาดใหญ่ผิดปกติ "ไม่ดี" หรือสำหรับความพยายามที่ดีกว่านิยาม: วางตัว ต่อว่าต่อขาน ลบในวิธีที่พวกเขาพูดถึงผู้คน หากคุณสังเกตเห็นสิ่งเดียวกันทฤษฎีใดว่าเป็นเพราะอะไร คำแนะนำใด ๆ เกี่ยวกับวิธีการอย่างสุภาพหรือไม่สุภาพให้โปรแกรมเมอร์คนใดคนหนึ่งรู้ว่าพวกเขากำลังทำหน้าที่อย่างไรและแนะนำให้พวกเขาแก้ไขหากพวกเขาต้องการรับรู้ในฐานะมืออาชีพที่ต้องการทำงานด้วย? หรือบางทีฉันเพิ่งเจอตัวอย่างที่ไม่ดีและมีเมล็ดที่ไม่ดีในทุกกลุ่มของคนที่สามารถตั้งชื่อได้
47 teamwork 

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

10
ตัวแปรสถานะเป็นความชั่วร้ายหรือไม่? [ปิด]
ตัวแปรสถานะเป็นสิ่งชั่วร้ายหรือไม่? ตัวแปรต่อไปนี้มีความผิดศีลธรรมอย่างลึกซึ้งและเป็นสิ่งที่ชั่วร้ายหรือไม่ที่จะใช้มัน "ตัวแปรบูลีนหรือเลขจำนวนเต็มที่คุณกำหนดค่าในบางสถานที่จากนั้นลงมาด้านล่างคุณตรวจสอบแล้วใน orther ที่จะทำอะไรหรือไม่เช่นเช่นใช้newItem = trueแล้วบางบรรทัดด้านล่างif (newItem ) then" ฉันจำได้ว่าทำสองโครงการที่ฉันละเลยการใช้ค่าสถานะทั้งหมดและจบลงด้วยสถาปัตยกรรม / รหัสที่ดีขึ้น อย่างไรก็ตามมันเป็นวิธีปฏิบัติทั่วไปในโครงการอื่น ๆ ที่ฉันทำงานด้วยและเมื่อโค้ดเติบโตและมีการเพิ่มแฟล็ก IMHO code-spaghetti ก็จะโตขึ้นเช่นกัน คุณจะบอกว่ามีกรณีใดบ้างที่การใช้ค่าสถานะเป็นวิธีปฏิบัติที่ดีหรือจำเป็นหรือไม่หรือคุณยอมรับว่าการใช้ค่าสถานะในรหัสคือ ... ค่าสถานะสีแดงและควรหลีกเลี่ยง / refactored ฉันฉันเพิ่งได้รับโดยการทำฟังก์ชั่น / วิธีการที่ตรวจสอบสถานะในเวลาจริงแทน

5
ฉันควรใส่ฟังก์ชั่นที่ไม่เกี่ยวข้องกับคลาสได้ที่ไหน
ฉันกำลังทำงานในโครงการ C ++ ที่ฉันมีฟังก์ชั่นทางคณิตศาสตร์มากมายซึ่งตอนแรกฉันเขียนเพื่อใช้เป็นส่วนหนึ่งของชั้นเรียน ถึงแม้ว่าฉันจะเขียนโค้ดเพิ่มเติม แต่ฉันก็ตระหนักว่าฉันต้องการฟังก์ชันคณิตศาสตร์เหล่านี้ทุกที่ สถานที่ที่ดีที่สุดที่จะนำพวกเขาอยู่ที่ไหน สมมติว่าฉันมีสิ่งนี้: class A{ public: int math_function1(int); ... } และเมื่อฉันเขียนชั้นเรียนอื่นฉันไม่สามารถ (หรืออย่างน้อยฉันไม่รู้วิธี) ที่ใช้math_function1ในชั้นเรียนอื่นนั้น นอกจากนี้ฉันได้ตระหนักถึงฟังก์ชั่นบางอย่างที่ไม่เกี่ยวข้องกับคลาส A พวกเขาดูเหมือนจะเป็นจุดเริ่มต้น แต่ตอนนี้ฉันสามารถเห็นได้ว่าพวกเขาเป็นเพียงฟังก์ชันทางคณิตศาสตร์ การปฏิบัติที่ดีในสถานการณ์นี้คืออะไร? ตอนนี้ฉันได้คัดลอกพวกเขาไปสู่คลาสใหม่ซึ่งฉันแน่ใจว่าเป็นการปฏิบัติที่แย่ที่สุด
47 c++  functions  class 

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

10
การใช้ MVVM มีเงื่อนไขใดบ้าง
Model View-Model ได้รับการพัฒนาโดย Microsoft เพื่อกำหนดเป้าหมายแพลตฟอร์มการพัฒนา UI ซึ่งรองรับการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์โดยเฉพาะ Windows Presentation Foundation (WPF) และ Silverlight บนแพลตฟอร์ม. NET โดยใช้ภาษา XAML และ. NET ในหลายปีที่ผ่านมาเฟรมเวิร์ก Javascript จำนวนมากเช่น Angular, Knockout และ ExtJS ได้นำรูปแบบนี้มาใช้ เช่นเดียวกับรูปแบบซอฟต์แวร์ส่วนใหญ่ MVVM มีการใช้งานที่เหมาะสมและใช้ในทางที่ผิด การใช้ MVVM มีเงื่อนไขใดบ้าง เมื่อไรที่ไม่ควรทำ

2
Alan Kay หมายถึงอะไรโดย“ การมอบหมาย” ในประวัติศาสตร์ยุคแรกของ Smalltalk
ฉันได้อ่านประวัติต้นของสมอลล์ทอล์คและมีการกล่าวถึง "การมอบหมาย" สองสามอย่างซึ่งทำให้ฉันถามความเข้าใจเกี่ยวกับความหมายของมัน: แม้ว่า OOP มาจากแรงจูงใจหลายอย่าง แต่ก็เป็นศูนย์กลาง มาตราส่วนขนาดใหญ่คือการค้นหาโครงร่างโมดูลที่ดีกว่าสำหรับระบบที่ซับซ้อนที่เกี่ยวข้องกับการซ่อนรายละเอียดและมาตราส่วนขนาดเล็กคือการค้นหาการมอบหมายรุ่นที่ยืดหยุ่นมากขึ้นแล้วพยายามกำจัดมันทั้งหมด (จากปี1960-66 - OOP ยุคแรกและแนวคิดการก่อสร้างอื่น ๆ ของอายุหกสิบเศษมาตรา I) สิ่งที่ผมได้จาก Simula ก็คือว่าตอนนี้คุณสามารถใช้ทดแทนการผูกและการมอบหมายกับเป้าหมาย สิ่งสุดท้ายที่คุณต้องการให้โปรแกรมเมอร์ทำคือยุ่งกับสถานะภายในแม้ว่าจะถูกนำเสนอเป็นรูปเป็นร่าง แต่วัตถุที่ควรจะนำเสนอเป็นเว็บไซต์ของพฤติกรรมในระดับสูงที่เหมาะสมมากขึ้นเพื่อใช้เป็นส่วนประกอบแบบไดนามิก (... ) มันเป็นเรื่องที่โชคร้ายที่สิ่งที่เรียกว่า "การเขียนโปรแกรมเชิงวัตถุ" ในทุกวันนี้เป็นเพียงการเขียนโปรแกรมแบบเก่า ๆ โปรแกรมจำนวนมากถูกโหลดด้วยการดำเนินการ "สไตล์การมอบหมาย" ซึ่งขณะนี้ทำโดยขั้นตอนการเชื่อมต่อที่มีราคาแพงกว่า (จากสไตล์ "เชิงวัตถุ"ส่วนที่ IV) ฉันถูกต้องในการตีความเจตนาว่าวัตถุนั้นมีความหมายว่าเป็นส่วนหน้าและวิธีการใด ๆ (หรือ "ข้อความ") ที่มีวัตถุประสงค์เพื่อตั้งค่าตัวแปรอินสแตนซ์บนวัตถุ (เช่น "การมอบหมาย") เป็นการเอาชนะวัตถุประสงค์หรือไม่ การตีความนี้ดูเหมือนจะได้รับการสนับสนุนโดยสองข้อความในภายหลังในหัวข้อที่สี่: เทคนิคสี่อย่างที่ใช้ร่วมกัน - สถานะถาวร, พหุสัณฐาน, การสร้างอินสแตนซ์และวิธีการตามเป้าหมายสำหรับวัตถุ สิ่งเหล่านี้ไม่จำเป็นต้องใช้ "ภาษาเชิงวัตถุ" ซึ่ง ALGOL …

11
ความหมายของอะซิงโครนัส vs ซิงโครนัส [ปิด]
ความหมายของคำว่าอะไรคือสิ่งที่ไม่ตรงกันและซิงโครในสาขาวิทยาศาสตร์คอมพิวเตอร์? หากคุณ google ความหมายของคำที่คุณจะได้รับต่อไปนี้: Asynchronous: ไม่ได้ที่มีอยู่หรือเกิดขึ้นในเวลาเดียวกัน ซิงโคร: ที่มีอยู่หรือเกิดขึ้นในเวลาเดียวกัน แต่ดูเหมือนว่าพวกเขาจะใช้ในการถ่ายทอดความหมายตรงข้ามในการเขียนโปรแกรมหรือวิทยาศาสตร์คอมพิวเตอร์: คุณลักษณะ HTML asyncหมายความว่าสคริปต์จะถูกดำเนินการทันทีที่มีการดาวน์โหลดแม้ว่า HTML จะยังคงมีการแยกวิเคราะห์หรือดาวน์โหลดซึ่งหมายความว่าทั้งกระบวนการสคริปต์และ HTML นั้นมีอยู่และเกิดขึ้นพร้อมกันกับฉัน คำศัพท์เหล่านี้ใช้เพื่อถ่ายทอดความหมายตรงกันข้ามในวิทยาการคอมพิวเตอร์หรือฉันไม่มีจุดหรือไม่

3
ทำไมเรายังคงเติบโตสแต็คย้อนหลังได้
เมื่อทำการคอมไพล์รหัส C และดูแอสเซมบลีมันทั้งหมดจะมีสแต็กเติบโตแบบย้อนกลับดังนี้: _main: pushq %rbp movl $5, -4(%rbp) popq %rbp ret -4(%rbp)- หมายความว่าตัวชี้ฐานหรือตัวชี้สแต็คกำลังเคลื่อนย้ายที่อยู่หน่วยความจำแทนที่จะไปขึ้นหรือไม่? ทำไมถึงเป็นอย่างนั้น? ฉันเปลี่ยน$5, -4(%rbp)ไป$5, +4(%rbp)คอมไพล์และรันโค้ดและไม่มีข้อผิดพลาด เหตุใดเราจึงต้องย้อนกลับไปในหน่วยความจำสแต็ค
46 c  memory  assembly 

7
เกิดอะไรขึ้นกับข้อ จำกัด ของฐานข้อมูล
เมื่อฉันตรวจสอบโมเดลฐานข้อมูลสำหรับ RDBMS ฉันมักจะประหลาดใจที่พบข้อ จำกัด เพียงเล็กน้อยหรือไม่มีเลย (นอกเหนือจาก PK / FK) ตัวอย่างเช่นเปอร์เซ็นต์มักถูกเก็บไว้ในคอลัมน์ประเภทint(ในขณะที่tinyintจะเหมาะสมกว่า) และไม่มีCHECKข้อ จำกัด ในการ จำกัด ค่าให้อยู่ในช่วง 0..100 ในทำนองเดียวกันกับ SE.SE คำตอบที่แนะนำข้อ จำกัด การตรวจสอบมักจะได้รับความคิดเห็นที่แนะนำว่าฐานข้อมูลเป็นสถานที่ที่ไม่ถูกต้องสำหรับข้อ จำกัด เมื่อฉันถามเกี่ยวกับการตัดสินใจที่จะไม่บังคับใช้ข้อ จำกัด สมาชิกในทีมตอบว่า: พวกเขาไม่รู้ด้วยซ้ำว่ามีคุณสมบัติดังกล่าวอยู่ในฐานข้อมูลที่ชื่นชอบ เป็นที่เข้าใจได้จากโปรแกรมเมอร์ที่ใช้ ORM เท่านั้น แต่น้อยกว่ามากจาก DBA ที่อ้างว่ามีประสบการณ์มากกว่า 5 ปีกับ RDBMS ที่กำหนด หรือว่าพวกเขาบังคับใช้ข้อ จำกัด ดังกล่าวในระดับแอปพลิเคชันและการทำซ้ำกฎเหล่านั้นในฐานข้อมูลไม่ใช่ความคิดที่ดีละเมิด SSOT เมื่อเร็ว ๆ นี้ฉันเห็นโครงการมากขึ้นเรื่อย ๆ ซึ่งไม่ได้ใช้กุญแจต่างประเทศ ในทำนองเดียวกันฉันได้เห็นความคิดเห็นเล็กน้อยที่นี่ใน SE.SE ซึ่งแสดงให้เห็นว่าผู้ใช้ไม่สนใจการอ้างอิงที่สมบูรณ์มากนักทำให้แอปพลิเคชันจัดการกับมัน เมื่อถามทีมถึงทางเลือกที่จะไม่ใช้ FK …

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

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