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

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

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

4
Ruby: if variable vs if variable.nil?
ฉันใหม่กับทับทิมและฉันรู้สึกประหลาดใจเมื่อฉันพบว่าวัตถุทั้งหมดเป็นจริงนอกเหนือจากศูนย์และเท็จ แม้แต่ 0 ก็จริง สิ่งที่ดีเกี่ยวกับคุณสมบัติของภาษานั้นคือคุณสามารถเขียน: if !variable # do stuff when variable is nil end เพื่อนร่วมงานของฉันซึ่งเป็นนักพัฒนาทับทิมรุ่นเก๋ามากขึ้นยืนยันว่าฉันควรเลือกสิ่งนั้นแทนที่จะใช้. ชอบมาก: if variable.nil? # do stuff when variable is nil end อย่างไรก็ตามฉันเชื่อว่าอันหลังเป็นตัวเลือกที่ดีกว่าด้วยเหตุผลสองประการ: 1. ฉันคิดว่ามันเป็นเชิงวัตถุมากกว่าโดยเฉพาะในภาษาอย่าง Ruby ซึ่งทุกอย่างเป็นการแลกเปลี่ยนวัตถุและข้อความ 2. มันสามารถอ่านได้มากขึ้นในความเห็นของฉันแม้ว่าจะมีขนาดเล็กลงก็ตาม ฉันกำลังทำผิดพลาด "มือใหม่" ที่นี่?

3
รายการที่เชื่อมโยงควรมีตัวชี้หางหรือไม่?
ความเข้าใจของฉัน ... ข้อดี: การแทรกท้ายคือ O (1) แทน O (N) หากรายการนั้นเป็น Doubly Linked List การลบออกจากจุดสิ้นสุดคือ O (1) แทน O (N) ข้อด้อย: จะขึ้นเป็นจำนวนเล็กน้อยของหน่วยความจำเสริม: 4-8 ไบต์ ผู้ดำเนินการจะต้องติดตามหาง เมื่อมองถึงข้อดีและข้อเสียเหล่านี้ฉันไม่สามารถเห็นได้ว่าเหตุใดรายการที่เชื่อมโยงจะหลีกเลี่ยงการใช้ตัวชี้หาง มีบางอย่างที่ฉันขาดหายไปหรือไม่?

2
หลักการแห้งในแนวปฏิบัติที่ดี?
ฉันพยายามทำตามหลักการ DRY ในการเขียนโปรแกรมของฉันอย่างหนักที่สุดเท่าที่จะทำได้ เมื่อไม่นานมานี้ฉันได้เรียนรู้รูปแบบการออกแบบใน OOP แล้วและฉันก็ทำซ้ำตัวเองค่อนข้างมาก ฉันสร้างรูปแบบ Repository พร้อมกับรูปแบบ Factory และ Gateway เพื่อจัดการกับความคงทนของฉัน ฉันใช้ฐานข้อมูลในแอปพลิเคชันของฉัน แต่ไม่ควรทำเช่นนี้เพราะฉันควรจะสามารถสลับเกตเวย์และเปลี่ยนไปใช้ความพยายามชนิดอื่นได้หากฉันต้องการ ปัญหาที่ฉันสร้างเพื่อตัวเองคือฉันสร้างวัตถุเดียวกันสำหรับจำนวนตารางที่ฉันมี commentsตัวอย่างเหล่านี้จะเป็นวัตถุที่ฉันต้องการที่จะจัดการกับตาราง class Comment extends Model { protected $id; protected $author; protected $text; protected $date; } class CommentFactory implements iFactory { public function createFrom(array $data) { return new Comment($data); } } class CommentGateway implements iGateway …

7
เมื่อใดควรใช้ generics ในการออกแบบอินเตอร์เฟส
ฉันมีอินเทอร์เฟซบางอย่างที่ฉันต้องการให้บุคคลที่สามนำไปใช้ในอนาคตและฉันได้เตรียมการติดตั้งพื้นฐานด้วยตนเอง ฉันจะใช้คู่เพื่อแสดงตัวอย่างเท่านั้น ปัจจุบันพวกเขาถูกกำหนดเป็น สิ่งของ: public interface Item { String getId(); String getName(); } ItemStack: public interface ItemStackFactory { ItemStack createItemStack(Item item, int quantity); } ItemStackContainer: public interface ItemStackContainer { default void add(ItemStack stack) { add(stack, 1); } void add(ItemStack stack, int quantity); } ตอนนี้ItemและItemStackFactoryฉันสามารถคาดการณ์ได้อย่างแน่นอนว่าบุคคลที่สามบางคนจำเป็นต้องขยายในอนาคต ItemStackContainerอาจขยายได้ในอนาคต แต่ไม่ใช่ในลักษณะที่ฉันสามารถคาดการณ์ได้นอกเหนือจากการใช้งานเริ่มต้นที่ให้ไว้ ตอนนี้ฉันพยายามทำให้ห้องสมุดนี้แข็งแกร่งที่สุด นี่ยังอยู่ในช่วงเริ่มต้น (pre-pre-alpha) ดังนั้นนี่อาจเป็นการกระทำของวิศวกรรมมากกว่า …
11 java  generics 

3
Foreach loop และการกำหนดค่าเริ่มต้นตัวแปร
มีความแตกต่างระหว่างโค้ดสองเวอร์ชันนี้หรือไม่? foreach (var thing in things) { int i = thing.number; // code using 'i' // pay no attention to the uselessness of 'i' } int i; foreach (var thing in things) { i = thing.number; // code using 'i' } คอมไพเลอร์ไม่สนใจหรือ? เมื่อฉันพูดถึงความแตกต่างฉันหมายถึงในแง่ของประสิทธิภาพและการใช้หน่วยความจำ .. หรือโดยทั่วไปเพียงแค่ความแตกต่างใด ๆ หรือทำสองท้ายเป็นรหัสเดียวกันหลังจากรวบรวม?
11 c#  performance  memory 

2
งูหลามคลาสที่มีเพียงหนึ่งอินสแตนซ์: เมื่อใดที่จะสร้างอินสแตนซ์ของคลาส (เดี่ยว) และเมื่อใดที่ควรทำงานกับคลาสแทน
รับคลาส Python ซึ่งจะถูกสร้างอินสแตนซ์เพียงครั้งเดียวคือจะมีเพียงวัตถุเดียวของคลาส ฉันสงสัยในกรณีที่เหมาะสมที่จะสร้างอินสแตนซ์ของคลาสเดียวแทนที่จะทำงานโดยตรงกับคลาสแทน มีคำถามที่คล้ายกันแต่มีจุดเน้นที่แตกต่าง: มันเกี่ยวกับการจัดกลุ่มตัวแปรส่วนกลางและฟังก์ชันในคลาสและ มันไม่ได้เป็นงูหลามที่เฉพาะเจาะจง หลังหมายถึงมันไม่ได้พิจารณาความจริงที่ว่าคลาส (ใน Python) เป็นวัตถุด้วย UPDATE: ใน Python ฉันสามารถทำสิ่งต่อไปนี้กับทั้งคลาสและวัตถุ: class A(object): pass A.some_state_var = True # Then later A.some_state_var = False my_a = A() my_a.some_state_var = True # Then later my_a.some_state_var = False ดังนั้นฉันไม่เห็นวิธีการเลือกระหว่างคลาสและอินสแตนซ์ของคลาสนั้นเกี่ยวกับสถานะ (ใน Python) ฉันสามารถรักษาสถานะด้วยสองอย่างใดอย่างหนึ่ง นอกจากนี้แรงจูงใจในการสร้างคลาส / คลาสอินสแตนซ์ของฉันไม่ได้เกี่ยวกับการบังคับใช้ข้อกำหนดแบบซิงเกิล นอกจากนี้ยังไม่มากนักเกี่ยวกับการสร้างประเภทใหม่ แรงจูงใจคือการจัดกลุ่มรหัสและข้อมูลที่เกี่ยวข้องและมีส่วนต่อประสานกับมัน นี่คือเหตุผลที่ฉันเริ่มต้นแบบเป็นคลาสในแผนภาพคลาส เมื่อพูดถึงการนำไปใช้ฉันเริ่มสงสัยว่าจะยกตัวอย่างชั้นเรียนนี้หรือไม่

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

5
"เรื่องราวของผู้ใช้ด้านเทคนิค" ได้รับอนุญาตในการต่อสู้หรือไม่
เรื่องราวของผู้ใช้ด้านเทคนิคได้รับอนุญาตในการต่อสู้หรือไม่? ถ้าใช่เทมเพลตมาตรฐานสำหรับการเขียนเรื่องราวผู้ใช้ด้านเทคนิคใน Scrum คืออะไร มันเหมือนกันหรือAs a <user> I want to do <task> so that I can <goal>ไม่? ฉันได้อ่านในบางบล็อกที่เป็นผู้พัฒนาไม่เป็นเรื่องผู้ใช้แต่ฉันได้อ่านด้วยว่า Scrum ไม่ได้บังคับใช้สิ่งเหล่านี้ มีไม่กี่บล็อกที่พวกเขาได้ร่วมกันเป็นเรื่องที่ผู้ใช้กับระบบเป็นผู้ใช้as a <user who is not end user> i want to <system functionality> so that <some techinical thing>เช่นของมัน แล้วอันไหนที่เป็นมาตรฐาน? ตัวอย่างเช่นมีเรื่องราวของผู้ใช้ที่ชอบ: ในฐานะนักวิจารณ์ฉันต้องการอัปโหลดรูปภาพของโรงแรม / อาหารเพื่อให้ผู้ใช้รายอื่นสามารถเห็นและชอบได้ ในฐานะผู้ใช้ฉันต้องการเพิ่มความคิดเห็นเกี่ยวกับรูปภาพเพื่อให้ฉันสามารถอธิบายมุมมองของฉันได้ดียิ่งขึ้น ตอนนี้สำหรับเรื่องราวของผู้ใช้ทั้งสองนี้มีรายการทางเทคนิคที่สำคัญคือการบันทึกและดึงภาพ ดังนั้นฉันสามารถเพิ่มเรื่องทางเทคนิคที่ชื่อว่า "การจัดเก็บและเรียกค้นภาพกลไก" พร้อมคำอธิบายต่อไปนี้ได้หรือไม่ ในฐานะนักพัฒนาฉันต้องการพัฒนากลไกในการจัดเก็บและดึงภาพเพื่อให้ผู้ใช้สามารถเพิ่ม / …

1
จะระงับการรองรับโอเพ่นซอร์สได้อย่างไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันเป็นผู้ดูแลเพียงคนเดียวที่ใช้งานได้สำหรับโครงการโอเพนซอร์สซึ่งได้รับการร้องขอการสนับสนุนในช่องทางต่างๆ (Twitter, อีเมล, GitHub) เกือบทุกวัน ฉันจะไปพักผ่อนวันหยุดในอีกสามเดือนข้างหน้าซึ่งฉันจะมีเวลา จำกัด ในการตอบกลับให้ยอมรับคำขอดึงหรือแก้ไขปัญหาเพียงอย่างเดียว ฉันจะทำอะไรได้บ้างเพื่อป้องกันไม่ให้คนผิดหวังที่ต้องถามคำถามที่ดีหรือเขียนรายงานข้อผิดพลาดที่เหมาะสม

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

5
ฉันควรจะชอบองค์ประกอบหรือการสืบทอดในสถานการณ์นี้หรือไม่
พิจารณาอินเทอร์เฟซ: interface IWaveGenerator { SoundWave GenerateWave(double frequency, double lengthInSeconds); } อินเทอร์เฟซนี้ถูกใช้งานโดยคลาสที่สร้างคลื่นของรูปร่างที่แตกต่างกัน (ตัวอย่างเช่นSineWaveGeneratorและSquareWaveGenerator) ฉันต้องการใช้คลาสที่สร้างSoundWaveจากข้อมูลดนตรีไม่ใช่ข้อมูลเสียงดิบ มันจะได้รับชื่อของโน้ตและระยะเวลาในแง่ของการเต้น (ไม่กี่วินาที) ที่และภายในใช้IWaveGeneratorฟังก์ชั่นในการสร้างSoundWaveตาม คำถามคือควรNoteGeneratorประกอบด้วยIWaveGeneratorหรือควรได้รับมรดกจากการIWaveGeneratorดำเนินการ? ฉันเอนตัวไปยังองค์ประกอบเนื่องจากเหตุผลสองประการ: 1- มันช่วยให้ฉันสามารถฉีดใด ๆIWaveGeneratorไปยังNoteGeneratorแบบไดนามิก นอกจากนี้ฉันต้องการเพียงหนึ่งNoteGeneratorชั้นแทนSineNoteGenerator, SquareNoteGeneratorฯลฯ 2- มีความต้องการไม่ได้ที่จะเปิดเผยอินเตอร์เฟซในระดับต่ำกว่าที่กำหนดโดยNoteGeneratorIWaveGenerator อย่างไรก็ตามฉันโพสต์คำถามนี้เพื่อฟังความคิดเห็นอื่น ๆ เกี่ยวกับเรื่องนี้อาจเป็นจุดที่ฉันไม่ได้คิด BTW: ฉันจะบอกว่าNoteGenerator เป็นแนวคิดIWaveGeneratorเพราะมันสร้างSoundWaves

5
อินเตอร์เฟซแยกต่างหากสำหรับวิธีการกลายพันธุ์
ฉันทำงานเกี่ยวกับการรีแฟคเตอร์โค้ดบางส่วนและฉันคิดว่าฉันอาจทำขั้นตอนแรกลงไปในช่องกระต่าย ฉันเขียนตัวอย่างใน Java แต่ฉันคิดว่ามันอาจเป็นผู้ไม่เชื่อเรื่องพระเจ้า ฉันมีอินเตอร์เฟซที่Fooกำหนดเป็น public interface Foo { int getX(); int getY(); int getZ(); } และการดำเนินการตาม public final class DefaultFoo implements Foo { public DefaultFoo(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } public int getX() { return x; } public …

5
การเริ่มภารกิจย่อยที่จุดเริ่มต้นของการวิ่งแต่ละครั้ง
ฉันได้เข้าร่วมทีมใหม่ซึ่งใช้ Agile / Scrum และกระบวนการพัฒนาของพวกเขามีดังนี้: 1) นักพัฒนาตรวจสอบแต่ละเรื่องก่อนการวิ่งแต่ละครั้งเพื่อให้แน่ใจว่าจะไม่พลาดสิ่งสำคัญ มีสถานะทางการสำหรับเวิร์กโฟลว์ 2) ในช่วงการแข่งขันสปรินท์ทั้งทีมทำการประเมิน (การวางแผนโป๊กเกอร์) ว่าจะให้คะแนนเรื่องราวกี่เรื่องในแต่ละเรื่อง 3) ในที่สุดทันทีหลังจากเริ่มการวิ่งแต่ละครั้งนักพัฒนาแต่ละคนจะต้องทำการแบ่งเรื่องราวที่ได้รับมอบหมายทั้งหมดออกเป็นงานย่อยโดยมีการประเมินเวลา ข้อโต้แย้งหลักสำหรับขั้นตอนสุดท้ายคือการช่วยในการค้นหาว่าการดำเนินเรื่องจะใช้เวลานานกว่าที่คาดการณ์ไว้หรือไม่และเตือนอาจารย์ต้นแบบเกี่ยวกับความเสี่ยงที่อาจเกิดขึ้นจากกำหนดส่งท้ายที่หายไป แต่ฉันก็พบว่าสิ่งนี้ต่อต้านการผลิตส่วนใหญ่เนื่องจากเหตุผลดังต่อไปนี้: ถ้าเป้าหมายคือการประมาณคร่าว ๆ จุดเรื่องราว (ขั้นตอนที่ 2) คือสิ่งที่ทำงาน มิฉะนั้นทำไมต้องกังวลกับเรื่องราวทั้งหมด - เพียงแค่ทำภารกิจย่อยเร็ว ถ้าจุดมุ่งหมายคือการให้ข้อมูลประมาณการที่ถูกต้องแล้วนี้เป็นตัวอย่างที่ชัดเจนของสิ่งที่อธิบายไว้ในงานของมนุษย์ช์พิจารณาอันตราย ฉันคิดว่านี่เป็นกรณีพิเศษสำหรับนักพัฒนาใหม่ที่เข้าร่วมทีมที่มีอยู่ในโครงการขนาดใหญ่ที่เข้าใจว่าต้องทำอะไรอาจต้องใช้เวลามากถึง 50% คุณจะต้องดูรายละเอียดของเรื่องราว # 1 จากนั้นเล่าเรื่องราวที่ 2, # 3 ฯลฯ ฯลฯ ซึ่งให้ข้อมูลจำนวนมากปั่นป่วน ฉันยังได้รับการบอกว่าการปฏิบัติเช่นนี้เป็น "หนังสือ" และฉันก็ไม่ได้ตั้งใจจะพูดคุยเรื่องนี้ ทุกคนสามารถให้การอ้างอิงถึงการปฏิบัติดังกล่าว - ไม่ว่าจะมีการกำหนดไว้อย่างชัดเจนในพระคัมภีร์ Scrum และ / หรืออาจให้ข้อมูลเชิงลึกเพิ่มเติมหรือไม่?
11 agile  scrum 

5
วิธีที่ง่ายและสะอาดในการเปรียบเทียบตัวเลขสามตัว
ฉันได้รับรหัสบางอย่างที่มีลำดับของการifทำงานที่ แต่ก็รู้สึกยุ่ง โดยพื้นฐานแล้วฉันต้องการเลือกจำนวนเต็มสามตัวที่ใหญ่ที่สุดและตั้งค่าสถานะเป็นคำพูดที่เลือก รหัสปัจจุบันของฉันดูเหมือนว่านี้: a = countAs(); b = countBs(); c = countCs(); if (a > b && a > c) status = MOSTLY_A; else if (b > a && b > c) status = MOSTLY_B; else if (c > a && c > b) status = MOSTLY_C; else status …
11 algorithms  c 

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