توی این نوشتار در پاسخ به یکی از خوانندگان نمودار جریان داده رو توضیح میدم (البته اونقدری که خودم فهمیدم!!!).
پیش از آنکه فناوری شیءگرا (Object Oriented) بر فرایندهای تحلیل و طراحی مسلط شود، طراحان و تحلیلگران سیستم از روشی به نام «تحلیل و طراحی ساختیافته» (Structured Analysis and Design یا SAD) استفاده میکردند و برای کار خود ابزارهایی در اختیار داشنتد که یکی از آنها نمودار جریان داده است. نمودار جریان داده (Data Flow Diagram یا DFD) تلاش میکند تا جریان گذر دادهها در سیستم را به صورت یک نمودار تصویری نمایش دهد. منظور از جریان گذر داده (Data Flow) مسیری است که یک داده ورودی طی میکند تا به یک داده خروجی تبدیل شود. به عبارتی میتوان گفت که پردازشهایی را که بر روی داده انجام میشود و مسیری که داده از یک پروسه به پروسه دیگر طی میکند را نمایش میدهد. نمودار جریان داده برای سیستمهایی که پردازشهای سنگین و پیچیده دارند مفید است و به طراح کمک میکند تا بدون در نظر گرفتن جزئیات پیاده سازی هریک از زیرفرایندها (یا همان ایستگاههای میانی)، فرایند بزرگتر را به اجزای سازنده و مسیر بین آنها تجزیه کند. وی سپس میتواند هر یک از این «فرایند های میانی» را به صورت یک مسئله طراحی جدید حل کند. میزان جزیئات بیان شده در نمودار جریان داده را با «سطح» (Level) آن نمایش میدهند. نمودار سطح صفر تشکیل شده از یک (یا چند) منبع داده ورودی، یک (یا چند) مسیر داده خروجی و تنهایک تابع (یا همان فرایند) که آن را دایره و مسیر های ورودی و خروجی را با خط نمایش میدهند. نمودار سطح یک این تابع را به اجزای درونیش تفکیک میکند و مسیر داخلی داده را نمایش میدهد (که یک مرحله به حل مسئله اصلی نزدیک تر است) و فرایند همینگونه ادامه دارد تا انجایی که تابعهای ترسیم شده براحتی قابل نوشتن باشند.
دو نمودار دیگر با نمودار جریان داده پیوستگی نزدیک دارند که عبارتاند از «نمودار زمینه سیستم» (System Context Diagram یا SCD) و «نمودار جریان سیستم» (System Flow Diagram یا SFD). نمودار زمینه سیستم مرزبندی سیستم با محیط یبرون و منابع ورودی و خروجی دادهها را نمایش میدهد و بنابر این گونهای از نمودار جریان داده است که مسیرهای ورودی و خروجی داده را نسبت به کل سیستم (و نه یک فرایند خاص در سیستم) نمایش میدهد. نمودار جریان سیستم نحوه کارکرد سیستم را نمایش میدهد و بیشتر به «جریان کنترل» و «دنباله» رفتاری سیستم مربوط میشود تا به جریانی که دادهها در سیستم میپیمایند.
تفاوت عمده نمودار جریان داده با فلوچارت این است که نمودار جریان داده کل مسئله را از زاویه دید دیگری مینگرد. هدف از رسم فلوچارت نمایش گرافیکی یک «الگوریتم» است که نسبت به یک تابع در نمودار جریان داده ها حوزه کارکردی کوچکتری دارد و هدف جزئیتری را دنبال میکند. نمودار جریان دادهها (بر خلاف فلوچارت) بر روی «فرایند» هایی که «جریان های دادهها» میپیمایند تمرکز دارد در حالی که فلوچارت بدنبال ارائه دنبالهای از قدمهای ساده است که در پایان نتیجهای را بدست میدهند. البته توجه کنید که کل قضیه «نسبی» است و اگر جریان دادهها را به اندازه کافی خرد کنیم در پایان به الگوریتمها میرسیم و اگر کل سیستم را یک «ابر الگوریتم» در نظر بیاوریم (که براستی همینگونه هم هست) آنگاه الگوریتم به جریان دادهها بدل میشود. از نتایج مهم این تفاوت در دیدگاهها آن است که جریان دادهها به «شرایطی» که باعث چند شاخه شدن مسیر خروجی توابع میشوند توجهی ندارد و تنها این مسیرها را (بدون ذکر علت) نمایش میدهد در حالی که مراحل شرطی و شاخهبندی مسیر اجرا توسط شرطهایکی از پایههای جدا نشدنی فلوچارت است.
ممکن است کل این مطالب در آغاز بسیار گنگ و غیرقابل فهم بهنظر بیایند؛ دلیل اصلی آن این است که نمودار جریان داده یک بحث «مفهومی» است و علاوه بر جنبه کاری و عملی یک جنبه «فلسفی» نیز دارد. برای درک و استفاده درست از آن باید به هر دو جنبه مسلط شوید. به این معنی که برای چند سیستم نمودار جریان داده رسم کنید و در عین حال بفهمید که همه اینها چرا مفید است و مثلا نمودار جریان داده چه کاری میکند که فلوچارت نمیکند (یا بر عکس). پس از آنکه «دلیل وجودی» نمودار جریان داده را درک کردید و توانستید چند نمودار جریان داده ساده را رسم کنید، آنگاه تمامی این مطالب (و بسیاری چیزهای دیگر) برای شما روشن و واضح خواهد شد.
مفید بود، ممنون
با عرض احترام این نوشته های تو درتو و زیاد رو که دیدم اصلا رغبت نکردم بخونمشون ولی تیتراش جذاب بودن. در کل چیزی از وبلاگتون نفهمیدم!
دوست گرانقد snjonline
پس از خواندن نظرات دیگر دوستانی که بزرگواری کرده و برای وبلاگ من نظر دادهاند، خواهید دانست که گویا تنها شما هستید که چیزی نفهمیدهاید. احتملا چون رشته شما چیز دیگری است اما اگر نرمافزار میخوانید و از این نوشته چیزی دستگیرتان نشده است …. وبلاگ در باره مهندسی نرمافزار و در قالب گزارش پیشرفت یک پروژه است.
در هر حال اگر پرسشی دارید که من میتوانم پاسخ بگوییم خوشحال خواهم شد.
با عرض سلام و تبريك سال نو .
مطلب خوبي بود.خواهشي كه داشتم از شما اينكه راجب دو نمودار SCD و SFD بيشتر توضيح بديد لطفا با مثال باشه.
تشكر
مفید بود
سلام
مهندس اشکان درسته من نرم افزار نخوندم ولی تو پست قبلی هم به کم اغراق کردم که چیزی نفهمیدم همچین بی هیچی هم نه بابا ما یه چیزایی حالیمونه اما بیشترشو متوجه نمیشم! بعضیاش رو که طنز نوشتی سعی کردم تا تهشو حالیم بشه و بخندم.
ممنون که میتوانید به سوالات جواب بدهید و اشکالات نرم افزاری من رو برطرف کنید. حتما مزاحم میشم.
همچین هیچی هم که نفهمیدم یه چیزایی فهمیدم! چرا کامنت قبلی منو حذف کردید!
با سلام
واقعاً دمت گرم خيلي وقت بود داشتم جستجو مي كردم تا اينكه به مطلب شما رسيدم و هاجتمو گرفتم فقط اگه يه خط بيشتر بود خيلي بهتر بود ولي روي هم رفته دستت درد نكنه كه اينا رو نوشتي و در كل جيگرتو …
قربون شما. من متعلق به همه شما هستم
snjonline ما چی رو حذف کردیم ؟