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

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

5
การแฮ็ค JavaScript ในเบราว์เซอร์ทำได้ง่ายขนาดไหน?
คำถามของฉันเกี่ยวกับความปลอดภัย JavaScript ลองนึกภาพระบบการรับรองความถูกต้องที่คุณใช้เฟรมเวิร์ก JavaScript เช่นBackboneหรือAngularJSและคุณต้องการจุดปลายที่ปลอดภัย นั่นไม่ใช่ปัญหาเนื่องจากเซิร์ฟเวอร์มีคำสุดท้ายเสมอและจะตรวจสอบว่าคุณได้รับอนุญาตให้ทำสิ่งที่คุณต้องการหรือไม่ แต่ถ้าคุณต้องการความปลอดภัยเล็กน้อยโดยไม่ต้องเกี่ยวข้องกับเซิร์ฟเวอร์ล่ะ เป็นไปได้ไหม ตัวอย่างเช่นสมมติว่าคุณมีระบบการกำหนดเส้นทางฝั่งไคลเอ็นต์และคุณต้องการให้มีการป้องกันเส้นทางที่เป็นรูปธรรมสำหรับผู้ใช้ที่เข้าสู่ระบบ ดังนั้นคุณจึง ping เซิร์ฟเวอร์ถามว่าคุณได้รับอนุญาตให้เยี่ยมชมเส้นทางที่มีการป้องกันและคุณไป ปัญหาคือเมื่อคุณ ping เซิร์ฟเวอร์คุณจัดเก็บการตอบสนองในตัวแปรดังนั้นในครั้งต่อไปที่คุณไปเส้นทางส่วนตัวจะตรวจสอบว่าคุณเข้าสู่ระบบแล้ว (ไม่ ping ไปยังเซิร์ฟเวอร์) และขึ้นอยู่กับ ในการตอบสนองมันจะไปหรือไม่ ผู้ใช้สามารถปรับเปลี่ยนตัวแปรนั้นและเข้าถึงได้ง่ายแค่ไหน? ความรู้เกี่ยวกับความปลอดภัย (และ JavaScript) ของฉันไม่ได้ยอดเยี่ยม แต่ถ้าตัวแปรไม่ได้อยู่ในขอบเขตทั่วโลกและอยู่ในส่วนส่วนตัวของรูปแบบโมดูลซึ่งมีเพียง getters แต่ไม่ใช่ setters แม้ในกรณีนั้นคุณสามารถแฮ็คสิ่งนั้นได้หรือไม่

5
จะทำอย่างไรเมื่อคุณเผชิญกับงานเขียนโปรแกรมที่คุณไม่เคยทำ?
ฉันเริ่มต้นอาชีพด้วยการเป็นนักพัฒนา. NET 3 เดือนที่ผ่านมาและหลังจากแผนการฝึกอบรมที่ยาวนานเกี่ยวกับเทคโนโลยีที่หลากหลายรูปแบบและแนวคิดที่นักพัฒนาที่ดูแลฉันได้ตัดสินใจว่าฉันพร้อมที่จะเข้าร่วมหนึ่งในหลาย ๆ โครงการที่ บริษัท จัดการ ฉันตื่นเต้นมากที่ในที่สุดสามารถเริ่มการเข้ารหัสได้ ทีมที่ฉันเข้าร่วมนั้นค่อนข้างเล็กเพราะตอนนี้เริ่มต้นด้วยโครงการใหม่ซึ่งดีมากเพราะฉันได้มีส่วนร่วมในวงจรชีวิตทั้งหมดของโครงการ มันเป็นโครงการสปาบนเว็บที่ได้รับการสนับสนุนที่ใช้ ASP.NET MVC / ASP.NET Web API และ Front-end เฟรมเวิร์ก Durandal และไลบรารีที่เกี่ยวข้อง ปัญหาของฉันคือหลังจากที่มีการประชุมกับเพื่อนร่วมงานของฉันและการกำหนดงานและการประเมินสำหรับเดือนถัดไปฉันพบว่าตัวเองอยู่ในตำแหน่งที่ฉันไม่รู้ว่าฉันสามารถทำงานใด ๆ ได้หรือไม่ ฉันไม่เคยทำงานที่สร้างขึ้นมาก่อนและฉันไม่รู้ว่าฉันควรดำเนินการอย่างไร ตัวอย่างหนึ่งในภารกิจที่สร้างขึ้นคือการสร้างกลไกการจัดการข้อผิดพลาดทั่วไปสำหรับแอปพลิเคชันทั้งหมด ปกติแล้วจะดำเนินการอย่างไรเมื่อเผชิญกับงานที่เขาไม่เคยทำ?

3
ความแตกต่างระหว่าง REPL และเชลล์แบบโต้ตอบ
Noob คำถาม ฉันไม่สามารถบอกความแตกต่างระหว่างREPLและเชลล์เชิงโต้ตอบได้โดยการอ่านคำจำกัดความบน Wikipedia Wiki ตั้งข้อสังเกตว่า REPL เป็นเชลล์แบบโต้ตอบชนิดหนึ่งโดยเฉพาะ มันเป็นเซตย่อยที่เหมาะสมหรือไม่? คำจำกัดความของ Wiki ดูเหมือนว่าจะ จำกัด คำศัพท์ REPL เป็นภาษาที่เหมือนเสียงกระเพื่อมในขณะที่คุณสมบัติที่ระบุไม่ได้มีคุณสมบัติที่แตกต่างกันจริงๆ โดยเฉพาะอย่างยิ่งมันถูกต้องหรือไม่ที่จะโทรหา IPython a REPL?

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

8
ควรใช้ DAG (Directed Acyclic Graph) ในการเขียนโปรแกรมเมื่อใด
ฉันเพิ่งพบกรอบชื่อecto ในเฟรมเวิร์กนี้ส่วนประกอบพื้นฐานที่ชื่อว่า"พลาสม่า"ซึ่งเป็นกราฟเชิงเส้นกำกับของ ecto ใน ecto พลาสซึมสามารถดำเนินการได้โดยตัวจัดตารางเวลาของ ecto ฉันสงสัยว่ากลไกนี้มีประโยชน์อย่างไรและในสถานการณ์อื่นใดที่เราสามารถใช้ประโยชน์จากแนวคิดของ DAG ได้?

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

8
อะไรคือคำว่าซอร์สโค้ดที่ใหญ่มากที่คอมมิท [ปิด]
บางครั้งเมื่อเราตรวจสอบประวัติการกระทำของซอฟต์แวร์เราอาจเห็นว่ามีข้อผูกพันบางอย่างที่ใหญ่มาก - พวกเขาอาจเปลี่ยนไฟล์ 10 หรือ 20 ไฟล์ที่มีการเปลี่ยนแปลงหลายร้อยบรรทัดซอร์สโค้ด (เดลต้า) ฉันจำได้ว่ามีคำที่ใช้กันทั่วไปสำหรับการกระทำที่ยิ่งใหญ่ แต่ฉันจำไม่ได้ว่าคำนั้นคืออะไร มีใครช่วยฉันบ้าง อะไรคือคำที่ผู้เขียนโปรแกรมมักใช้เพื่ออ้างถึงการกระทำที่ยิ่งใหญ่และยักษ์ใหญ่? BTW มีการเปลี่ยนแปลงมากมายรวมกันเป็นแนวปฏิบัติที่ดีหรือไม่? ปรับปรุง: ขอบคุณพวกคุณสำหรับการสนทนาที่สร้างแรงบันดาลใจ! แต่ฉันคิดว่า "code bomb" เป็นคำที่ฉันกำลังมองหา

8
กลัวที่จะปล่อยโปรเจ็กต์งานอดิเรก - จะเอาชนะได้อย่างไร? [ปิด]
ฉันไม่รู้ว่าคำถามนี้เกี่ยวข้องกับการพัฒนาซอฟต์แวร์อย่างเคร่งครัดหรือไม่ แต่ฉันจะลองดู: เช่นเดียวกับโปรแกรมเมอร์จำนวนมากฉันชอบทำงานโครงการงานอดิเรก บางครั้งความคิดที่ดีดูเหมือนจะไม่ดีดังนั้นฉันจึงเลิกทำโครงการ แต่บางครั้งสิ่งที่มีประโยชน์ออกมาจากโครงการ ดังนั้นฉันจะปล่อยมันออกมานำเสนอสู่โลกใช่ไหม? ไม่ถูกต้อง. ยังไงก็เถอะฉันไม่สามารถทำขั้นตอนนี้ได้ ฉันกลัวว่ารหัสของฉันไม่ดีพอฉันมักจะคิดในสิ่งที่ไม่ดีคุณสมบัติที่สามารถเพิ่มได้ ดังนั้นฉันจะไม่ปล่อยอะไรเลยฉันหมดความสนใจและเมื่อถึงจุดหนึ่งก็ละทิ้งโครงการ เป็นเรื่องปกติหรือไม่ คุณจะเอาชนะสถานการณ์เช่นนี้ได้อย่างไร?

4
ทำไมรูปแบบการฉีดพึ่งพาไม่รวมอยู่ในแก๊งสี่
ทำไมรูปแบบฉีดพึ่งพาไม่ incluided ในแก๊งสี่ ? GOF ทำการทดสอบอัตโนมัติอย่างกว้างขวางล่วงหน้าหรือไม่? ตอนนี้การฉีดแบบพึ่งพานั้นถือเป็นรูปแบบหลักหรือไม่?

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

8
เมื่อใช้วิธีการผูกมัดฉันจะนำวัตถุมาใช้ใหม่หรือสร้างใหม่ได้หรือไม่
เมื่อใช้วิธีการผูกมัดเช่น: var car = new Car().OfBrand(Brand.Ford).OfModel(12345).PaintedIn(Color.Silver).Create(); อาจมีสองวิธี: ใช้วัตถุเดียวกันซ้ำดังนี้: public Car PaintedIn(Color color) { this.Color = color; return this; } สร้างวัตถุชนิดใหม่Carในทุกขั้นตอนดังนี้ public Car PaintedIn(Color color) { var car = new Car(this); // Clone the current object. car.Color = color; // Assign the values to the clone, not the original object. return …

11
'C' ใน MVC จำเป็นจริงๆหรือ
ฉันเข้าใจบทบาทของโมเดลและมุมมองในรูปแบบ Model-View-Controller แต่ฉันเข้าใจยากว่าเพราะเหตุใดคอนโทรลเลอร์จึงจำเป็น สมมติว่าเรากำลังสร้างโปรแกรมหมากรุกโดยใช้วิธี MVC สถานะของเกมควรเป็นแบบจำลองและ GUI ควรเป็นมุมมอง อะไรคือคอนโทรลเลอร์ในกรณีนี้? มันเป็นเพียงคลาสแยกต่างหากที่มีฟังก์ชั่นทั้งหมดที่จะถูกเรียกเมื่อคุณพูดคลิกที่ไทล์? ทำไมไม่เพียงทำทุกตรรกะบนตัวแบบในมุมมองของตัวเอง?

11
คนที่ทำ TDD จะจัดการกับการสูญเสียงานเมื่อทำ refactoring สำคัญได้อย่างไร
ในขณะที่ฉันพยายามเรียนรู้การเขียนการทดสอบหน่วยสำหรับรหัสของฉัน ตอนแรกฉันเริ่มต้นทำ TDD จริงซึ่งฉันจะไม่เขียนโค้ดใด ๆ จนกว่าฉันจะเขียนการทดสอบที่ล้มเหลวก่อน อย่างไรก็ตามฉันเพิ่งมีปัญหายุ่งยากในการแก้ปัญหาซึ่งเกี่ยวข้องกับรหัสจำนวนมาก หลังจากใช้เวลาสองสามสัปดาห์ในการเขียนแบบทดสอบและเขียนรหัสฉันก็พบกับข้อสรุปที่โชคร้ายว่าวิธีการทั้งหมดของฉันไม่ได้ไปทำงานและฉันจะต้องเลิกงานสองสัปดาห์แล้วเริ่มต้นใหม่อีกครั้ง นี่เป็นการตัดสินใจที่ไม่ดีพอเมื่อคุณเพิ่งเขียนโค้ด แต่เมื่อคุณเขียนการทดสอบหลายร้อยบทมันยิ่งยากขึ้นที่จะทิ้งมันไปหมด ฉันอดไม่ได้ที่จะคิดว่าฉันได้ลองใช้เวลา 3 หรือ 4 วันในการเขียนแบบทดสอบเมื่อฉันสามารถใส่รหัสเข้าด้วยกันเพื่อพิสูจน์แนวคิดแล้วเขียนการทดสอบหลังจากนั้นเมื่อฉันมีความสุขกับวิธีการของฉัน คนที่ฝึกฝน TDD รับมือกับสถานการณ์เช่นนี้ได้อย่างไร? มีกรณีสำหรับการดัดกฎในบางกรณีหรือคุณมักจะเขียนแบบทดสอบก่อนเสมอแม้ว่ารหัสนั้นอาจไร้ประโยชน์หรือไม่?
37 tdd  refactoring 

2
หลักฐานเชิงประจักษ์ของความนิยมของ Git และ Mercurial
ปี 2555! Mercurial และ Git ยังแข็งแกร่งอยู่ ฉันเข้าใจการแลกเปลี่ยนของทั้งสอง ฉันก็เข้าใจว่าทุกคนมีความชอบเหมือนกัน ไม่เป็นไร. ฉันกำลังมองหาข้อมูลเกี่ยวกับระดับการใช้งานของทั้งคู่ ตัวอย่างเช่นในstackoverflow.comการค้นหาGitทำให้คุณได้รับ 12000 เพลงMercurialทำให้คุณได้รับ 3000 Google Trendsกล่าวว่ามันเป็น 1.9: 1.0 สำหรับ Git ข้อมูลเชิงประจักษ์อื่นใดที่สามารถใช้ประมาณการการใช้สัมพัทธ์ของเครื่องมือทั้งสองได้
37 git  mercurial 

7
มันสมเหตุสมผลหรือไม่ที่จะสร้างมาตรฐานรวมถึงวันที่สร้างและวันที่อัปเดตล่าสุดในตารางฐานข้อมูลทั้งหมด
เจ้านายของฉันกำลังพยายามใช้มาตรฐานการพัฒนาบางอย่างกับทีมของเราดังนั้นเราจึงมีการประชุมเมื่อวานนี้เพื่อหารือเกี่ยวกับมาตรฐานซึ่งส่วนใหญ่จะเป็นไปด้วยดีจนกระทั่งเธอโตขึ้น: ตาราง DB ทั้งหมดจะมีคอลัมน์ CreatedDate และ LastUpdatedDate ซึ่งอัพเดตโดยทริกเกอร์ เมื่อมาถึงจุดนี้ทีมของเราได้รับความเห็นแตกต่าง ครึ่งหนึ่งของเราคิดว่าการทำเช่นนี้ในทุกตารางเป็นงานจำนวนมากที่มีผลประโยชน์น้อย (เราทำงานในโครงการที่มีงบประมาณ จำกัด ดังนั้นค่าใช้จ่ายใด ๆ มาจากผลกำไรของ บริษัท ของเรา) ครึ่งปีหลังเชื่อว่าจะช่วยได้ด้วยการสนับสนุนโครงการ ฉันมั่นในอดีตค่าย ในขณะที่ฉันชื่นชมว่าบางกรณีภายนอกจะทำให้คอลัมน์เพิ่มเติมเพื่อปรับปรุงการสนับสนุนในความคิดของฉันปริมาณงานที่จะต้องเพิ่มคอลัมน์ในสถานที่แรกเช่นเดียวกับการบำรุงรักษาจะทำให้เราใช้เวลาน้อยลง สิ่งสำคัญเช่นหน่วย - หรือการทดสอบโหลด นอกจากนี้ฉันค่อนข้างแน่ใจว่าคอลัมน์พิเศษเหล่านี้จะทำให้การใช้ ORM นั้นน่าอึดอัดใจมากขึ้นโดยที่เราใช้ C # และ Oracle เป็นหลักซึ่งไม่ค่อยมีความสุขที่ ORM เริ่มต้น ดังนั้นคำถามของฉันคือสองเท่า: ฉันอยู่ในค่ายที่ถูกต้องหรือไม่? ฉันไม่ได้อ้างว่ามีทักษะด้านฐานข้อมูลที่มีชื่อเสียงระดับโลกดังนั้นนี่อาจเป็นการเพิ่มได้อย่างง่ายดายโดยไม่มีผลข้างเคียงที่ไม่พึงประสงค์ คุณจะรับมือกับสถานการณ์ที่การประชุมเกี่ยวกับมาตรฐานต่าง ๆ กลายเป็นการแข่งขันที่ไม่เป็นท่า ฉันจะขายจริง ๆ ว่ามาตรฐานนี้จะไม่ช่วยเราในระยะยาวได้อย่างไร

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