ผลกระทบของการออกแบบโปรแกรม
แนะนำใหม่| English | ความหมาย |
|---|---|
| modular/ˈmɒdjʊlə/ | แบบโมดูลาร์ |
Two neat designs can report different averages
- บันทึกสมมติมีคะแนน 80, ขาด และ 100; การ treating absence เป็นศูนย์ให้
(80 + 0 + 100) / 3 = 60; การ omit缺失 result ให้(80 + 100) / 2 = 90 - Methods แยกสามารถคำนวณผลลัพธ์ทั้งสองได้อย่างถูกต้อง;การจัด organization does not choose the reporting policy: Establish what absence means, who decides, and which denominator the report must show before using the result.
คะแนนคือ 80, หายไป และ 100 ภายใต้นโยบาย available-score ค่าเฉลี่ยคืออะไร?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ผลรวมของคะแนนที่มีอยู่คือ 180 และจำนวนคะแนนที่มีอยู่คือ 2 ดังนั้น 180/2 = 90
Turn a requirement into a contract
- ระบุให้ชัดเจนว่าความขาดหายหมายถึงงานประเมินที่ไม่ได้ทำ, งานที่ไม่ได้มอบหมาย, หรือข้อมูลที่ยังไม่ได้กรอก กรณีเหล่านี้ไม่จำเป็นต้องใช้กฎเดียวกัน ตัวอย่างสมมตินี้แสดงถึงผลกระทบและไม่ได้นิยามนโยบายการให้คะแนนของโรงเรียน
- ระบุค่าอินพุตที่ยอมรับ การจัดการกับค่าที่หายไป และผลลัพธ์ หากกฎคือ “คะแนนเฉลี่ยที่มีอยู่” บันทึกที่ขาดหายทั้งหมดจะไม่มีค่าเฉลี่ย; ให้รายงานกรณีนี้อย่างชัดเจนแทนที่จะสร้างเลขศูนย์หรือหารด้วยศูนย์
Separate responsibilities for checking
- การออกแบบแบบ โมดูลาร์ แยก
readScores,averageAvailableและprintReportออก วิธีเฉลี่ยสามารถตรวจสอบได้ด้วยค่าที่ทราบโดยไม่ต้องอ่านไฟล์หรือจับรูปแบบเอาต์พุต - การแยกส่วนช่วยได้เมื่ออินเทอร์เฟซยังคงชัดเจน การเปลี่ยนแปลงความหมายของค่าที่ขาดหายไปอาจยังต้องการการแก้ไขในการคำนวณ การรายงานและการตรวจสอบ; วิธีย่อยและชื่อที่ดีเพียงอย่างเดียวไม่สามารถป้องกันความเชื่อมโยงเหล่านี้ได้
ตรวจสอบกรณีปกติและกรณีขอบเขต
- สำหรับนโยบายคะแนนที่มีอยู่ ให้ตรวจสอบว่า [80, ขาด, 100] ให้ผลลัพธ์เป็น 90, คะแนนเดี่ยว 80 ให้ผลลัพธ์เป็น 80, และ [ขาด, ขาด] สร้างผลลัพธ์ "ไม่มีผล" ที่ตกลงกันไว้ อย่าแค่ตรวจสอบว่าโปรแกรมทำงานได้เท่านั้น
- การคำนวณด้านล่างใช้
nullสำหรับค่าที่หายตัวไป มันจะคืนค่าเฉลี่ยแบบทวิภาคและปฏิเสธกรณีทั้งหมดเป็นค่าหายมันสมมติว่ามีอาร์เรย์คะแนนปกติที่ไม่เป็น null; การตรวจสอบอินพุตและการรายงานเป็นหน้าที่แยกต่างหาก
public class AverageAvailable {
public static double averageAvailable(Integer[] scores) {
double total = 0;
int present = 0;
for (Integer score : scores) {
if (score != null) {
total += score;
present++;
}
}
if (present == 0) {
throw new IllegalArgumentException("No available scores");
}
return total / present;
}
}
การออกแบบแบบโมดูลาร์ (ส่วนย่อยที่เป็นอิสระและมีชื่อชัดเจน) ช่วยให้ง่ายต่อการ...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ความเป็นโมดูลาร์ทำให้การเปลี่ยนแปลงปลอดภัยขึ้นและส่วนย่อยสามารถนำกลับมาใช้ใหม่ได้
เมื่อผู้เรียกหลายรายใช้เมทόδเดียวกัน การแก้ไขเมทόδนั้นจะส่งผลดีต่อผู้เรียกทั้งหมดโดยไม่ต้องแก้ไขสำเนาที่ซ้ำกัน
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ถูกต้อง: ผู้เรียกใช้การดำเนินการร่วมกัน ข้อตกลงและผลกระทบจากการเปลี่ยนแปลงยังคงต้องผ่านการทบทวน
ความลำเอียงในข้อมูลหรือตรรกะของโปรแกรมอาจสร้างผลลัพธ์ที่ไม่ยุติธรรมในระดับใหญ่
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ตัวเลือกการออกแบบส่งผลต่อคนจริง — พิจารณาว่าใครได้รับผลกระทบ
สำหรับการตรวจสอบการคำนวณค่าเฉลี่ยโดยไม่ขึ้นอยู่กับอินพุตและผลลัพธ์ที่พิมพ์出来 ซึ่งการออกแบบแบบใดแยกความรับผิดชอบนี้ได้ดีที่สุด?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การแยกการคำนวณออกจากอินพุตและเอาต์พุตช่วยให้สามารถตรวจสอบคะแนน Known-score ได้โดยไม่ต้องพึ่งพาการดำเนินการอื่นๆ การมีเมทόδขนาดเล็กเพียงอย่างเดียวไม่รับประกันความถูกต้อง
การออกแบบโปรแกรมเป็นเพียงความสวยงามภายนอกและไม่ส่งผลต่อความปลอดภัยในการแก้ไขโค้ด
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การออกแบบกำหนดว่าโปรแกรมจะถูกแก้ไขได้อย่างปลอดภัยเพียงใด
เมทόδ averageAvailable ที่แสดงจะคืนค่าศูนย์สำหรับอาร์เรย์ที่หายไปทั้งหมด
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ไม่ถูกต้อง: เมทόδนี้จะปฏิเสธกรณีดังกล่าวโดย throws IllegalArgumentException เนื่องจากไม่มีคะแนนที่ใช้คำนวณเพื่อสร้างค่าเฉลี่ย
รายงานผลกระทบต่อผู้ใช้ที่ได้รับผลกระทบ
- รายงานเกี่ยวกับ 90 ควรระบุว่ามันคำนวณค่าเฉลี่ยจากคะแนนที่มีอยู่สองค่าจากสามบันทึก โดยละเว้นผลลัพธ์ที่ขาดหายไปหนึ่งรายการ การรายงานเฉพาะ 90 จะซ่อนข้อมูลที่ผู้อ่านจำเป็นต้องใช้ในการเปรียบเทียบผลลัพธ์
- ทบทวนว่าใครอาจได้รับผลกระทบจากข้อมูลและนโยบาย การคำนวณที่สอดคล้องกันอาจยังคงจัดการกับประเภทของการขาดหายต่างกันอย่างไม่เหมาะสม; ทดสอบข้อกำหนดที่ตกลงกันไว้และทำให้ผลลัพธ์เข้าใจง่ายสำหรับผู้ใช้
ความโมดูลาร์ทำให้นโยบายตรวจสอบและทดสอบได้ง่ายขึ้น แต่ไม่ได้หมายความว่านโยบายนั้นยุติธรรมหรือเหมาะสม ค่าเฉลี่ย 60 และ 90 ใช้ตัวส่วนที่แตกต่างกัน ควรเลือกและเปิดเผยกฎแทนที่จะเลือกผลที่ดูดีกว่าอย่างเงียบๆ
การออกแบบที่ดีหรือแย่?
ตัวเลือกการออกแบบมีผลกระทบจริง จัดกลุ่มผลลัพธ์แต่ละอย่าง
นำการเปลี่ยนแปลงนโยบายข้ามผ่านการออกแบบ
- หากข้อกำหนดที่อนุญาตให้เปลี่ยนไปนับงานที่ไม่เคยทำเป็นศูนย์ ให้ปรับปรุงตัวส่วน ตัวอย่างที่เกี่ยวข้อง การตรวจสอบและคำพูดในรายงาน การใช้ซ้ำวิธีมีประโยชน์ก็ต่อเมื่อสัญญาของมันตรงกับงานใหม่เท่านั้น
- ทบทอบความสามารถในการทดสอบ ความถูกต้องและความเข้าใจของผู้ใช้แยกกัน ขอบเขตที่ชัดเจนช่วยลดความเสี่ยงจากการเปลี่ยนแปลงบางอย่าง แต่ผู้เรียกและสมมติฐานร่วมกันต้องยังคงถูกตรวจสอบเมื่อสัญญาของวิธีการเปลี่ยนแปลง
การออกแบบโปรแกรมส่งผลกระทบต่อความสามารถในการบำรุงรักษาและคน分开职责以便行为可以被检查,定义缺失数据策略,测试其边界情况并披露分母。正确的算术和整洁的结构本身并不能建立一个适当的政策。
Match the change to the issue it addresses.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
A modular structure enables checking but cannot choose the right policy by itself.