ความแตกต่างระหว่างการรวมและการขยายในกรณีการใช้แผนภาพคืออะไร?


377

อะไรคือความแตกต่างระหว่างincludeและextendในแผนภาพกรณีใช้ ?


ฉันจะไม่ทำงานที่ดีกว่า Scott Ambler ในการอธิบายว่าพวกเขาสามารถนำมาใช้เพื่อนำกลับมาใช้ใหม่ได้อย่างไรในรูปแบบของเคสและความแตกต่าง ดังนั้นแทนที่จะถอดความเขาฉันขอแนะนำให้อ่านซ้ำในกรณีการใช้งานรุ่น: & lt; & lt; ขยาย & gt; & gt ;, & lt; & lt; รวม & gt; & gt ;, และมรดก
— Pascal Thivent

7
อันที่จริงคำถามนี้จะเขียนโปรแกรมที่เกี่ยวข้อง ...
— ปาสกาล Thivent

35
@closers: นี่เป็นคำถามที่ถูกต้อง
— Henk Holterman

82
สำหรับสั้น -> รวม = Madatory ให้ขยาย = ตัวเลือก
— Thein

2
@Megamind 'ขยาย = ตัวเลือก' ไม่เป็นความจริงทั้งหมด ... ดูลิงค์
— Shanaka Jayalath

คำตอบ:


262

Extendจะใช้เมื่อกรณีการใช้งานเพิ่มขั้นตอนให้กับกรณีการใช้งานระดับเฟิร์สคลาสอื่น

ตัวอย่างเช่นลองนึกภาพ "ถอนเงินสด" เป็นกรณีการใช้งานของเครื่องถอนเงินอัตโนมัติ (ATM) "ประเมินค่าธรรมเนียม" จะขยายถอนเงินสดและอธิบาย"จุดขยาย" ตามเงื่อนไขที่มีการยกตัวอย่างเมื่อผู้ใช้ ATM ไม่ได้ธนาคารที่สถาบันการเป็นเจ้าของ ATM โปรดสังเกตว่ากรณีการใช้งาน "ถอนเงินสด" พื้นฐานนั้นจะดำเนินการเอง แต่ไม่มีส่วนขยาย

การรวมถูกใช้เพื่อแยกแฟรกเมนต์การใช้เคสที่ซ้ำกันในหลายเคสการใช้งาน กรณีการใช้งานที่รวมไว้ไม่สามารถแยกออกจากกันได้และกรณีใช้งานดั้งเดิมไม่เสร็จสมบูรณ์ นี้ควรใช้เท่าที่จำเป็นและในกรณีที่การทำซ้ำมีความสำคัญและมีอยู่โดยการออกแบบ (มากกว่าโดยบังเอิญ)

ตัวอย่างเช่นการไหลของเหตุการณ์ที่เกิดขึ้นที่จุดเริ่มต้นของทุก ATM ใช้กรณี (เมื่อผู้ใช้ใส่ในบัตร ATM ของพวกเขาป้อน PIN ของพวกเขาและแสดงเมนูหลัก) จะเป็นตัวเลือกที่ดีสำหรับการรวม


1
Include is used to extract use case fragments that are duplicated in multiple use casesสิ่งที่เป็นสารสกัดในขั้นตอนเหล่านั้นputs in their ATM card, enters their PIN, and is shown the main menu? ขอบคุณ
— Blaze Tama

2
ผมต้องเห็นด้วยกับการรวมทั้ง "เข้าสู่ระบบ" ขั้นตอนการเป็นผู้สมัครที่ดีสำหรับการรวม ขั้นตอนเหล่านั้นเป็นแบบฟอร์มการใช้งานของตัวเองและควรเชื่อมโยงกับกรณีการใช้อื่น ๆ โดยโพสต์เงื่อนไข -> เงื่อนไขล่วงหน้า
— บรูโน่แบรนต์

22
@Bruno - ไม่มีใครลงชื่อเข้าใช้เครื่อง ATM และเดินจากไปอย่างมีความสุข กรณีการใช้งานที่เป็นรูปธรรมจะต้องให้คุณค่าแก่นักแสดงอย่างเดียวไม่เช่นนั้นพวกเขาจะทำหน้าที่ในการย่อยสลายตามหน้าที่
— Doug Knesek

@Blaze - ส่วนต่าง ๆ ของขั้นตอนการเข้าสู่ระบบรวมถึงขั้นตอนเหล่านั้น
— Doug Knesek

1
การประเมินค่าธรรมเนียมเป็นอย่างไร UC นี่เป็นโฟลว์แบบมีเงื่อนไขในสถานการณ์ มันไม่ได้เป็นมูลค่าเพิ่มเลย มันตรงกันข้ามอย่างสมบูรณ์
— qwerty_so

113

สิ่งนี้อาจเป็นที่ถกเถียงกัน แต่“ รวมอยู่เสมอและขยายออกไปเป็นบางครั้ง” เป็นความเข้าใจผิดที่พบบ่อยมากซึ่งเกือบจะนำมาซึ่งความหมายตามความเป็นจริง นี่เป็นวิธีที่ถูกต้อง (ในมุมมองของฉันและตรวจสอบกับ Jacobson, Fowler, Larmen และการอ้างอิงอื่น ๆ 10 รายการ)

ความสัมพันธ์เป็นการพึ่งพา

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

ประกอบด้วย

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

ในแนวปฏิบัติที่ดีที่สุดของการพึ่งพาทางเดียวกรณีใช้งานพื้นฐานรู้เกี่ยวกับ (และอ้างถึง) กรณีใช้รวม แต่กรณีใช้รวมไม่ควร 'รู้' เกี่ยวกับกรณีใช้ฐาน นี่คือเหตุผลที่กรณีการใช้งานที่รวมสามารถ: a) กรณีการใช้งานพื้นฐานในสิทธิของตนเองและ b) แบ่งปันโดยจำนวนกรณีการใช้งานพื้นฐาน

ต่ออายุ

กรณีการใช้งานที่ขยายขึ้นอยู่กับกรณีการใช้งานพื้นฐาน; แท้จริงมันขยายพฤติกรรมที่อธิบายโดยกรณีการใช้ฐาน กรณีการใช้งานพื้นฐานควรเป็นกรณีการใช้งานที่สมบูรณ์แบบในสิทธิ์ของตัวเอง ('รวมอยู่ในหลักสูตรรวมอยู่ด้วย) โดยไม่ต้องมีฟังก์ชั่นเพิ่มเติมของกรณีการใช้งานเพิ่มเติม

การขยายการใช้เคสสามารถใช้ในหลายสถานการณ์:

  1. กรณีการใช้งานพื้นฐานแสดงถึงฟังก์ชั่น“ ต้องมี” ของโครงการในขณะที่กรณีการใช้งานที่ขยายแสดงถึงพฤติกรรมที่เป็นตัวเลือก (ควร / สามารถ / ต้องการ) นี่คือสิ่งที่เกี่ยวข้องกับคำหรือไม่ก็ได้ - เป็นตัวเลือกว่าจะสร้าง / ส่งมอบหรือไม่มากกว่าตัวเลือกหรือไม่ว่าบางครั้งมันจะทำงานเป็นส่วนหนึ่งของลำดับการใช้กรณีพื้นฐาน
  2. ในเฟส 1 คุณสามารถส่งเคสการใช้งานพื้นฐานซึ่งตรงตามข้อกำหนดที่จุดนั้นและเฟส 2 จะเพิ่มฟังก์ชันการทำงานเพิ่มเติมที่อธิบายโดยเคสการใช้ที่ขยาย สิ่งนี้สามารถมีลำดับที่จะดำเนินการเสมอหรือบางครั้งหลังจากส่งมอบระยะที่ 2 (ตรงกันข้ามกับความเข้าใจผิดที่เป็นที่นิยมอีกครั้ง)
  3. มันสามารถใช้ในการแยกออกมาเป็นลำดับของกรณีการใช้ฐานโดยเฉพาะอย่างยิ่งเมื่อพวกเขาแสดงพฤติกรรมที่ซับซ้อน 'พิเศษ' กับกระแสทางเลือกของตัวเอง

สิ่งสำคัญที่ควรพิจารณาคือกรณีการใช้งานที่ขยายสามารถ 'แทรก' พฤติกรรมในหลาย ๆ ที่ในการไหลของกรณีการใช้งานพื้นฐานไม่เพียงแค่ในที่เดียวเช่นกรณีการใช้งานที่รวม ด้วยเหตุผลนี้จึงไม่น่าเป็นไปได้อย่างมากที่กรณีการใช้งานที่ขยายจะเหมาะสมที่จะขยายกรณีการใช้งานพื้นฐานมากกว่าหนึ่งกรณี

สำหรับการพึ่งพากรณีการใช้งานที่ขยายจะขึ้นอยู่กับกรณีการใช้งานพื้นฐานและเป็นการอ้างอิงแบบทางเดียวอีกครั้งนั่นคือกรณีการใช้งานพื้นฐานไม่จำเป็นต้องมีการอ้างอิงใด ๆ กับกรณีการใช้งานที่ขยายเพิ่มเติมในลำดับ นั่นไม่ได้หมายความว่าคุณไม่สามารถแสดงจุดส่วนขยายหรือเพิ่ม x-ref ไปยังกรณีการใช้งานที่ขยายในที่อื่น ๆ ในเทมเพลต แต่กรณีการใช้งานพื้นฐานจะต้องสามารถทำงานได้โดยไม่ต้องใช้กรณีขยาย

สรุป

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


3
จะดีมากถ้าคุณสามารถเพิ่มการอ้างอิงสำหรับการอ้างสิทธิ์นั้นได้
— mibollma

1
ขออภัยการสร้างไดอะแกรม UML ในลักษณะนี้เนื่องจากซอฟต์แวร์ต้องผ่านการทำซ้ำที่เพิ่มฟังก์ชันการทำงานใหม่ที่จำเป็นต้องใช้เสมอในสถานะสิ้นสุดจะทำให้เกิดความสับสนและซับซ้อนโดยไม่จำเป็น ฉันชอบแนวทางของ Doug Knesek ง่ายกว่าที่จะเข้าใจและทำงานด้วยในขณะที่ไม่สร้างความสับสนหรือความซับซ้อนที่ไม่จำเป็น
— BigMac66

1
แม้ว่าคุณจะมีสิทธิ์ที่จะท้าทาย "รวมอยู่เสมอและขยายบางครั้ง" เนื่องจากเกี่ยวข้องกับการใช้อินสแตนซ์กรณีคุณเลือกที่จะใช้ประโยชน์จาก "ขยาย" ความหมายเพื่อรองรับการส่งมอบที่เพิ่มขึ้นอาจทำให้คนอื่นคิดว่า "ขยาย"
— Doug Knesek

81

ฉันมักจะใช้สิ่งนี้เพื่อจดจำทั้งสอง:

กรณีการใช้งานของฉัน: ฉันกำลังจะไปเมือง

รวมถึง -> ขับรถ

ขยาย -> เติมน้ำมัน

"เติมน้ำมัน" อาจไม่จำเป็นตลอดเวลา แต่อาจจำเป็นต้องเลือกก็ได้ตามปริมาณน้ำมันที่เหลืออยู่ในรถ "ขับรถ" เป็นข้อกำหนดเบื้องต้นดังนั้นฉันจึงรวมถึง


แต่ "เติมน้ำมัน" ขยายความจริง "ไปเมือง" ไม่ใช่วิธีอื่นใช่มั้ย
— Petr Hudeček

1
ฉันคิดว่ามันขึ้นอยู่กับมุมมองของ Petr อิมโฮ "เติมน้ำมัน" จริง ๆ แล้วสามารถยืดระยะการขับรถได้เช่นกัน
— Daniel Perník

2
ไปที่เมืองและเติมน้ำมันเบนซินเหมือนสองสิ่งที่ไม่เกี่ยวข้องอย่างสมบูรณ์ซึ่งอาจเกิดขึ้นโดยบังเอิญ
— OdraEncoded

1
@OdraEncoded ถูกต้อง เติมน้ำมันไม่ได้ขึ้นอยู่กับการไปเมือง
— nonybrighto

57

การใช้เคสใช้สำหรับทำเอกสารพฤติกรรมเช่นตอบคำถามนี้

ตอบคำถามการใช้คำถาม

พฤติกรรมจะขยายออกไปอีกถ้ามันนอกเหนือไปจาก แต่ไม่จำเป็นต้องเป็นส่วนหนึ่งของพฤติกรรมเช่นค้นคว้าคำตอบ

โปรดทราบว่าการค้นคว้าคำตอบนั้นไม่สมเหตุสมผลหากคุณไม่พยายามตอบคำถาม

ค้นคว้าคำตอบเพิ่มเติม

พฤติกรรมจะรวมอยู่ในอีกกรณีหนึ่งหากเป็นส่วนหนึ่งของพฤติกรรมรวมเช่นล็อกอินเข้าสู่การแลกเปลี่ยนสแต็ก

เข้าสู่ระบบเพื่อแลกเปลี่ยนสแตกรวมถึง

เพื่อชี้แจงภาพประกอบที่เป็นจริงก็ต่อเมื่อคุณต้องการที่จะตอบที่นี่ในกองมากเกินไป :)

นี่คือข้อกำหนดทางเทคนิคจากUML 2.5หน้า 671-672

ฉันเน้นสิ่งที่ฉันคิดว่าเป็นจุดสำคัญ

ขยาย

การขยายคือความสัมพันธ์จากการขยาย UseCase (ส่วนขยาย) ไปยัง UseCase เพิ่มเติม (ExtendedCase) ที่ระบุวิธีและเวลาที่พฤติกรรมที่กำหนดไว้ใน UseCase ที่ขยายสามารถแทรกลงในลักษณะการทำงานที่กำหนดไว้ใน UseCase ที่ขยาย ส่วนขยายเกิดขึ้นที่จุดส่วนขยายอย่างน้อยหนึ่งจุดที่กำหนดไว้ใน UseCase ที่ขยายเพิ่ม

Extend มีวัตถุประสงค์เพื่อใช้เมื่อมีพฤติกรรมเพิ่มเติมบางอย่างที่ควรเพิ่มอาจเป็นไปตามเงื่อนไขกับพฤติกรรมที่กำหนดไว้ใน UseCases หนึ่งรายการหรือมากกว่า

usecase ขยายที่ถูกกำหนดให้เป็นอิสระจากการขยาย usecase และมีความหมายเป็นอิสระจาก usecase บนมืออื่น ๆ ที่ขยาย usecaseมักจะกำหนดพฤติกรรมที่อาจไม่จำเป็นต้องมีความหมายด้วยตัวเอง แต่การขยาย UseCase จะกำหนดชุดของการเพิ่มขึ้นของลักษณะการทำงานแบบแยกส่วนที่เพิ่มการดำเนินการของ UseCase ที่เพิ่มขึ้นภายใต้เงื่อนไขที่เฉพาะเจาะจง

...

รวม

รวมเป็น DirectedRelationship ระหว่างสอง UseCases ซึ่งระบุว่าพฤติกรรมของUseCase ที่รวมไว้ (การเพิ่ม) ถูกแทรกลงในลักษณะการทำงานของ Include UseCase ( theincluding ) นอกจากนี้ยังเป็นชนิดของ NamedElement เพื่อให้สามารถมีชื่อในบริบทของ UseCase ที่เป็นเจ้าของ (theincludeCase) UseCase ที่รวมถึงอาจขึ้นอยู่กับการเปลี่ยนแปลงที่เกิดขึ้นจากการดำเนินการ UseCase ที่รวมไว้ UseCase ที่รวมไว้ต้องพร้อมใช้งานเพื่อให้สามารถอธิบายลักษณะการทำงานของ UseCase ได้อย่างสมบูรณ์

ความสัมพันธ์แบบรวมมีวัตถุประสงค์เพื่อใช้เมื่อมีส่วนร่วมของพฤติกรรมของ UseCases ตั้งแต่สองรายการขึ้นไป นี้ เป็นส่วนหนึ่งที่พบบ่อยสกัดไปแล้ว usecase แยกต่างหากที่จะรวมทุก usecases ฐานมีส่วนนี้ในการร่วมกัน เนื่องจากการใช้งานหลักของความสัมพันธ์แบบรวมมีไว้เพื่อนำชิ้นส่วนทั่วไปกลับมาใช้ใหม่สิ่งที่เหลืออยู่ในUseCase พื้นฐานมักจะไม่สมบูรณ์ในตัวเองแต่ขึ้นอยู่กับส่วนต่าง ๆ ที่มีความหมาย สิ่งนี้สะท้อนให้เห็นในทิศทางของความสัมพันธ์ซึ่งบ่งชี้ว่าฐาน UseCase ขึ้นอยู่กับการเพิ่ม แต่ไม่ใช่ในทางกลับกัน

...


23

ฉันคิดว่ามันเป็นสิ่งสำคัญที่จะเข้าใจความตั้งใจของการรวมและขยาย:

"รวมถึงความสัมพันธ์ที่มีไว้สำหรับการนำพฤติกรรมรูปแบบโดยการใช้งานอื่นในขณะที่ความสัมพันธ์ขยายมีไว้สำหรับ การเพิ่มส่วนกรณีการใช้งานที่มีอยู่เช่นเดียวกับสำหรับการสร้างแบบจำลองตัวเลือกบริการของระบบ" (Overgaard และ Palmkvist, กรณีการใช้งาน:. รูปแบบและพิมพ์เขียวแอดดิสัน - เวสลีย์, 2004)


เรื่องนี้อ่านให้ฉันเป็น:

รวม = นำการใช้งานซ้ำมาใช้ (เช่นใช้ฟังก์ชันที่รวมอยู่หรือสามารถใช้ที่อื่นในระบบ) รวมถึงหมายถึงการอ้างอิงในกรณีการใช้งานอื่น

ขยาย = เพิ่ม (ไม่ได้นำมาใช้ใหม่) การทำงานและยังใดตัวเลือกฟังก์ชั่น ขยายดังนั้นสามารถแสดงหนึ่งในสองสิ่ง:
1. การเพิ่มคุณสมบัติ / ความสามารถใหม่ให้กับกรณีการใช้งาน (ตัวเลือกหรือไม่)
2. ตัวเลือกใด ๆกรณีการใช้งาน (ที่มีอยู่หรือไม่)

สรุป:
รวมถึง = นำมาใช้ใหม่ของฟังก์ชันการทำงาน
ขยาย = ใหม่และ / หรือฟังก์ชั่นเสริม

คุณมักจะพบการใช้งานครั้งที่ 2 (เช่นฟังก์ชั่นเสริม) ของการขยายเพราะถ้าฟังก์ชั่นไม่ได้เป็นตัวเลือกเวลาส่วนใหญ่จะถูกสร้างไว้ในกรณีการใช้งานของตัวเองแทนที่จะเป็นส่วนขยาย อย่างน้อยนั่นก็เป็นประสบการณ์ของฉัน (Julian C ชี้ให้เห็นว่าบางครั้งคุณเห็นการใช้งานครั้งที่ 1 (เช่นการเพิ่มคุณสมบัติใหม่) ของการขยายเมื่อโครงการเข้าสู่ระยะที่ 2)


23

เพื่อให้ง่ายขึ้น

สำหรับ include

  1. เมื่อกรณีการใช้งานพื้นฐานถูกดำเนินการกรณีการใช้งานที่รวมอยู่จะถูกดำเนินการทุกเวลา
  2. กรณีการใช้งานพื้นฐานจำเป็นต้องทำให้เสร็จสิ้นกรณีการใช้งานที่รวมไว้เพื่อให้เสร็จสมบูรณ์

ตัวอย่างทั่วไป: ระหว่างล็อกอินและยืนยันรหัสผ่าน

(เข้าสู่ระบบ) --- << รวม >> --- > (ยืนยันรหัสผ่าน)

เพื่อให้กระบวนการเข้าสู่ระบบสำเร็จ "ยืนยันรหัสผ่าน" จะต้องประสบความสำเร็จเช่นกัน


สำหรับ extend

  1. เมื่อกรณีการใช้งานฐานจะถูกดำเนินการกรณีที่ใช้งานได้ยาวนานจะถูกดำเนินการเพียงบางครั้ง
  2. กรณีการใช้งานเพิ่มเติมจะเกิดขึ้นเฉพาะเมื่อตรงตามเกณฑ์ที่กำหนด

ตัวอย่างทั่วไป: ระหว่างการเข้าสู่ระบบและแสดงข้อความข้อผิดพลาด (บางครั้งเกิดขึ้นเท่านั้น)

(เข้าสู่ระบบ) < --- << ขยาย >> --- (แสดงข้อความผิดพลาด)

"แสดงข้อความแสดงข้อผิดพลาด" บางครั้งก็เกิดขึ้นเมื่อกระบวนการล็อกอินล้มเหลว


ตัวอย่างที่ดี!
— Pavel Durov

15

ฉันคิดว่าสิ่งที่ msdn อธิบายไว้ที่นี่นั้นค่อนข้างเข้าใจง่าย

รวม [5]

รวมถึงการใช้กรณีการโทรหรือเรียกหนึ่งรวม การรวมจะใช้เพื่อแสดงว่ากรณีการใช้งานแตกเป็นขั้นตอนที่เล็กลงอย่างไร กรณีการใช้งานรวมอยู่ที่ปลายหัวลูกศร

ขยาย [6]

ในขณะเดียวกันกรณีใช้งานที่ขยายเพิ่มจะเพิ่มเป้าหมายและขั้นตอนให้กับเคสที่ใช้เพิ่มเติม ส่วนขยายทำงานภายใต้เงื่อนไขบางประการเท่านั้น กรณีการใช้เพิ่มเติมอยู่ที่ปลายหัวลูกศร

ป้อนคำอธิบายรูปภาพที่นี่


อย่างน้อยคุณควรพูดสาระสำคัญในคำตอบของคุณไม่เพียง แต่เพิ่มลิงค์ไปยังคำตอบ ยิ่งไปกว่านั้นคำอธิบายที่คุณอ้างอิงไม่ดีหรือแม่นยำมากนัก
— Geert Bellekens

สวัสดี @GeertBellekens ฉันได้เพิ่มรายละเอียดเพื่ออธิบายความแตกต่างระหว่างการรวมและการขยาย IMHO แผนภาพแสดงความแตกต่างอย่างชัดเจนและนั่นคือสิ่งที่แผนภาพใช้
— Etic

ฉันดีใจที่คุณเพิ่มคำอธิบาย แต่ฉันยังคิดว่าพวกเขาไม่ดีหรือแม่นยำ ผู้คน (แม้แต่หรือโดยเฉพาะอย่างยิ่งถ้าพวกเขาเขียนหา msdn) ควรหยุดประดิษฐ์คำจำกัดความของตนเองสำหรับสิ่งที่กำหนดไว้แล้วในมาตรฐาน
— Geert Bellekens

15

เรามาทำให้เรื่องนี้ชัดเจนยิ่งขึ้น เราใช้includeทุกครั้งที่เราต้องการแสดงความจริงว่าการมีอยู่ของกรณีหนึ่งขึ้นอยู่กับการมีอยู่ของอีกกรณี

ตัวอย่าง:

ผู้ใช้สามารถช็อปปิ้งออนไลน์ได้เฉพาะหลังจากที่เขาเข้าสู่ระบบบัญชีของเขา กล่าวอีกนัยหนึ่งเขาไม่สามารถช็อปปิ้งใด ๆ จนกว่าเขาจะเข้าสู่ระบบบัญชีของเขา

ผู้ใช้ไม่สามารถดาวน์โหลดจากเว็บไซต์ก่อนที่จะอัปโหลดเนื้อหา ดังนั้นฉันไม่สามารถดาวน์โหลดได้หากไม่มีการอัปโหลด

คุณเข้าใจไหม?

มันเกี่ยวกับผลตามเงื่อนไข ฉันไม่สามารถทำได้ถ้าก่อนหน้านี้ฉันไม่ได้ทำเช่นนั้นฉันไม่สามารถทำเช่นนี้หากก่อนหน้านี้ผมไม่ได้ทำอย่างนั้น

Includeอย่างน้อยผมคิดว่านี่เป็นวิธีการที่เหมาะสมที่เราใช้ ฉันมักจะคิดว่าตัวอย่างกับแล็ปท็อปและการรับประกันจากด้านบนนั้นน่าเชื่อถือที่สุด!


1
เกี่ยวกับการขยาย?
— AlphaGoku

8

เมื่อใดก็ตามที่มีข้อกำหนดเบื้องต้นสำหรับ usecase ให้ไปรวม

สำหรับ usecases ที่มีการพิสูจน์ตัวตนสถานการณ์กรณีที่เลวร้ายที่สุดหรือเป็นทางเลือกให้ไปขยาย ..

ตัวอย่าง: สำหรับกรณีการใช้งานในการหาทางเข้าชมการนัดหมายจองตั๋วคุณต้องกรอกแบบฟอร์ม (แบบฟอร์มลงทะเบียนหรือข้อเสนอแนะ) .... นี่คือที่มารวมถึง ..

ตัวอย่าง: สำหรับกรณีการใช้งานที่ยืนยันว่าลงชื่อเข้าใช้หรือลงชื่อเข้าใช้บัญชีของคุณการพิสูจน์ตัวตนของคุณเป็นสิ่งที่ต้องคำนึงถึงกรณีที่เลวร้ายที่สุดเช่นหนังสือกลับมาอย่างดี .. ไม่ได้รับการจอง .. จ่ายบิลหลังวันที่ ที่ขยายมาเล่น ...

อย่ารวมมากเกินไปและขยายในไดอะแกรม

ให้มันเรียบง่ายงัว !!!


6

นอกจากนี้ระวังของรุ่น UML: มันเป็นเวลานานแล้วที่ << >> ใช้และรวมถึง << >> ได้ถูกแทนที่ด้วย << >> รวมและขยาย << >> โดย<< >> ขยายและทั่วไป
สำหรับฉันที่มักจะเป็นจุดที่ทำให้เข้าใจผิด: เป็นตัวอย่างโพสต์และลิงก์ของสเตฟานีเกี่ยวกับรุ่นเก่า:

เมื่อชำระเงินสำหรับรายการคุณอาจเลือกที่จะชำระเงินในการจัดส่งจ่ายโดยใช้ paypal หรือชำระเงินด้วยบัตร สิ่งเหล่านี้เป็นทางเลือกทั้งหมดสำหรับกรณีการใช้ "ชำระค่าสินค้า" ฉันอาจเลือกตัวเลือกใด ๆ เหล่านี้ขึ้นอยู่กับความชอบของฉัน

อันที่จริงไม่มีทางเลือกอื่นที่จะ "จ่ายเงินสำหรับสินค้า"! ในปัจจุบัน UML การจ่ายเงินเมื่อส่งมอบเป็นการขยายและ "จ่ายโดยใช้ paypal" / "จ่ายด้วยบัตร" เป็นความเชี่ยวชาญ


5

"รวม" จะถูกใช้เพื่อขยายกรณีการใช้งานพื้นฐานและเป็นเงื่อนไขที่ต้องใช้เช่นการใช้งานกรณีที่เรียกใช้จะต้องเรียกใช้สำเร็จเพื่อให้การใช้งานพื้นฐานเสร็จสมบูรณ์

เช่นพิจารณากรณีของบริการอีเมลที่นี่ "เข้าสู่ระบบ" เป็นกรณีการใช้งานที่รวมอยู่ซึ่งจะต้องเรียกใช้เพื่อส่งอีเมล (กรณีการใช้งานพื้นฐาน)

"ยกเว้น" ในอีกกรณีหนึ่งคือกรณีใช้เสริมซึ่งขยายกรณีใช้งานพื้นฐานกรณีใช้งานพื้นฐานสามารถทำงานได้สำเร็จแม้จะไม่มีการเรียกใช้ / เรียกกรณีใช้งานที่ขยายออกมา

เช่นพิจารณา "การจัดซื้อแล็ปท็อป" เป็นกรณีการใช้งานพื้นฐานและ "การรับประกันเพิ่มเติม" เป็นกรณีขยายการใช้งานที่นี่คุณสามารถเรียกใช้กรณีการใช้งานพื้นฐาน "ซื้อแล็ปท็อป" ได้โดยไม่ต้องมีการรับประกันเพิ่มเติม


กรณีการชำระเงิน "ทำ" อาจทำหน้าที่เป็น "รวม" สำหรับการซื้อแล็ปท็อปหรือไม่ ฉันพูดแบบนี้เพราะมันดีที่มีตัวอย่าง 'กัน' ในสถานการณ์เดียวกัน นอกจากนี้การชำระเงินเป็นสิ่งที่จะใช้ในสถานการณ์ที่แตกต่างกันมากมายดังนั้นจึงดูเหมือนว่าผู้สมัครที่เหมาะสมสำหรับ <<รวมถึง>>
— baxx

Loginไม่ใช่กรณีการใช้งานเลย มันเป็นฟังก์ชั่นที่ทำขึ้นเพื่อเติมเต็มเงื่อนไขล่วงหน้า
— qwerty_so

5

นี่เป็นแหล่งข้อมูลที่ยอดเยี่ยมพร้อมคำอธิบายที่ดี: กรณีใช้งานคืออะไร กรณีขยายเวลาการใช้งานคืออะไร

กรณีการใช้งานที่ขยายโดยทั่วไปจะกำหนดพฤติกรรมที่เป็นตัวเลือก มันเป็นอิสระจากกรณีการใช้งานที่ขยาย

รวมใช้เพื่อแยกส่วนทั่วไปของพฤติกรรมของกรณีการใช้งานสองกรณีขึ้นไป


4

องค์ประกอบไดอะแกรม

  • นักแสดง: เรียกอีกอย่างว่าบทบาท ชื่อและแบบแผนของนักแสดงสามารถเปลี่ยนแปลงได้ในแท็บคุณสมบัติ

  • การสืบทอด: การปรับแต่งความสัมพันธ์ระหว่างนักแสดง ความสัมพันธ์นี้สามารถมีชื่อและแบบแผน

  • ใช้กรณี: สิ่งเหล่านี้สามารถมีคะแนนส่วนขยาย

  • จุดส่วนขยาย: นี่เป็นการกำหนดตำแหน่งที่ตั้งที่สามารถเพิ่มส่วนขยาย

  • สมาคม: ระหว่างบทบาทและกรณีการใช้งาน มันจะมีประโยชน์ที่จะให้ชื่อที่พูดสมาคม

  • การพึ่งพา: ระหว่างกรณีการใช้งาน การพึ่งพามักจะมีกฎตายตัวเพื่อกำหนดบทบาทของการพึ่งพาได้ดียิ่งขึ้น ในการเลือกภาพพิมพ์ให้เลือกการพึ่งพาจากไดอะแกรมหรือบานหน้าต่างนำทางจากนั้นเปลี่ยนภาพรวมในแท็บคุณสมบัติ มีการพึ่งพาสองแบบพิเศษ: <<extend>>และ<<include>>ที่โพไซดอนมีปุ่มของตัวเอง (ดูด้านล่าง)

  • ขยายความสัมพันธ์: ความสัมพันธ์แบบทิศทางเดียวระหว่างสองกรณีใช้งาน การขยายความสัมพันธ์ระหว่างกรณีใช้งาน B และกรณีใช้ A หมายความว่าพฤติกรรมของ B สามารถรวมอยู่ใน A

  • รวมความสัมพันธ์: ความสัมพันธ์แบบทิศทางเดียวระหว่างกรณีใช้งานสองกรณี ความสัมพันธ์ระหว่างกรณีการใช้งาน A และ B หมายถึงพฤติกรรมของ B นั้นรวมอยู่ใน A เสมอ

  • เส้นขอบของระบบ: เส้นขอบของระบบไม่ได้ถูกนำไปใช้จริงตามองค์ประกอบแบบจำลองในโพไซดอนสำหรับ UML คุณสามารถวาดสี่เหลี่ยมส่งไปยังพื้นหลังและใช้เป็นเส้นขอบระบบโดยใส่เคสการใช้ที่เกี่ยวข้องทั้งหมดไว้ในสี่เหลี่ยมผืนผ้า


4

ทั้งสอง<include>และ<extend>ขึ้นอยู่กับคลาสฐาน แต่<extend>เป็นทางเลือกนั่นคือมันมาจากคลาสฐาน แต่ในมุมมองของผู้ใช้มันอาจจะใช้หรืออาจไม่ได้ใช้

<include> ถูกรวมอยู่ในคลาสฐานคือมันเป็นข้อบังคับที่จะใช้ <include>ในกรณีการใช้งานของคุณมิฉะนั้นจะถือว่าไม่สมบูรณ์

เช่น:

ในการก่อสร้างเครื่อง ATM (ตามมุมมองของผู้ใช้):

1: ถอนเงินฝากเงินสดและตรวจสอบบัญชีที่อยู่ภายใต้<extend>เพราะมันขึ้นอยู่กับผู้ใช้ว่าจะถอนหรือฝากหรือตรวจสอบ สิ่งเหล่านี้เป็นทางเลือกที่ผู้ใช้ทำ

2: "ใส่พินการวางการ์ดการถอดการ์ด" สิ่งเหล่านี้เป็นสิ่งที่เกิดขึ้น<include>เนื่องจากผู้ใช้จะต้องใส่การ์ดและป้อนพินที่ถูกต้องสำหรับการตรวจสอบ


3

ฉันไม่แนะนำให้ใช้สิ่งนี้เพื่อจดจำสองสิ่งนี้:

กรณีการใช้งานของฉัน: ฉันกำลังจะไปเมือง

รวมถึง -> ขับรถ

ขยาย -> เติมน้ำมัน

ฉันอยากให้คุณใช้: กรณีการใช้ของฉัน: ฉันกำลังจะไปที่เมือง

ขยาย -> ขับรถ

รวมถึง -> เติมน้ำมัน

กำลังสอนว่าการขยายความสัมพันธ์ยังคงมีพฤติกรรมของคลาสฐานต่อไป ฟังก์ชันพื้นฐานระดับต้องมี ความสัมพันธ์แบบรวมในอีกทางหนึ่งคล้ายกับฟังก์ชั่นที่อาจเรียกได้ว่า พฤษภาคมเป็นตัวหนา

ดังจะเห็นได้จากการ ใช้ agilemodeling ซ้ำใน Use-Case Models


ควรอ่าน "เติมน้ำมัน -> ขยาย" เนื่องจาก UC หลักของคุณไม่ขยาย "เติมน้ำมัน" ยกเว้นคุณเป็น บริษัท น้ำมัน
— qwerty_so

3

ความแตกต่างระหว่างทั้งสองได้รับการอธิบายที่นี่ แต่สิ่งที่ไม่ได้รับการอธิบายคือความจริงที่<<include>>และ<<extend>>ไม่ควรใช้เลย

ถ้าคุณอ่าน Bittner / Spence คุณรู้ว่าการใช้เคสเกี่ยวกับการสังเคราะห์ไม่ใช่การวิเคราะห์ กรณีการใช้ซ้ำเป็นเรื่องไร้สาระ มันแสดงให้เห็นอย่างชัดเจนว่าคุณตัดโดเมนของคุณผิด มูลค่าเพิ่มจะต้องไม่ซ้ำกันต่อ se การนำมูลค่าเพิ่มกลับมาใช้ใหม่เท่านั้นที่ฉันรู้จักคือแฟรนไชส์ ดังนั้นถ้าคุณอยู่ในธุรกิจเบอร์เกอร์ แต่งานของคุณในฐานะ BA คือการพยายามหา USP และจะต้องนำเสนอในกรณีการใช้งานที่ดี

เมื่อใดก็ตามที่ฉันเห็นคนใช้หนึ่งในความสัมพันธ์เหล่านั้นก็คือเมื่อพวกเขาพยายามที่จะสลายตัวการทำงาน และนั่นเป็นสิ่งที่ผิดธรรมดา

พูดง่าย ๆ : ถ้าคุณสามารถตอบเจ้านายของคุณได้โดยไม่ลังเลว่า "ฉันทำไปแล้ว ... " แล้ว "... " คือกรณีการใช้งานของคุณเนื่องจากคุณมีเงินสำหรับการทำมัน (นั่นจะทำให้ชัดเจนว่า "การเข้าสู่ระบบ" ไม่ใช่กรณีการใช้งานเลย)

ในแง่ที่ว่าการค้นหากรณีการใช้งานแบบยืนด้วยตนเองที่รวมหรือขยายกรณีการใช้งานอื่น ๆ นั้นไม่น่าเป็นไปได้ ในที่สุดคุณสามารถใช้<<extend>>เพื่อแสดงทางเลือกของระบบของคุณเช่นโครงร่างสิทธิ์การใช้งานบางตัวที่อนุญาตให้รวมกรณีการใช้งานสำหรับสิทธิ์ใช้งานบางส่วนหรือเพื่อละเว้น แต่อย่างอื่น - เพียงหลีกเลี่ยงพวกเขา


3

การขยายใช้เมื่อคุณเข้าใจว่ากรณีการใช้งานของคุณซับซ้อนเกินไป ดังนั้นคุณจึงแยกขั้นตอนที่ซับซ้อนเป็น "ส่วนขยาย" การใช้กรณีของตัวเอง

การรวมจะใช้เมื่อคุณเห็นพฤติกรรมทั่วไปในสองกรณีการใช้งาน ดังนั้นคุณจึงสรุปพฤติกรรมที่เหมือนกันเป็นกรณีการใช้ "นามธรรม" แยกต่างหาก

(อ้างอิง: Jeffrey L. Whitten, Lonnie D. Bentley, การวิเคราะห์ระบบและวิธีการออกแบบ, McGraw-Hill / Irwin, 2007)


1
ส่วนขยายไม่มีส่วนเกี่ยวข้องกับกรณีการใช้งานที่ซับซ้อนเกินไป วิธีการดังกล่าวจะนำไปสู่การสร้างการย่อยสลายการทำงานมากกว่าแบบจำลองการใช้งานจริงกรณี
— Doug Knesek

1
ฉันคิดว่าแนวคิดเกี่ยวกับวิศวกรรมซอฟต์แวร์และโดยทั่วไปทุกอย่างที่เข้าใกล้วิทยาศาสตร์ของมนุษย์นั้นอิงจากความคิดเห็นมาก ฉันได้รวมการอ้างอิง (ดูหน้า 248) อย่าเป็นเรื่องยากเกินไปสำหรับผู้ชาย :)
— mrmashal

3

รวมถึงกรณีการใช้งานอย่างใดอย่างหนึ่งความสัมพันธ์ที่จะช่วยให้การรวมถึงขั้นตอนของการใช้กรณีอื่น

ตัวอย่างเช่นสมมติว่าคุณมีบัญชี Amazon และคุณต้องการตรวจสอบคำสั่งซื้อเป็นไปไม่ได้ที่จะตรวจสอบคำสั่งซื้อโดยไม่ต้องลงชื่อเข้าใช้บัญชีของคุณก่อน ดังนั้นการไหลของเหตุการณ์ต้องการดังนั้น ...

ป้อนคำอธิบายรูปภาพที่นี่

ขยายความสัมพันธ์ที่จะใช้ในการเพิ่มขั้นตอนพิเศษเพื่อการไหลเวียนของกรณีการใช้งานที่มักจะเป็นขั้นตอนที่ไม่จำเป็น ...

ป้อนคำอธิบายรูปภาพที่นี่

ลองนึกภาพว่าเรายังคงพูดถึงบัญชีอเมซอนของคุณ ให้ถือว่ากรณีฐานเป็นคำสั่งซื้อและกรณีการใช้งานส่วนขยายเป็นAmazon Prime ผู้ใช้สามารถเลือกที่จะสั่งซื้อสินค้าเป็นประจำหรือผู้ใช้มีตัวเลือกในการเลือก Amazon Prime ซึ่งทำให้มั่นใจว่าการสั่งซื้อของเขาจะมาถึงเร็วขึ้นด้วยต้นทุนที่สูงขึ้น

อย่างไรก็ตามโปรดทราบว่าผู้ใช้ไม่จำเป็นต้องเลือก Amazon Prime นี่เป็นเพียงตัวเลือกพวกเขาสามารถเลือกที่จะไม่สนใจกรณีการใช้งานนี้


กรณีการใช้งานประเภทใดควรAmazon Primeเป็นอย่างไร มันไม่ได้มีคำกริยา
— qwerty_so

0

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

มีการใช้งานที่หลากหลายของการขยาย แต่ฉันชอบที่จะคิดว่ามันเป็นทางเลือกที่อาจหรือไม่อาจใช้ ตัวอย่างเช่น - ยังอยู่ในไซต์อีคอมเมิร์ซ เมื่อชำระเงินสำหรับรายการคุณอาจเลือกที่จะชำระเงินในการจัดส่งจ่ายโดยใช้ paypal หรือชำระเงินด้วยบัตร สิ่งเหล่านี้เป็นทางเลือกทั้งหมดสำหรับกรณีการใช้ "ชำระค่าสินค้า" ฉันอาจเลือกตัวเลือกใด ๆ เหล่านี้ขึ้นอยู่กับความชอบของฉัน

เพื่อความชัดเจนและกฎเกณฑ์การใช้งานโดยรอบอ่านบทความของฉันที่นี่:

http://businessanalystlearnings.com/ba-techniques/2013/2/20/use-case-diagram-the-basics


1
ยินดีต้อนรับสู่ Stack Overflow! ขอบคุณสำหรับการโพสต์คำตอบของคุณ! โปรดอ่านคำถามที่พบบ่อยเกี่ยวกับการส่งเสริมตนเองอย่างรอบคอบ ไม่ใช่คำตอบที่แย่จริงๆ แต่ให้ระวังสิ่งที่คำถามที่พบบ่อยพูดถึงโพสต์การโปรโมตด้วยตนเอง
— Andrew Barber

แผนภาพ UC ที่ด้านล่างของลิงก์ของคุณเป็นเพียงรูปแบบการต่อต้าน ไม่ว่า จะเป็นบัญชีloginหรือcreateกรณีใช้งาน ทั้งสองฟังก์ชั่น ดังนั้น -1
— qwerty_so
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.