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


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.