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

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

6
มีรูปแบบการออกแบบเพื่อลบความต้องการตรวจสอบค่าสถานะหรือไม่
ฉันจะบันทึกส่วนของข้อมูลสตริงในฐานข้อมูล ฉันมีการกำหนดค่าระดับโลกสองแบบ: การเข้ารหัส การอัด สิ่งเหล่านี้สามารถเปิดใช้งานหรือปิดการใช้งานโดยใช้การกำหนดค่าในลักษณะที่เปิดใช้งานเพียงอย่างเดียวเท่านั้นทั้งสองถูกเปิดใช้งานหรือทั้งสองอย่างถูกปิดใช้งาน การใช้งานปัจจุบันของฉันคือ: if (encryptionEnable && !compressEnable) { encrypt(data); } else if (!encryptionEnable && compressEnable) { compress(data); } else if (encryptionEnable && compressEnable) { encrypt(compress(data)); } else { data; } ฉันกำลังคิดเกี่ยวกับลวดลายมัณฑนากร มันเป็นตัวเลือกที่ถูกต้องหรืออาจเป็นทางเลือกที่ดีกว่า

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

6
การใช้ฐานข้อมูลเชิงสัมพันธ์เทียบกับอ็อบเจ็กต์ JSON สำหรับข้อมูลเหตุการณ์ / กิจกรรม
ฉันกำลังทำงานในโครงการที่ฉันพยายามตัดสินใจระหว่างการใช้ฐานข้อมูลเชิงสัมพันธ์ SQL มาตรฐานหรือวัตถุ JSON เพื่อเก็บข้อมูลเกี่ยวกับเหตุการณ์หรือกิจกรรม โครงการจะจัดเก็บข้อมูลในประเภทเหตุการณ์หลายประเภทดังนั้นฉันได้ตัดสินใจที่จะอธิบายเพียงหนึ่งประเภทเหตุการณ์สำหรับคำถามนี้ เหตุการณ์ดนตรีสด (อธิบายแบบเต็มโดยใช้สคีมา JSON ที่ด้านล่างของคำถามนี้) เป็นวัตถุที่เก็บข้อมูลเช่นสถานที่ที่จะจัดกิจกรรมเวลา / วันที่ของเหตุการณ์และค่าใช้จ่ายของเหตุการณ์ วัตถุเหตุการณ์ดนตรีสดมีทั้งแบบหนึ่งต่อหนึ่ง (เหตุการณ์ -> ชื่อเหตุการณ์ -> คำอธิบาย) และแบบตัวต่อตัว (เหตุการณ์ -> สถานที่จัดงาน, กิจกรรม -> วันที่, กิจกรรม -> ประเภทตั๋ว ) ความสัมพันธ์ นอกจากนี้วัตถุเหตุการณ์สามารถมีหนึ่งรหัสนักแสดงหรือมากกว่าซึ่งลิงก์ไปยังวัตถุนักแสดง วัตถุนักแสดงจัดเก็บข้อมูลเกี่ยวกับนักดนตรีที่กำลังแสดงในการแสดงดนตรีสด ข้อมูลจะถูกสอบถามโดยผู้ใช้ที่ใช้ง่าย ("Find me events with 'x' name") และ complex ("Find me events ด้วยแนวเพลง 'x' และ 'y' ภายในรัศมี …
28 design  sql  json 

2
จำเป็นต้องมีการต่ออายุใบอนุญาต MIT ใน GitHub ทุกต้นปีหรือไม่?
ฉันใช้ MIT ใบอนุญาตในทุกโครงการGitHub ของฉัน บรรทัดที่สองพูดว่า 2013 ที่ด้านบน สำหรับการมีลิขสิทธิ์ที่จะถือในอนาคต (เช่นหลังจากปี 2013) จะต้องมีการเปลี่ยนแปลงในแต่ละปีหรือมันจะดีเหมือนเดิม? ฉันจะเพิ่มแก้ไขหรือทิ้งมันไว้ตามเดิมหรือไม่? The MIT License (MIT) Copyright (c) 2013 Aseem Bansal <aseembansal@ymail.com> //Rest of the MIT LICENSE

8
C # Generics - วิธีการหลีกเลี่ยงวิธีการซ้ำซ้อน?
สมมติว่าฉันมีสองคลาสที่มีลักษณะเช่นนี้ (บล็อกแรกของรหัสและปัญหาทั่วไปเกี่ยวข้องกับ C #): class A { public int IntProperty { get; set; } } class B { public int IntProperty { get; set; } } คลาสเหล่านี้ไม่สามารถเปลี่ยนแปลงได้ แต่อย่างใด (เป็นส่วนหนึ่งของการประชุมของบุคคลที่สาม) ดังนั้นฉันไม่สามารถทำให้พวกเขาใช้อินเทอร์เฟซเดียวกันหรือสืบทอดคลาสเดียวกันที่จะมี IntProperty ฉันต้องการใช้ตรรกะบางอย่างกับIntPropertyคุณสมบัติของทั้งสองคลาสและใน C ++ ฉันสามารถใช้คลาสเทมเพลตเพื่อทำสิ่งนั้นได้อย่างง่ายดาย: template <class T> class LogicToBeApplied { public: void T CreateElement(); }; template <class T> T …
28 c#  generics 

11
เมื่อฉันทดสอบความแตกต่างในเวลาระหว่างการเลื่อนและการคูณใน C ไม่มีความแตกต่าง ทำไม?
ฉันได้รับการสอนแล้วว่าการขยับเป็นเลขฐานสองนั้นมีประสิทธิภาพมากกว่าการคูณด้วย 2 ^ k ดังนั้นฉันต้องการทดสอบและฉันใช้รหัสต่อไปนี้เพื่อทดสอบ: #include <time.h> #include <stdio.h> int main() { clock_t launch = clock(); int test = 0x01; int runs; //simple loop that oscillates between int 1 and int 2 for (runs = 0; runs < 100000000; runs++) { // I first compiled + ran it a few …

8
อะไรคือข้อดีของการพัฒนาด้วยเทคโนโลยีที่ล้าสมัย? [ปิด]
พื้นหลังเล็กน้อย : ฉันทำงานที่ บริษัท ใหญ่โดยใช้ Windows XP และการเข้ารหัส Winforms ใน VB6 / VB.Net และ WebForms บางส่วนใน VB.Net (รหัสบำรุงรักษา 95%) ฉันมีหน้าจอขนาด 4: 3 19 "หนึ่ง Windows รุ่นใหม่ที่ทันสมัยกว่านี้ไม่ได้เกิดขึ้นเร็ว ๆ นี้ไม่มีเสียงกรีนฟิลด์ใด ๆ ทำงานตามเสียงของมัน! ฉันไม่ได้บอกอะไรเกี่ยวกับสิ่งนี้เมื่อฉันเข้าร่วม บริษัท ฉันเข้าใจผิดว่าฉันจะทำงานกับเทคโนโลยีและกรอบการทำงานที่ทันสมัยมากขึ้น ฉันมีประสบการณ์ที่ทันสมัยมากขึ้นจากงานก่อนหน้านี้ทั้งกับกรอบการทำงานที่ทันสมัยและภาษาการเขียนโปรแกรมอื่น ๆ และเมื่อฉันติดต่อกับเพื่อนนักพัฒนาจาก บริษัท อื่น ๆ ทั้งหมดที่ฉันได้ยินคือพวกเขาใช้เฟรมเวิร์ก ASP MVC ล่าสุดหรือ Vagrant / Ruby on Rails / etc …
28 skills  legacy 

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

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

4
ภาษาการเขียนโปรแกรมกำหนดฟังก์ชั่นอย่างไร
ภาษาการเขียนโปรแกรมกำหนดและบันทึกฟังก์ชัน / วิธีอย่างไร ฉันกำลังสร้างภาษาการเขียนโปรแกรมตีความใน Ruby และฉันพยายามคิดวิธีการประกาศใช้ฟังก์ชั่น แนวคิดแรกของฉันคือการบันทึกเนื้อหาของการประกาศในแผนที่ ตัวอย่างเช่นถ้าฉันทำสิ่งที่ชอบ def a() { callSomething(); x += 5; } จากนั้นฉันจะเพิ่มรายการลงในแผนที่ของฉัน: { 'a' => 'callSomething(); x += 5;' } ปัญหานี้คือว่ามันจะกลายเป็นแบบเรียกซ้ำเพราะฉันจะต้องเรียกparseวิธีการของฉันบนสตริงซึ่งจะโทรparseอีกครั้งเมื่อพบdoSomethingและจากนั้นฉันก็จะหมดพื้นที่สแต็คในที่สุด ดังนั้นภาษาที่ตีความจะจัดการกับสิ่งนี้ได้อย่างไร

3
ทำไมไม่ใส่คำอธิบายประกอบพารามิเตอร์ฟังก์ชั่น?
เพื่อให้คำถามนี้ตอบได้สมมติว่าค่าใช้จ่ายของความคลุมเครือในใจของโปรแกรมเมอร์นั้นแพงกว่าการกดแป้นพิเศษเล็กน้อย ระบุว่าทำไมฉันจะอนุญาตให้เพื่อนร่วมทีมของฉันหนีไปโดยไม่ใส่หมายเหตุประกอบพารามิเตอร์ฟังก์ชันของพวกเขา ใช้โค้ดต่อไปนี้เป็นตัวอย่างของสิ่งที่อาจเป็นโค้ดที่ซับซ้อนกว่านี้: let foo x y = x + y ตอนนี้การตรวจสอบอย่างรวดเร็วของคำแนะนำเครื่องมือจะแสดงให้คุณเห็นว่า F # ได้พิจารณาแล้วว่าคุณต้องการให้ x และ y เป็น ints ถ้านั่นคือสิ่งที่คุณตั้งใจไว้ทุกอย่างก็ดี แต่ฉันไม่รู้ว่านั่นคือสิ่งที่คุณต้องการหรือไม่ จะเกิดอะไรขึ้นถ้าคุณสร้างรหัสนี้เพื่อเชื่อมสองสายเข้าด้วยกัน หรือถ้าฉันคิดว่าคุณอาจหมายถึงการเพิ่มคู่? หรือถ้าฉันไม่ต้องการเลื่อนเมาส์ไปเหนือพารามิเตอร์ฟังก์ชันทุกตัวเพื่อกำหนดประเภทของมัน ตอนนี้ใช้ตัวอย่างนี้: let foo x y = "result: " + x + y ตอนนี้ F # สมมติว่าคุณตั้งใจจะเชื่อมสตริงดังนั้น x และ y จึงถูกนิยามเป็นสตริง อย่างไรก็ตามในฐานะที่เป็น schmuck ที่ไม่ดีที่รักษารหัสของคุณฉันอาจดูที่นี่และสงสัยว่าบางทีคุณอาจต้องการเพิ่ม x และ …
28 f#  parameters 

3
มันถือว่าเป็นแนวปฏิบัติที่ไม่ดีในการเพิ่มตรรกะใน setter คุณสมบัติหรือไม่?
ฉันเพิ่มเข้าไปในโครงการและเห็นว่าผู้พัฒนารายอื่นกำลังเพิ่มตรรกะจำนวนมากใน setters ของคุณสมบัติที่สังเคราะห์ ฉันเข้าใจว่ามันใช้งานได้อย่างไร แต่ฉันคิดว่ามันยากที่จะเข้าใจการไหลของโปรแกรม ในขณะที่อ่านรหัสเมื่อใดก็ตามที่ฉันเห็นself.something = whateverฉันมักจะตรวจสอบว่าsomethingsetter ของถูกแทนที่ ความคิดเห็นของคุณเกี่ยวกับหัวข้อนี้คืออะไร? คุณคิดว่านี่เป็นสัญลักษณ์ของสถาปัตยกรรมที่ไม่ดีหรือวิธีการแก้ปัญหาที่ซับซ้อนหรือไม่? ฉันยินดีที่จะอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ถ้าคุณมีลิงค์ / แหล่งข้อมูลที่เกี่ยวข้องมันยากเกินไปที่จะรับผลลัพธ์ google ที่ดีดังนั้นฉันจึงตัดสินใจถามที่นี่เช่นกัน ขอบคุณสำหรับคำตอบใด ๆ และโปรดทราบว่าฉันกำลังพูดถึงวัตถุประสงค์ C ในกรณีที่คุณไม่ได้เห็นแท็ก (แม้ว่านี่จะไม่เป็นปัญหาเฉพาะภาษาที่ฉันเดา)

1
คำอธิบายตัวชี้เฟรม
ในชุด MIPSมีการลงทะเบียนสำหรับตัวชี้สแต็กและการลงทะเบียนอีกครั้งสำหรับตัวชี้เฟรม ตัวชี้เฟรมคืออะไรและมีจุดประสงค์อะไร? มันแตกต่างจากตัวชี้สแต็คอย่างไร
28 assembly  stack 

4
โฮสติ้งรหัสความรู้เป็นศูนย์? [ปิด]
จากการเปิดเผยเมื่อเร็ว ๆ นี้เกี่ยวกับการตรวจสอบข้อมูลที่จัดเก็บโดยผู้ให้บริการออนไลน์ของรัฐบาลอย่างกว้างขวาง บริการ zero-knowledge คือบริการที่เก็บข้อมูลทั้งหมดที่เข้ารหัสด้วยคีย์ที่ไม่ได้จัดเก็บไว้บนเซิร์ฟเวอร์ การเข้ารหัสและถอดรหัสเกิดขึ้นที่ฝั่งไคลเอ็นต์และเซิร์ฟเวอร์ไม่เคยเห็นข้อมูลธรรมดาหรือกุญแจ เป็นผลให้ผู้ให้บริการไม่สามารถถอดรหัสและให้ข้อมูลกับบุคคลที่สามได้แม้ว่าจะต้องการ เพื่อให้ตัวอย่าง: SpiderOakสามารถดูเป็น Dropbox เวอร์ชันที่ไม่มีความรู้ ในฐานะโปรแกรมเมอร์เราวางใจอย่างมากและไว้วางใจข้อมูลที่ละเอียดอ่อนที่สุดของเรา - รหัสของเรา - สำหรับผู้ให้บริการออนไลน์ในระดับหนึ่ง ๆ : ผู้ให้บริการโฮสติ้งรหัส (เช่น Bitbucket, Assembla และอื่น ๆ ) แน่นอนว่าฉันกำลังพูดถึงที่เก็บส่วนตัวที่นี่ - แนวคิดของศูนย์ความรู้ไม่มีประโยชน์สำหรับที่เก็บสาธารณะ คำถามของฉันคือ: มีอุปสรรคทางเทคโนโลยีใด ๆ ในการสร้างบริการโฮสติ้งโค้ดที่ไม่มีความรู้หรือไม่ ตัวอย่างเช่นมีบางอย่างเกี่ยวกับโปรโตคอลเครือข่ายที่ใช้โดยระบบควบคุมเวอร์ชันยอดนิยมเช่น SVN, Mercurial หรือ Git ที่จะทำให้มันยาก (หรือเป็นไปไม่ได้) ในการนำรูปแบบการสื่อสารข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์มาเข้ารหัสด้วย กุญแจสำคัญที่เซิร์ฟเวอร์ไม่รู้ วันนี้มีบริการโฮสติ้งโค้ดที่ไม่มีความรู้หรือไม่?

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

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