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

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

3
ฉันควรรวมตัวเองเป็นผู้เขียนหลังจากแก้ไขรหัสบุคคลที่สามหรือไม่
เป็นเรื่องธรรมดาที่จะทำการปรับแต่งหรือแก้ไขในโค้ดของบุคคลที่สาม (ไม่ว่าจะเป็นส่วนสำคัญหรือห้องสมุดทั้งหมด) แต่ก็เป็นเรื่องปกติที่รหัสเหล่านี้ส่วนใหญ่มีกฎการออกใบอนุญาตของตนเองและในที่สุดก็มีส่วนหัวของไฟล์ทุกไฟล์ที่มีข้อมูลลิขสิทธิ์ หลังจากทำการแก้ไขเหล่านี้แล้วจะต้องทำอย่างไรต่อไป เก็บข้อมูลใบอนุญาตไว้ไม่ให้แตะต้องหรือพยายามอัปเดตรวมถึงตัวคุณเองด้วยของที่ชอบ@authorหรือ@revisionแท็ก? ปัญหาที่พบบ่อยอีกประการหนึ่งคือการเปลี่ยนเนมสเปซ / แพ็กเกจของบุคคลที่สามเพื่อให้เหมาะกับการประชุมโครงการของคุณ ใบอนุญาตบางประเภทมีข้อมูลประเภทนี้ในบล็อกสิทธิ์การใช้งานฉันสามารถเปลี่ยนได้อย่างอิสระหรือไม่ ฉันรู้ว่าคำตอบสำหรับคำถามเหล่านี้ขึ้นอยู่กับประเภทใบอนุญาตแต่ละประเภทดังนั้นเพื่อให้คำถามของฉันเฉพาะเจาะจงมากขึ้น ... พิจารณากฎใบอนุญาตทั่วไป (โดยปกติพวกเขามีความแตกต่างกันในแง่มุมเล็ก ๆ น้อย ๆ ใช่มั้ย?) เป็นจริยธรรม (หรืออย่างน้อยได้รับอนุญาต) ที่ฉันได้อย่างอิสระเพิ่มข้อมูลเพื่อป้องกันใบอนุญาตเกี่ยวกับการปรับเปลี่ยนของฉันและบางทีก็อาจปรับเปลี่ยนวิธีการทำผมหมายถึงในรหัสของฉัน (เช่นใช้YACorp.YALibเป็นUtils.YALib)

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

4
ปัญหาของการนำ C ++ เหมือน const เป็นภาษามีอะไรบ้าง
ฉันสนใจในความคิดของ C ++ - constไม่ใช่การประหารแบบconstนั้น ยกตัวอย่าง C # - มันไม่มี C ++ - เหมือน const และเหตุผลที่เป็นปกติ - ผู้คนและเวลา ที่นี่นอกจากนี้ดูเหมือนว่าทีม C # ดูการดำเนินการ C ++ ของconstการตลาด CLR และมีเพียงพอที่จุดนี้ (ดูว่าทำไมไม่มีวิธีสมาชิก const ใน c # และพารามิเตอร์ const ; ขอบคุณ Svick) ถ้าเราก้าวไปไกลกว่านั้นมีอะไรอีกไหม? มีอะไรที่ลึกกว่านี้ไหม? ยกตัวอย่างเช่นการสืบทอดหลาย ๆ อย่างซึ่งมักจะยากที่จะเข้าใจ (สำหรับผู้ใช้) และดังนั้นจึงไม่ได้เพิ่มในภาษา (เช่นปัญหาเพชร) เป็นสิ่งที่มีอยู่ในธรรมชาติของconstที่ก่อให้เกิดปัญหาว่ามันจะดีกว่าสำหรับภาษาที่จะหลีกเลี่ยงมันได้หรือไม่ สิ่งที่ต้องการตัดสินใจว่าconstควรจะลึกหรือตื้น (มีconstคอนเทนเนอร์หมายความว่าฉันไม่สามารถเพิ่มองค์ประกอบใหม่หรือแก้ไของค์ประกอบที่มีอยู่เช่นกันถ้าองค์ประกอบเป็นประเภทอ้างอิง) ปรับปรุง : …

4
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะอนุญาตให้ผู้ใช้กำหนดเขตข้อมูล?
โดยทั่วไปแล้วจะถือว่าเป็นวิธีปฏิบัติที่ไม่ดีที่จะอนุญาตให้ผู้ใช้สร้างฟิลด์ในฐานข้อมูลสำหรับเว็บแอพหรือไม่? ตัวอย่างเช่นฉันกำลังสร้างเว็บแอปสินค้าคงคลังที่บ้านสำหรับภรรยาของฉันและเธอจะต้องการกำหนดฟิลด์ของเธอเองสำหรับรายการที่แตกต่างกัน ฉันวางแผนที่จะอนุญาตให้เธอสร้างหมวดรายการและเพิ่ม "คุณสมบัติ" ให้กับหมวดหมู่เหล่านั้น คุณสมบัติจะเป็นคีย์ / ค่าที่จัดเก็บเป็นสตริง ถ้าเธอมีหมวดหมู่ที่เรียกว่า "Audio CDs" เธอสามารถเพิ่มฟีเจอร์สำหรับสิ่งต่าง ๆ เช่น "artist", "track" เป็นต้น แต่ในหมวดหมู่อื่นเช่น "เฟอร์นิเจอร์" เธอสามารถเพิ่มฟีเจอร์สำหรับสิ่งต่าง ๆ เช่น "วัสดุ "(ไม้พลาสติก ฯลฯ ) จากนั้นรายการใด ๆ อาจเป็นของหนึ่งหมวดหมู่ (หรือหลายกลุ่ม) เพิ่มคุณสมบัติเหล่านั้นไปยังรายการ ฉันสามารถดูปัญหาที่การค้นหาโดยคุณลักษณะเหล่านี้ต้องใช้การเปรียบเทียบสตริงไม่มีการตรวจสอบข้อมูล ฯลฯ ตามวิธีการแบบเปรียวบางทีมันอาจจะเป็นการดีกว่าถ้าให้เธอมากับหมวดหมู่และแอตทริบิวต์ใหม่และฉันจะต้องสร้างตารางใหม่ ในขณะที่เราไป ในตัวอย่างของฉันมันเป็นฐานข้อมูลขนาดเล็ก (เรา 2 คน) และจำนวนของเรกคอร์ดที่สร้างจะมีขนาดเล็กดังนั้นจึงไม่เลวร้ายเกินไป โดยทั่วไปแล้วผู้คนจะจัดการกับสิ่งนี้ใน "ชีวิตจริง" ได้อย่างไร?

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

4
Java - ใช้ความหลากหลายหรือพารามิเตอร์ประเภทที่ถูกผูกไว้
สมมติว่าฉันมีลำดับชั้นเรียนนี้ ... public abstract class Animal { public abstract void eat(); public abstract void talk(); } class Dog extends Animal { @Override public void eat() { } @Override public void talk() { } } class Cat extends Animal { @Override public void eat() { } @Override public void talk() { …

4
เหตุใดจึงกำหนดวัตถุ Java โดยใช้ส่วนต่อประสาน (เช่นแผนที่) แทนที่จะใช้งาน (HashMap)
ในรหัส Java ส่วนใหญ่ฉันเห็นคนประกาศวัตถุ Java เช่นนี้: Map<String, String> hashMap = new HashMap<>(); List<String> list = new ArrayList<>(); แทน: HashMap<String, String> hashMap = new HashMap<>(); ArrayList<String> list = new ArrayList<>(); ทำไมจึงมีการตั้งค่าเพื่อกำหนดวัตถุ Java โดยใช้อินเตอร์เฟซมากกว่าการใช้งานที่จะใช้จริง?

2
CSS สำหรับคนที่มีความบกพร่องทางสายตาหรือไม่
ดังนั้นในขณะที่ฉันเรียนรู้ HTML ฉันพบ CSS มันน่าสนใจเพราะด้วย CSS คุณสามารถทำให้หน้าเว็บดูเท่ห์ขึ้นหรือสวยงามขึ้น แต่เนื่องจากเป็นเรื่องเกี่ยวกับสีการออกแบบสไตล์เป็นต้นฉันไม่สามารถรู้ผลลัพธ์ของโค้ด CSS ของฉันได้ ในฐานะคนที่มีความบกพร่องทางสายตาเหตุใดฉันจึงควรเรียนรู้ CSS หากคนที่มีสายตาสามารถออกแบบหน้าเว็บได้ดีกว่าฉันเพราะพวกเขาเห็นได้ตลอดเวลา มีโปรแกรมเมอร์ตาบอดที่นี่เขียน CSS หรือไม่ คุณทำได้อย่างไร? ฉันควรเพิกเฉย CSS ทั้งหมดแล้วปล่อยให้เป็นโปรแกรมเมอร์ที่มองเห็นหรือไม่ หรือมีบางสิ่งใน CSS ที่ฉันสามารถทำได้โดยไม่ต้องขอให้คนดูที่หน้าของฉันรู้ว่ามันมีการออกแบบที่ดีหรือไม่?
17 css 

6
ตัวอย่างของปัญหาทางธุรกิจที่เป็นไปไม่ได้ที่คำนวณได้คืออะไร
ฉันมีเพื่อนร่วมงานที่ปฏิเสธที่จะยอมรับความจริงที่ว่าเครื่องจักรทัวริง (และเครื่องจักรของ Von Neuman ตามส่วนขยาย) ไม่สามารถแก้ปัญหาการหยุดชะงักของตนเองได้: คุณสามารถทำอะไรกับเวลาและเงินเพียงพอ นอกจากนี้เขายังไม่ชอบปัญหาเชิงทฤษฎีที่โต้แย้งว่า: ในสาขาของเราเราจะไม่พบคำถามเหล่านั้น เราเป็นนักพัฒนาแอปพลิเคชั่นไม่ใช่นักวิทยาศาสตร์ตามทฤษฎี มีตัวอย่างที่ดีของปัญหาทางธุรกิจที่ไม่สามารถคำนวณได้ที่ฉันสามารถใช้เพื่อช่วยโน้มน้าวเขาได้หรือไม่?

4
ทำไม Java String จึงไม่มีวิธีการจัดการสตริงแบบคงที่
ทำไมนักออกแบบ Javaไม่สร้างวิธีการจัดการสตริงแบบคงที่ในjava.lang.Stringคลาส? วิธีการต่อไปนี้เป็นสิ่งที่ฉันอ้างถึง แต่คำถามสามารถขยายไปยังวิธีการไม่คงที่อื่น ๆ ในชั้นเรียนเช่นกัน concat(String) substring(int, int) replace(char, char) toLowerCase() replace(CharSequence, CharSequence) toLowerCase(Locale) replaceAll(String, String) toString() replaceFirst(String, String) toUpperCase() split(String) toUpperCase(Locale) split(String, int) trim() substring(int) การมีวิธีการเหล่านี้ในเวอร์ชันที่ไม่คงที่เท่านั้นจะบังคับให้มีการตรวจสอบ Null อย่างชัดเจนไม่ว่าที่ใดก็ต้องเรียกใช้ ยกตัวอย่างเช่นเพียงแค่โทรexample = example.trim()จะนำไปสู่NullPointerExceptionString example = nullถ้า ดังนั้นโปรแกรมเมอร์จะต้องทำการตรวจสอบ boilerplate null ต่อไปนี้: if (example != null) example = example.trim(); // OR: example …
17 java  api-design  null 

3
จำนวนสตริงที่ถูกสร้างในหน่วยความจำเมื่อเชื่อมสตริงใน Java?
ฉันถูกถามเกี่ยวกับสตริงที่ไม่เปลี่ยนรูปแบบใน Java ฉันถูกมอบหมายให้เขียนฟังก์ชั่นที่เชื่อมจำนวน "a" เข้ากับสตริง สิ่งที่ฉันเขียน: public String foo(int n) { String s = ""; for (int i = 0; i < n; i++) { s = s + "a" } return s; } ฉันถูกถามแล้วว่าจะสร้างโปรแกรมจำนวนเท่าใดสตริงโดยสมมติว่าการรวบรวมขยะไม่ได้เกิดขึ้น ความคิดของฉันสำหรับ n = 3 คือ "" "A" "A" "AA" "A" "AAA" "A" โดยพื้นฐานแล้วจะมีการสร้างสตริง 2 สายในการวนซ้ำแต่ละรอบ …
17 java  strings  object 

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

3
วิธีทดสอบ data access layer
ฉันมีวิธี DAO ที่ใช้ Spring สำหรับการเข้าถึง JDBC มันคำนวณอัตราความสำเร็จของผู้ขายในการขายสินค้า นี่คือรหัส: public BigDecimal getSellingSuccessRate(long seller_id) { String sql = "SELECT SUM(IF(sold_price IS NOT NULL, 1, 0))/SUM(1) FROM transaction WHERE seller_id = ?"; Object[] args = {seller_id}; return getJdbcTemplate().queryForObject(sql, args, BigDecimal.class); } ฉันควรจะทดสอบวิธีนี้หรือวิธี DAO กับ JUnit อย่างไร แนวทางปฏิบัติที่ดีที่สุดในการทดสอบตรรกะการเข้าถึงข้อมูลคืออะไร ฉันคิดว่าจะทดสอบกับฐานข้อมูลแบบฝังที่โหลดด้วยข้อมูลบางส่วน แต่เราไม่ควรทำการทดสอบการรวมที่คล้ายกับสภาพแวดล้อมการผลิตในแง่ของ RDBMS และสคีมาหรือไม่

1
คำขอดึง GitHub ของฉันถูกรวมการประชุมในขั้นตอนนี้คืออะไร?
ฉันคดเคี้ยวโครงการ Github ที่ทำการเปลี่ยนแปลงเล็ก ๆ และส่งคำขอดึงไปยังผู้ดูแลเดิมที่ได้ดึงมันใน. Merged pull request #11 from my_username/masterตอนสุดท้ายกระทำมี นี่เป็นครั้งแรกที่ฉันทำสิ่งนี้ดังนั้นฉันไม่แน่ใจว่ามารยาทในตอนนี้คือ: ฉันทำgit pull upstream masterแล้วgit push origin masterและตอนนี้ความมุ่งมั่นล่าสุดของที่เก็บของฉันเองMerged pull request #11 from my_username/masterซึ่งอ่านแล้วรู้สึกแปลกสำหรับฉัน นี่เป็นวิธีที่ผู้คนมักจะทำหรือไม่ฉันต้องทำอะไรเพื่อ "ล้างประวัติ" หรืออะไรบางอย่าง? หมายเหตุ: เนื่องจากนี่เป็นการเปลี่ยนแปลงเอกสารเล็กน้อยฉันไม่ได้สร้างสาขาเลยฉันเพิ่งทำการเปลี่ยนแปลงในmasterสาขาของฉันและส่ง pull req ดังนั้นจึงไม่มีการล้างข้อมูลในส่วนนั้น

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

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