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

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

16
คุณใช้เทคนิคง่ายๆอะไรในการปรับปรุงประสิทธิภาพ
ฉันกำลังพูดถึงวิธีที่เราเขียนกิจวัตรง่าย ๆ เพื่อปรับปรุงประสิทธิภาพโดยไม่ทำให้โค้ดของคุณอ่านยากขึ้นตัวอย่างเช่นนี่เป็นเรื่องปกติสำหรับเราที่ได้เรียนรู้: for(int i = 0; i < collection.length(); i++ ){ // stuff here } แต่ฉันมักจะทำสิ่งนี้เมื่อforeachไม่สามารถใช้ได้: for(int i = 0, j = collection.length(); i < j; i++ ){ // stuff here } ฉันคิดว่านี่เป็นวิธีที่ดีกว่าเพราะจะเรียกlengthวิธีการนี้เพียงครั้งเดียว ... แฟนของฉันบอกว่ามันเป็นความลับ มีเคล็ดลับง่าย ๆ ที่คุณใช้ในการพัฒนาของคุณเอง?

4
ทำไม JSX ถึงดีเมื่อสคริปต์ JSP ไม่ดี
React.js ให้ JSX เป็นไวยากรณ์ที่คล้ายกับ XHTML สำหรับสร้างโครงสร้างของส่วนประกอบและองค์ประกอบ JSX คอมไพล์กับ Javascript และแทนที่จะให้ลูปหรือเงื่อนไขใน JSX ที่เหมาะสมคุณใช้ Javascript โดยตรง: <ul> {list.map((item) => <li>{item}</li> )} </ul> สิ่งที่ฉันยังไม่สามารถอธิบายได้เป็นเพราะเหตุใดจึงถือว่าดีถ้าโครงสร้างแบบอะนาล็อกคล้ายคลึงกันถือว่าไม่ดีใน JSP บางอย่างเช่นนี้ใน JSP <ul> <% for (item in list) { %> <li>${item}</li> <% } %> </ul> <c:forEach>ถือเป็นปัญหาการอ่านจะได้รับการแก้ไขได้ด้วยแท็กเช่น เหตุผลที่อยู่เบื้องหลังแท็ก JSTL ก็ดูเหมือนว่าพวกเขาสามารถนำไปใช้กับ JSX: มันง่ายกว่าที่จะอ่านเมื่อคุณไม่สลับระหว่าง XHTML คล้ายไวยากรณ์ (วงเล็บมุม, การซ้อน) และ Java / …

5
OAuth2 ROPC vs Basic Auth สำหรับ REST API สาธารณะหรือไม่
กรณีการใช้งานเฉพาะที่ฉันสนใจที่นี่กำลังตรวจสอบสิทธิ์ลูกค้า REST กับจุดสิ้นสุดเซิร์ฟเวอร์ที่เปิดเผยต่อสาธารณะ (เช่น REST API สาธารณะ) ทางออกที่ง่ายที่สุดที่นี่คือการตรวจสอบสิทธิ์พื้นฐาน แต่ฉันมักจะได้ยิน OAuth2 โน้มน้าวว่าเป็นวิธีแก้ปัญหาที่ยอดเยี่ยมในเกือบทุกสถานการณ์ สิ่งที่เป็นประเภทการให้สิทธิ์ OAuth2 เพียงอย่างเดียวที่เป็นไปได้สำหรับลูกค้า REST ที่รับรองความถูกต้องกับเซิร์ฟเวอร์ REST คือข้อมูลประจำตัวของรหัสผ่านเจ้าของทรัพยากร (ROPC)เนื่องจากการให้รหัสและการให้สิทธิ์โดยปริยายต้องใช้ UI / หน้าเว็บ ผู้ใช้เพื่อเข้าสู่ระบบและอนุญาตแอปไคลเอ็นต์ด้วยตนเอง วิธีการทำงานของ ROPC คือการส่งชื่อผู้ใช้ / รหัสผ่านของเจ้าของทรัพยากรและรหัสลูกค้าเป็นพารามิเตอร์สตริงแบบสอบถาม ?!? นี่คือความปลอดภัยที่น้อยลง (IMHO) จากนั้น Auth พื้นฐานซึ่งฐานอย่างน้อย 64 เข้ารหัสข้อมูลประจำตัวและส่งภายในส่วนหัวซึ่ง TLS สามารถเข้ารหัสได้! ดังนั้นผมจึงถาม: ในบริบทของ API REST ประชาชนเป็น OAuth2 ROPC จริงๆดีกว่าตรวจสอบสิทธิ์พื้นฐาน? อะไรคือความปลอดภัยมากกว่า OAuth2 ROPC ปรับปรุง …
21 rest  oauth  https 

6
โดยทั่วไปแล้วควรใช้ฟังก์ชั่นเสมือนเพื่อหลีกเลี่ยงการแตกแขนงหรือไม่?
ดูเหมือนว่าจะมีคำสั่งที่เทียบเท่ากันอย่างคร่าว ๆ เพื่อแบ่งให้เท่ากันกับค่าใช้จ่ายของฟังก์ชั่นเสมือนสาขาพลาดมีการแลกเปลี่ยนที่คล้ายกัน: การเรียนการสอนเทียบกับแคชข้อมูลพลาด อุปสรรคการเพิ่มประสิทธิภาพ ถ้าคุณมองสิ่งที่ชอบ: if (x==1) { p->do1(); } else if (x==2) { p->do2(); } else if (x==3) { p->do3(); } ... คุณอาจมีฟังก์ชั่นสมาชิกอาร์เรย์หรือถ้ามีหลายฟังก์ชั่นขึ้นอยู่กับการจัดหมวดหมู่เดียวกันหรือมีการจัดหมวดหมู่ที่ซับซ้อนมากขึ้นให้ใช้ฟังก์ชั่นเสมือน: p->do() แต่โดยทั่วไปว่าราคาแพงมีหน้าที่เสมือน VS แตกแขนงมันเป็นเรื่องยากที่จะทดสอบบนแพลตฟอร์มพอที่จะพูดคุยเพื่อให้ผมสงสัยว่าถ้าคนใดคนหนึ่งมีกฎหยาบของนิ้วหัวแม่มือ (น่ารักถ้ามันเป็นง่ายๆเป็น 4 ifคือเบรกพอยต์) โดยทั่วไปแล้วฟังก์ชั่นเสมือนจะชัดเจนกว่าและฉันก็จะเอนไปทางพวกเขา แต่ฉันมีหลายส่วนที่สำคัญมากซึ่งฉันสามารถเปลี่ยนรหัสจากฟังก์ชั่นเสมือนเป็นสาขาได้ ฉันต้องการที่จะมีความคิดเกี่ยวกับเรื่องนี้ก่อนที่จะดำเนินการนี้ (ไม่ใช่การเปลี่ยนแปลงเล็กน้อยหรือง่ายต่อการทดสอบในหลาย ๆ แพลตฟอร์ม)
21 c++  performance 

4
ทำไมฉันต้องใช้ MSBuild แทนไฟล์ Visual Studio Solution
เรากำลังใช้ TeamCity เพื่อการรวมอย่างต่อเนื่องและมันกำลังสร้างการเผยแพร่ของเราผ่านทางไฟล์โซลูชัน (.sln) ฉันเคยใช้ Makefiles ในอดีตสำหรับระบบต่าง ๆ แต่ไม่เคย msbuild (ซึ่งฉันได้ยินมาว่า sorta เหมือนกับ Makefiles + XML mashup) ฉันเห็นโพสต์มากมายเกี่ยวกับวิธีใช้ msbuild โดยตรงแทนที่จะเป็นไฟล์โซลูชัน แต่ฉันไม่เห็นคำตอบที่ชัดเจนว่าทำไมต้องทำ เหตุใดเราจึงต้องกังวลเกี่ยวกับการย้ายจากไฟล์โซลูชันไปยัง 'ไฟล์' ของ MSBuild เรามีสองรุ่นที่แตกต่างกันโดย #define (สร้างความน่าเชื่อถือ) แต่ส่วนใหญ่แล้วทุกอย่างทำงานได้ ข้อกังวลที่ใหญ่กว่าคือตอนนี้เราต้องบำรุงรักษาสองระบบเมื่อเพิ่มโปรเจ็กต์ / ซอร์สโค้ด UPDATE: ผู้คนสามารถมองเห็นวงจรชีวิตและการทำงานร่วมกันขององค์ประกอบทั้งสามต่อไปนี้ได้หรือไม่? ไฟล์. sln ของ Visual Studio หลายระดับโครงการไฟล์. csproj (ซึ่งฉันเข้าใจสคริปต์ msbuild "sub") สคริปต์ msbuild ที่กำหนดเอง มันปลอดภัยหรือไม่ที่จะบอกว่า. sln และ. …

2
ขนาดของ stack และ heap ถูก จำกัด โดยระบบปฏิบัติการอย่างไร
หมายเหตุ : หากคุณต้องการพิจารณาระบบปฏิบัติการเฉพาะเพื่อให้สามารถตอบได้โปรดพิจารณา Linux เมื่อใดก็ตามที่ฉันเรียกใช้โปรแกรมก็จะได้รับพื้นที่หน่วยความจำเสมือนที่จะทำงานโดยมีพื้นที่สำหรับสแต็กและอีกหนึ่งสำหรับฮีปของมัน คำถามที่ 1 : ทำสแต็กและฮีปมีขีด จำกัด ขนาดคงที่ (เช่น 2 กิกะไบต์แต่ละตัว) หรือเป็นขีด จำกัด แบบไดนามิกนี้เปลี่ยนไปตามการจัดสรรหน่วยความจำในระหว่างการดำเนินการของโปรแกรม (เช่น 4 กิกะไบต์ทั้งหมดที่จะใช้โดย ทั้งสองอย่างดังนั้นหากโปรแกรมใช้สแต็คเพียงอย่างเดียวมันจะสามารถมีสแต็คที่มี 4 กิกะไบต์) คำถามที่ 2 : กำหนดวงเงินอย่างไร มันเป็นหน่วยความจำแรมทั้งหมดที่มีอยู่ไหม? คำถามที่ 3 : ส่วนข้อความ (รหัส) และส่วนข้อมูลมีข้อ จำกัด อย่างไร
21 linux  memory  stack  heap 

1
เวลา Noda เทียบกับเวลา Joda?
ในคู่มือผู้ใช้ Noda Timeหัวข้อเหตุผลระบุ: API สาธารณะส่วนใหญ่ได้รับการเขียนใหม่ทั้งเพื่อให้ API ซึ่งเป็นสำนวนที่มากขึ้นสำหรับ. NET และเพื่อแก้ไขการตัดสินใจของ Joda Time บางอย่างซึ่งทีม Noda Time มองว่าเป็น "โชคร้าย" (สิ่งเหล่านี้บางส่วนเกิดจากการมีเป้าหมายที่แตกต่างกันบางอย่างที่ฉันโต้เถียงเป็นความผิดพลาดจริง ๆ ) อะไรคือการตัดสินใจที่แตกต่าง / ดีกว่า สิ่งนี้จะไม่นับความแตกต่างเฉพาะสำหรับไวยากรณ์ภาษา แต่จะรวมถึงสิ่งที่ทำเพื่อให้ผู้ใช้มีโอกาสน้อยที่จะทำให้เกิดข้อผิดพลาดในการเขียนโปรแกรม (การใช้งานไลบรารี)

5
แรงจูงใจเบื้องหลัง TypeScript คืออะไร
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 7 ปีที่ผ่านมา เรามี JavaScript จากนั้นเราก็มี Flash จากนั้นเรามี Silverlight และ HTML5 เป็นเจ้าของทั้งหมด แล้วอะไรคือแรงจูงใจเบื้องหลังของ TypeScript? ปัญหาอะไรที่จะได้รับการแก้ไขและการปรับปรุงอะไรที่เราจะได้รับจาก TypeScript? http://www.typescriptlang.org/

3
เมื่อใดที่ต้องเขียนคำสั่ง return ที่ชัดเจนใน Groovy
ในขณะนี้ฉันกำลังทำงานในโครงการ Groovy / Grails (ซึ่งฉันค่อนข้างใหม่) และฉันสงสัยว่าเป็นวิธีปฏิบัติที่ดีที่จะละเว้นreturnคำหลักในวิธีการของ Groovy หรือไม่ เท่าที่ฉันรู้ว่าคุณต้องแทรกคำหลักเช่นสำหรับคำสั่งป้องกันดังนั้นหนึ่งควรใช้มันทุกที่อื่นหรือไม่ ในความคิดของฉันreturnคำหลักเพิ่มเติมจะเพิ่มความสามารถในการอ่าน หรือมันเป็นสิ่งที่คุณเพิ่งคุ้นเคย ประสบการณ์ของคุณกับหัวข้อนั้นคืออะไร? ตัวอย่างบางส่วน: def foo(boolean bar) { // Not consistent if (bar) { return positiveBar() } negativeBar() } def foo2() { // Special Grails example def entitiy = new Entity(foo: 'Foo', bar: 'Bar') entity.save flush: true // Looks strange to …

6
ลองใช้ / จับบล็อกมีประสิทธิภาพหรือไม่
ควรใช้บล็อก catch สำหรับการเขียนลอจิกนั่นคือ handle flow control etc? หรือเพียงแค่โยนข้อยกเว้น? มันส่งผลต่อประสิทธิภาพหรือความสามารถในการบำรุงรักษาโค้ดหรือไม่? อะไรคือผลข้างเคียง (ถ้ามี) ของการเขียนลอจิกใน catch block? แก้ไข: ฉันเคยเห็นคลาส Java SDK ซึ่งพวกเขาได้เขียนตรรกะภายใน catch block ตัวอย่างเช่น (ตัวอย่างข้อมูลมาจากjava.lang.Integerชั้นเรียน): try { result = Integer.valueOf(nm.substring(index), radix); result = negative ? new Integer(-result.intValue()) : result; } catch (NumberFormatException e) { String constant = negative ? new String("-" + …

3
การสะท้อนกลับ: การใช้การสะท้อนยังคง“ ไม่ดี” หรือ“ ช้า” หรือไม่? มีการเปลี่ยนแปลงอะไรกับการสะท้อนตั้งแต่ปี 2545
ฉันสังเกตเห็นเมื่อต้องรับมือกับนิพจน์หรือต้นไม้นิพจน์ฉันใช้การสะท้อนจำนวนมากเพื่อกำหนดและรับค่าในคุณสมบัติและสิ่งที่มีคุณ มันเกิดขึ้นกับฉันว่าการใช้การสะท้อนนั้นดูเหมือนจะเป็นเรื่องธรรมดามากขึ้นเรื่อย ๆ สิ่งต่าง ๆ เช่น DataAnotations สำหรับการตรวจสอบความถูกต้องของ ORM ที่หนักหน่วงเป็นต้นฉันสงสัยว่า: มีการเปลี่ยนแปลงอะไรบ้างนับตั้งแต่วันหลายปีที่ผ่านมาเมื่อฉันเคยถูกบอกให้หลีกเลี่ยงการสะท้อนถ้าเป็นไปได้? ถ้าหากมีอะไรเปลี่ยนแปลง มันเป็นเพียงความเร็วของเครื่องหรือไม่? มีการเปลี่ยนแปลงเฟรมเวิร์กเพื่อเร่งการสะท้อนหรือไม่? หรือไม่มีอะไรเปลี่ยนแปลงจริง ๆ ? มันยังคง "แย่" หรือ "ช้า" เพื่อใช้การสะท้อน?
21 .net  reflection 

3
เหมือนคำขอ Github "ดึงคำขอ" โดยไม่มี GitHub
ฉันทำงานเป็นนักวิเคราะห์สำหรับสถาบันการเงินซึ่งเนื่องจากความไวของข้อมูลจะไม่เก็บข้อมูลใด ๆ ในระบบคลาวด์ อย่างไรก็ตามฉันประสบความสำเร็จในการทำให้ทีมของฉันใช้ Git สำหรับการจัดการรหัส ฉันสงสัยว่ามีวิธีใดที่จะใช้คำขอดึงเหมือน Github ในเซิร์ฟเวอร์ของเราเองหรือไม่ คุณลักษณะเฉพาะที่ฉันสนใจคือความสามารถในการส่งเซ็ตการแก้ไขสำหรับความคิดเห็นโดยไม่รวมเข้ากับสาขาที่กำหนด ฉันชอบเวิร์กโฟลว์ของ (1) ส่งการเปลี่ยนแปลง (2) มีการเปลี่ยนแปลงตรวจสอบและแสดงความคิดเห็นและ (3) ยอมรับการกระทำหรือปฏิเสธ สามารถใช้งานได้หรือไม่ (ดียิ่งขึ้นสามารถนำไปใช้งานได้ง่าย ) บนเซิร์ฟเวอร์ของเราเอง?
21 git  code-reviews 

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

4
จะปรับปรุงการครอบคลุมโค้ดอย่างมากได้อย่างไร?
ฉันได้รับมอบหมายให้รับแอปพลิเคชันรุ่นเก่าภายใต้การทดสอบหน่วย เริ่มจากพื้นฐานเกี่ยวกับแอปพลิเคชั่น: เป็นฐานรหัส LOC Java RCP 600k ที่มีปัญหาสำคัญเหล่านี้ การทำสำเนารหัสจำนวนมาก ไม่มีการห่อหุ้มข้อมูลส่วนตัวส่วนใหญ่สามารถเข้าถึงได้จากภายนอกข้อมูลทางธุรกิจบางส่วนยังสร้างซิงเกิลตันดังนั้นจึงไม่เพียง แต่เปลี่ยนแปลงจากภายนอก แต่ยังมาจากทุกที่ ไม่มี abstractions (เช่นไม่มีโมเดลธุรกิจข้อมูลธุรกิจถูกเก็บไว้ใน Object [] และ double [] []) ดังนั้นจึงไม่มี OO มีชุดทดสอบการถดถอยที่ดีและทีมงาน QA ที่มีประสิทธิภาพคือการทดสอบและค้นหาข้อบกพร่อง ฉันรู้เทคนิคในการทดสอบจากหนังสือคลาสสิกเช่น Michael Feathers แต่มันช้าเกินไป เนื่องจากมีระบบทดสอบการถดถอยที่ใช้งานได้ฉันจึงไม่กลัวที่จะทำการปรับโครงสร้างระบบใหม่อย่างจริงจังเพื่อให้สามารถเขียนการทดสอบหน่วยได้ ฉันจะเริ่มโจมตีปัญหาเพื่อให้ได้ความครอบคลุมได้อย่างรวดเร็วดังนั้นฉันจึงสามารถแสดงความคืบหน้าต่อการจัดการ (และอันที่จริงแล้วเริ่มมีรายได้จากความปลอดภัยของการทดสอบ JUnit) ฉันไม่ต้องการใช้เครื่องมือในการสร้างชุดทดสอบการถดถอยเช่น AgitarOne เพราะการทดสอบเหล่านี้ไม่ได้ทดสอบว่ามีบางอย่างถูกต้องหรือไม่

1
อะไรคือความแตกต่างระหว่างคอนโทรลเลอร์ใน MVC และ ViewModel ใน MVVM
ฉันไม่เห็นความแตกต่างระหว่าง MVC และ MVVM อย่างชัดเจน ฉันรู้สึกว่า Command ใน ViewModel นั้นเหมือนกับวิธี Action ใน Controller และทั้ง Controller และ ViewModel จะแจ้งเตือนให้ View ทำการรีเฟรชตัวเองหลังจากแก้ไขสถานะของ Model ผ่าน Data Binding ความแตกต่างที่สำคัญระหว่างสองรูปแบบคืออะไร?

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