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

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

5
วิธีทดสอบหน่วยฟังก์ชันที่ปรับโครงสร้างรูปแบบกลยุทธ์ใหม่แล้วหรือไม่
ถ้าฉันมีฟังก์ชั่นในรหัสของฉันที่จะไป: class Employee{ public string calculateTax(string name, int salary) { switch (name) { case "Chris": doSomething($salary); case "David": doSomethingDifferent($salary); case "Scott": doOtherThing($salary); } } โดยปกติฉันจะ refactor นี้เพื่อใช้ Ploymorphism โดยใช้คลาสโรงงานและรูปแบบกลยุทธ์: public string calculateTax(string name) { InameHandler nameHandler = NameHandlerFactory::getHandler(name); nameHandler->calculateTax($salary); } ตอนนี้ถ้าฉันใช้ TDD ฉันก็จะมีการทดสอบบางอย่างที่ทำงานกับต้นฉบับcalculateTax()ก่อนที่จะทำการรีแฟคเตอร์ อดีต: calculateTax_givenChrisSalaryBelowThreshold_Expect111(){} calculateTax_givenChrisSalaryAboveThreshold_Expect111(){} calculateTax_givenDavidSalaryBelowThreshold_Expect222(){} calculateTax_givenDavidSalaryAboveThreshold_Expect222(){} calculateTax_givenScottSalaryBelowThreshold_Expect333(){} calculateTax_givenScottSalaryAboveThreshold_Expect333(){} …

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

3
OAuth2 โฟลว์ - เซิร์ฟเวอร์ตรวจสอบความถูกต้องกับเซิร์ฟเวอร์ Auth หรือไม่
ฉันอ่านมากเกี่ยวกับ OAuth2 พยายามที่จะเอาหัวไปรอบ ๆ แต่ฉันก็ยังสับสนอยู่ดี ฉันเข้าใจว่าลูกค้าอนุญาตกับผู้ให้บริการ OAuth (Google เป็นต้น) และอนุญาตให้เซิร์ฟเวอร์ทรัพยากรสามารถเข้าถึงข้อมูลโปรไฟล์ของผู้ใช้ได้ จากนั้นไคลเอ็นต์สามารถส่งโทเค็นการเข้าถึงไปยังเซิร์ฟเวอร์ทรัพยากรและได้รับกลับทรัพยากร แต่สิ่งที่ดูเหมือนจะไม่ครอบคลุมในเอกสารใด ๆ คือสิ่งที่เกิดขึ้นเมื่อแอปไคลเอนต์ถามเซิร์ฟเวอร์ทรัพยากรเพื่อหาทรัพยากรและส่งผ่านโทเค็นการเข้าถึง ทุกสิ่งที่ฉันได้อ่านมาจนถึงตอนนี้ระบุว่าเซิร์ฟเวอร์ทรัพยากรเพิ่งตอบสนองกับทรัพยากรที่ร้องขอ แต่ดูเหมือนว่าจะเป็นช่องโหว่ขนาดใหญ่เซิร์ฟเวอร์ทรัพยากรจะต้องตรวจสอบโทเค็นการเข้าถึงมิฉะนั้นฉันสามารถปลอมคำขอเก่า ๆ และส่งโทเค็นเก่าที่ถูกขโมยปลอมหรือสุ่มและมันก็จะยอมรับมัน ทุกคนสามารถชี้ให้ฉันได้อย่างง่ายดายที่จะทำตามคำอธิบายของ OAuth2 เพราะจนถึงตอนที่ฉันได้อ่านรู้สึกไม่สมบูรณ์
10 security  oauth2 

6
สิ่งใดที่คุณเรียกคลาสที่ไม่มีเมธอด
สิ่งใดที่คุณเรียกคลาสที่ไม่มีเมธอด ตัวอย่างเช่น, class A { public string something; public int a; } ด้านบนเป็นคลาสที่ไม่มีวิธีการใด ๆ คลาสประเภทนี้มีชื่อพิเศษหรือไม่?

5
TDD: เยาะเย้ยวัตถุที่อยู่ติดกันอย่างแน่นหนา
บางครั้งวัตถุก็จำเป็นต้องมีการรวมกันอย่างแน่นหนา ตัวอย่างเช่นCsvFileคลาสอาจต้องทำงานอย่างแน่นหนากับCsvRecordคลาส (หรือICsvRecordอินเทอร์เฟซ) อย่างไรก็ตามจากสิ่งที่ฉันได้เรียนรู้ในอดีตหนึ่งในหลักการสำคัญของการพัฒนาที่ขับเคลื่อนด้วยการทดสอบคือ "อย่าทดสอบมากกว่าหนึ่งคลาสในเวลาเดียวกัน" หมายความว่าคุณควรใช้ICsvRecordmocks CsvRecordหรือไม่สมบูรณ์มากกว่ากรณีที่แท้จริงของ อย่างไรก็ตามหลังจากลองใช้วิธีนี้ฉันสังเกตว่าการเยาะเย้ยในCsvRecordชั้นเรียนอาจทำให้ขนดกเล็กน้อย ซึ่งทำให้ฉันเป็นหนึ่งในสองข้อสรุป: ยากที่จะเขียนการทดสอบหน่วย! นั่นคือกลิ่นรหัส! ปรับปรุงโครงสร้าง! การเย้ยหยันการพึ่งพาอาศัยกันทุกครั้งนั้นไม่สมเหตุสมผล เมื่อฉันแทนที่ mocks ของฉันด้วยCsvRecordอินสแตนซ์ที่เกิดขึ้นจริงสิ่งต่าง ๆ เป็นไปอย่างราบรื่นมากขึ้น เมื่อมองไปรอบ ๆ สำหรับความคิดของคนอื่นฉันก็สะดุดกับโพสต์บล็อกนี้ซึ่งดูเหมือนจะสนับสนุน # 2 ข้างต้น สำหรับวัตถุที่อยู่คู่กันอย่างเป็นธรรมชาติเราไม่ควรกังวลกับการล้อเลียน ฉันจะออกนอกเส้นทาง? มีข้อเสียข้อสันนิษฐาน # 2 ข้างต้นหรือไม่ ฉันควรจะคิดเกี่ยวกับการปรับโครงสร้างการออกแบบใหม่หรือไม่?
10 tdd  coupling  mocking 

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

4
"ทีมศัลยกรรม" ของ Fred Brooks จัดการกับปัจจัยรถบัสได้อย่างมีประสิทธิภาพหรือไม่?
ทีมนักพัฒนาที่มีประสบการณ์ 4 คนของฉันทำงานบนแอพพลิเคชั่น Windows ขนาดใหญ่ (ประมาณ 200 KLoC) ฉันได้มุ่งเน้นไปที่ codebase หลักตั้งแต่จุดเริ่มต้นของโครงการ (3 ปีที่แล้ว) และค่อยๆเปลี่ยนไปสู่ตำแหน่งผู้พัฒนากึ่งนำแม้ว่าฉันไม่ใช่ผู้จัดการทีม การวนซ้ำปัจจุบันของเราคือการรีเฟรช UI ที่มีลำดับความสำคัญสูงที่ผู้บริหารระดับสูงร้องขอซึ่งเกี่ยวข้องกับการเปลี่ยนแปลงประมาณ 15 ครั้งในฐานข้อมูลหลัก เมื่อผู้จัดการถามฉันฉันคาดว่าการเปลี่ยนแปลงทั้ง 15 ครั้งจะใช้เวลาน้อยกว่าสี่ชั่วโมงกว่าจะเสร็จสมบูรณ์รวมน้อยกว่า 7 วันทำงาน ฉันอาสาไปทำงาน ผู้จัดการตัดสินใจที่จะแบ่งงานทั้ง 15 ให้กับนักพัฒนาทั้งสี่คนอย่างเท่าเทียมกัน ในสามวันนับตั้งแต่เราเริ่มทำงานฉันได้สังเกตสองสิ่ง: สมาชิกในทีมที่ไม่มีประสบการณ์คนอื่น ๆ ทำภารกิจอย่างน้อย 1 อย่างให้เสร็จ กฎหมายของ Brook ใช้งานได้ : ฉันใช้เวลาประมาณครึ่งหนึ่งในการให้ความช่วยเหลือ (พยายามสอนพวกเขาเกี่ยวกับการใช้ส่วนประกอบ) เป็นผลให้ฉันทำงาน 2 อย่างด้วยตัวเองแทนที่จะเป็น 5 หรือ 6 อย่างที่คาดไว้ ฉันเข้าหาผู้จัดการด้วยความกังวลว่าเรามาช้าและแนะนำอีกครั้งว่าฉันทำภารกิจที่เหลือให้เสร็จ คำขอของฉันถูกปฏิเสธอย่างสุภาพและเหตุผลที่กล่าวไว้ในการแบ่งโหลดอย่างเท่าเทียมกันนั้นเป็นสองเท่า: จำกัดปัจจัยรถบรรทุก …

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

4
ฉันจะให้ผู้ใช้ที่ไม่ระบุชื่อส่งข้อบกพร่องในโครงการ GitHub ส่วนตัวได้อย่างไร
บริษัท ของเรามีที่เก็บ GitHub ส่วนตัวสำหรับโครงการที่ฉันกำลังดำเนินการ หลังจากการทำงานในช่วงฤดูร้อนที่ผ่านมาดูเหมือนว่าเราจะเปิดตัวในสัปดาห์นี้ (wheee!) อย่างไรก็ตามฉันต้องการรวมลิงก์ "ส่งข้อผิดพลาด" ในโปรแกรมที่นำไปสู่แบบฟอร์มที่ซึ่งผู้ใช้สามารถกรอกแบบฟอร์มที่กลายเป็นปัญหาสำหรับเราใน GitHub Googling around ยังไม่พบวิธีแก้ปัญหา (หรือคนที่มีปัญหาเดียวกัน) เป็นไปได้หรือไม่ (ผ่าน API บางตัว) หรือฉันจะต้องป้อนบั๊กที่ผู้ใช้รายงานด้วยตนเอง

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

1
แนวคิดมันหมายความว่าอย่างไรเมื่อมีการกล่าวว่าแต่ละเธรดได้รับสแต็กของตัวเอง?
ฉันได้อ่านJava Concurrency ในทางปฏิบัติโดย Brian Goetz และในส่วนStack Confinementมีการกล่าวถึงว่าแต่ละเธรดได้รับสแต็กของตัวเองและตัวแปรในเครื่องจึง จำกัด อยู่ภายในเธรดที่กำลังดำเนินการ มีอยู่ในเธรดที่กำลังเรียกใช้งานซึ่งไม่สามารถเข้าถึงได้กับเธรดอื่น เขาหมายความว่าอะไรที่แต่ละเธรดมีสแตกการเรียกใช้ของตนเอง

2
HTTPS เพียงพอที่จะหลีกเลี่ยงการโจมตีซ้ำหรือไม่
ฉันกำลังเปิดเผยวิธี REST สองสามรายการบนเซิร์ฟเวอร์สำหรับแอปมือถือ ฉันต้องการหลีกเลี่ยงที่ผู้ใช้สามารถดมกลิ่นวิธีการสร้าง HTTP (จากแอพมือถือ) แล้วส่งไปยังเซิร์ฟเวอร์อีกครั้ง ตัวอย่าง: แอพมือถือส่งคำขอ ผู้ใช้ใช้พรอกซีและสามารถตรวจสอบสิ่งที่เกิดขึ้นในเครือข่าย ผู้ใช้เห็นและบันทึกคำขอที่มือถือเพิ่งส่ง => ตอนนี้ฉันไม่ต้องการให้ผู้ใช้ส่งคำขอนั้นด้วยตนเอง การรักษาความปลอดภัยเซิร์ฟเวอร์ผ่าน HTTPS เพียงพอหรือไม่
10 api  https 

2
ฉันจะร่างเรื่องราวของผู้ใช้ในฐานะนักพัฒนาได้อย่างไร
ฉันกำลังเขียนระบบที่ทั้งเจ้าของระบบและตัวฉันเองเป็นผู้พัฒนาและปัจจุบันเราเป็นแหล่งเดียวของ 'คำขอ' หรือข้อกำหนดสำหรับระบบซึ่งฉันต้องการรวบรวมเรื่องราวของผู้ใช้ที่เชื่อมโยงกับคุณลักษณะ {1} ความสำคัญเร่งด่วนของฉันในตอนนี้คือการได้รับงานในมือเป็นจำนวนมาก ฉันจะไปเกี่ยวกับระดับของข้อมูลทางเทคนิคที่ฉันคุ้นเคยกับการทำงานกับเรื่องราวของผู้ใช้อย่างไรซึ่งไม่ควรเป็นเรื่องเทคนิคเกินไป {1} ฉันกำลังประเมินบริการการจัดการโครงการเปรียวTargetProcessและเรื่องราวของผู้ใช้แต่ละคนต้องเชื่อมโยงกับคุณลักษณะหลัก ระบบดูเหมือนว่าเหมาะสมดีดังนั้นข้อ จำกัด เล็ก ๆ นี้เป็นสิ่งที่ฉันอยากทำงานมากกว่าที่จะหลีกเลี่ยง

3
จะจัดการไฟล์ลิขสิทธิ์ได้อย่างไรเมื่อรวมรหัสลิขสิทธิ์ GPL และ BSD
ฉันกำลังเขียนโค้ดที่ใช้หนึ่งในห้องสมุดที่มีจีพี (แอลจีไม่ได้) ใบอนุญาตและเป็นหนึ่งเดียวกับใบอนุญาต BSD 3 ข้อ เนื่องจากฉันลิงก์ไปยังไลบรารี่ที่มีลิขสิทธิ์ของ GPL รหัสของฉันจะต้องเป็น GPL เช่นกัน ในทางปฏิบัติฉันควรจัดการกับ LICENSE.txt ดั้งเดิมจากห้องสมุด BSD อย่างไร (A) ฉันสามารถเผยแพร่โครงการเพื่อให้ซอร์สโค้ดหลักเป็นลิขสิทธิ์แบบ GPL และจากนั้นไดเรกทอรีย่อยบางส่วนจะได้รับอนุญาต BSD หรือไม่ (B) หากฉันไม่เพียง แต่จะเชื่อมโยงไปยังห้องสมุด แต่เพื่อใช้และรวมรหัส BSD และ GPL ในลักษณะที่เกี่ยวข้องมากขึ้นจะทำอย่างไรกับ LICENSE.txt ข้อความ BSD 3 ข้อบอกว่า: "การแจกจ่ายรหัสต้นฉบับต้องเก็บประกาศลิขสิทธิ์ข้างต้นรายการเงื่อนไขนี้และข้อจำกัดความรับผิดชอบต่อไปนี้" เห็นได้ชัดว่าฉันควรเก็บประกาศลิขสิทธิ์และรายการเงื่อนไขไว้ที่ใดที่หนึ่ง แต่ฉันจะต้องใส่ txt-license ของ GPL ลงไปด้วย นอกจากนี้เห็นได้ชัดว่าฉันไม่จำเป็นต้องเก็บรักษา "การแจกจ่ายซ้ำและการใช้งานในแหล่งที่มาและรูปแบบไบนารีไม่ว่าจะมีหรือไม่มีการดัดแปลงจะต้องได้รับอนุญาตหากตรงตามเงื่อนไขต่อไปนี้:" ส่วนหนึ่งของข้อความลิขสิทธิ์ BSD รักษาส่วนอื่น ๆ ดังนั้นฉันควรใช้วิธีใดและไฟล์ข้อความใดในการจัดระเบียบข้อความลิขสิทธิ์ GPL …

2
JavaFX - วิธีที่เหมาะสมในการใช้คุณสมบัติกับวัตถุโดเมน
JavaFX ได้จัดทำวัตถุออบเจ็กต์ใหม่จำนวนมากเช่นjavafx.beans.property.DoublePropertyที่อนุญาตให้คุณกำหนดฟิลด์ที่สามารถสังเกตและซิงโครไนซ์ได้โดยอัตโนมัติ ในตัวอย่าง JFX หลายรุ่นคลาส MVC มีจำนวนฟิลด์คุณสมบัติเหล่านี้ซึ่งสามารถผูกเข้ากับมุมมองโดยอัตโนมัติ อย่างไรก็ตามสิ่งนี้ดูเหมือนจะเป็นการกระตุ้นให้เราใส่คุณสมบัติ JFX ลงในวัตถุโดเมนของเรา (ถ้าคุณคิดว่าคลาส Model จะเป็นวัตถุโดเมน) ซึ่งทำให้ฉันแยกความกังวลได้ไม่ดี (เช่นการใส่รหัส GUI ในโดเมน ) มีใครเคยเห็นปัญหานี้ได้รับการแก้ไขใน 'ชีวิตจริง' และถ้าเป็นเช่นนั้นมันทำอย่างไร?

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