مخطط انسيابي لعملية تطوير البرمجيات

مخطط انسيابي لعملية تطوير البرمجيات: الرموز والأنواع والأمثلة

يحوّل مخطط انسيابي لعملية تطوير البرمجيات سلسلة من الخطوات والقرارات والنتائج إلى رسم بياني يمكن لأي شخص قراءته في ثوانٍ. فبينما تتطلب فقرة نصية قراءة متأنية لفهم ترتيب العمليات والشروط التي تُغيّر المسار، يُظهر المخطط الانسيابي ذلك مكانيًا: ابدأ من هنا، نفّذ هذا، تحقّق من هذا الشرط، تفرع يمينًا أو يسارًا، واستمر حتى النهاية. هذا التمثيل المكاني هو ما يجعل المخططات الانسيابية واحدة من أكثر أدوات الرسم البياني استخدامًا في هندسة البرمجيات، بعد أكثر من سبعين عامًا على ظهورها.

يغطي هذا الدليل كل ما هو مطلوب لقراءة وإنشاء وتطبيق مخططات التدفق في سياق تطوير البرمجيات: الرموز القياسية ومعنى كل منها، والأنواع المختلفة لمخططات التدفق ومتى يتم استخدام كل منها، وأمثلة عملية بتنسيق يمكنك نسخه وعرضه على الفور، وكيفية ارتباط مخططات التدفق بالرمز الفعلي الذي تمثله، بما في ذلك كيفية إنشاء هذا الارتباط تلقائيًا بدلاً من رسمه يدويًا.

مخططات انسيابية تُحدّث نفسها

SMART TS XL يقوم بإنشاء مخططات انسيابية دقيقة مباشرة من التعليمات البرمجية المصدرية الخاصة بك - لا حاجة للرسم اليدوي.

يتعلم أكثر

ما هو مخطط التدفق في تطوير البرمجيات؟

مخطط التدفق هو رسم بياني يُمثل عملية أو خوارزمية أو سير عمل باستخدام رموز قياسية متصلة بأسهم تُشير إلى اتجاه التدفق. في تطوير البرمجيات، تُوضح مخططات التدفق منطق البرنامج أو العملية: تسلسل العمليات، ونقاط اتخاذ البرنامج للقرارات، والمسارات المختلفة التي يمكن أن يسلكها التنفيذ بناءً على تلك القرارات.

يعود تاريخ المخططات الانسيابية إلى عشرينيات القرن الماضي في الهندسة الصناعية، حيث استُخدمت لتوثيق عمليات التصنيع. وتمّ تطوير هذه التقنية لتطبيقات الحوسبة في أربعينيات وخمسينيات القرن الماضي، وبحلول الوقت الذي أصبحت فيه البرمجة الهيكلية ممارسةً معيارية في سبعينيات القرن الماضي، أصبحت المخططات الانسيابية جزءًا أساسيًا من توثيق تصميم البرمجيات. واليوم، لا تزال المخططات الانسيابية تُستخدم على نطاق واسع في تصميم الخوارزميات، وتوثيق عملية الإعداد، ورسم خرائط العمليات التجارية، وشرح المنطق لأصحاب المصلحة غير التقنيين، حتى مع تولي أنواع أخرى من المخططات المتخصصة (مثل UML، ومخططات التسلسل، ومخططات الحالة) بعض الأدوار التي كانت تؤديها المخططات الانسيابية في الأصل.

ما الفرق بين مخطط التدفق ومخطط تدفق العمليات؟

تُستخدم هذه المصطلحات غالبًا بشكلٍ متبادل، وهذا لا يُشكل أي مشكلة في معظم السياقات. وعند التمييز بينهما، نجد أن مخطط التدفق يُمثل عادةً منطق خوارزمية أو برنامج واحد، بما في ذلك القرارات والحلقات والتفرعات داخل الكود. أما مخطط تدفق العمليات، فيُمثل في أغلب الأحيان عملية تجارية، أي تسلسل الأنشطة بين الأفراد أو الأقسام أو الأنظمة، وغالبًا ما يفتقر إلى منطق اتخاذ القرارات الدقيق الموجود في مخطط تدفق الكود. عمليًا، تتشابه الرموز والاصطلاحات بين المصطلحين، ويُحدد المصطلح المُستخدم إلى حد كبير بناءً على الجمهور المُستهدف واتفاقيات المجال، وليس على حدود تقنية صارمة.

رموز المخططات الانسيابية: المرجع الكامل

تُوحّد رموز المخططات الانسيابية بحيث يتمكن أي قارئ، بغض النظر عن لغته أو خلفيته، من فهم المخطط الانسيابي بشكل صحيح. يوضح الجدول أدناه جميع الرموز المستخدمة في المخططات الانسيابية القياسية لتطوير البرمجيات:

رمزالشكل الاسممعنى
بيضاوي / مستطيل ذو زوايا مستديرةالمُنهي (البداية/النهاية)يمثل بداية العملية أو نهايتها
مستطيلطريقة عملنايمثل خطوة واحدة أو إجراءً أو عملية واحدة
Diamondقرارنقطة تفرع ذات نتيجتين محتملتين أو أكثر (نعم/لا، صحيح/خطأ)
متوازي الاضلاعالإدخال / الإخراجيمثل البيانات التي تدخل العملية أو تخرج منها
مسدسالتحضيريمثل خطوة إعداد، مثل تهيئة عداد الحلقة
▭ (مع إطار مزدوج)عملية محددة مسبقاًاستدعاء لعملية أو روتين فرعي منفصل ومحدد مسبقًا
وثيقةيمثل مستندًا مطبوعًا أو مُنشأً
دائرة صغيرةالموصليربط نقطتين في مخطط التدفق، ويستخدم غالبًا لتجنب تقاطع الخطوط
مثلث (رأسه لأسفل)دمجيجمع مسارات متعددة في مسار واحد
مثلث (الرأس لأعلى)مقتطفيقسم مسارًا واحدًا إلى عدة مسارات
سهمخط التدفقيشير إلى اتجاه تدفق العملية
رابط خارج الصفحةيشير إلى أن التدفق يستمر في صفحة أخرى

الرمزان اللذان يحتاج كل قارئ إلى التعرف عليهما فورًا هما المستطيل (خطوة في العملية) والمعين ( نقطة قرار ذات مخارج متعددة). هذان الرمزان وحدهما يغطيان غالبية محتوى أي مخطط انسيابي. أما الشكل البيضاوي/المستدير الذي يحدد البداية والنهاية فيكمل الحد الأدنى من المصطلحات اللازمة لقراءة معظم المخططات الانسيابية بشكل صحيح.

أنواع المخططات الانسيابية المستخدمة في تطوير البرمجيات

تخدم أنواع المخططات الانسيابية المختلفة أغراضًا مختلفة. اختيار النوع الخاطئ للموقف ينتج عنه مخطط صحيح تقنيًا ولكنه أصعب في القراءة من اللازم.

نوع المخطط الانسيابيما يظهرأفضل استخدام ل
مخطط انسيابي للعمليةخطوات متسلسلة في عملية واحدةتوثيق خوارزمية أو منطق وظيفة أو إجراء تجاري
مخطط انسيابي للنظامكيفية انتقال البيانات عبر مكونات الأجهزة والبرامجتوثيق معماري عالي المستوى، ورسم خرائط النظام القديم
مخطط انسيابي متعدد الوظائف (مسار السباحة)الخطوات مصنفة حسب الشخص أو الفريق أو النظام المسؤولالعمليات التي تشمل أدوارًا أو أقسامًا متعددة
مخطط تدفق البيانات (DFD)كيفية انتقال البيانات بين العمليات والمخازن والكيانات الخارجيةتوثيق تحويلات البيانات بدلاً من منطق التحكم
مخطط سير العملعمليات تسليم المهام وسلاسل الموافقة في العمليات التجاريةإدارة المشاريع، وسير العمل الخاص بالموافقات، وتوجيه التذاكر
مخطط نشاط UMLالأنشطة المتزامنة والمتسلسلة باستخدام تدوين UML الرسميوثائق تصميم البرمجيات الموجهة للكائنات

مخطط تدفق البيانات مقابل مخطط التدفق: ما الفرق؟

هذه إحدى أكثر نقاط الالتباس شيوعًا، وتستحق إجابة مباشرة. يُظهر مخطط التدفق التحكم في التدفق : ترتيب تنفيذ الخطوات والشروط التي تحدد المسار المُختار. أما مخطط تدفق البيانات (DFD) فيُظهر تدفق البيانات : مصدر البيانات، والعمليات التي تُحوّلها، ومكان تخزينها، ووجهتها النهائية، دون إظهار الترتيب التسلسلي للعمليات أو منطق اتخاذ القرار بالضرورة.

يجيب مخطط التدفق على سؤال "ماذا يحدث، وبأي ترتيب، وتحت أي ظروف؟" بينما يجيب مخطط تدفق البيانات على سؤال "من أين تأتي هذه البيانات، وما الذي يغيرها، وأين تنتهي؟" تستفيد العديد من الأنظمة الحقيقية من كليهما: مخطط التدفق لتوثيق منطق المعالجة، ومخطط تدفق البيانات لتوثيق كيفية انتقال المعلومات عبر هذا المنطق.

أمثلة على مخططات التدفق في تطوير البرمجيات

يتم عرض صيغة Mermaid أدناه مباشرة في GitHub و GitLab و Notion ومعظم منصات التوثيق الحديثة، مما يجعلها الطريقة القياسية للحفاظ على المخططات الانسيابية مع إصدارات التعليمات البرمجية بدلاً من صيانتها كصور ثابتة منفصلة.

مخطط انسيابي للعملية الأساسية

يُظهر هذا المخطط الانسيابي النمط الأساسي الذي يُدركه كل مطور: نقطة بداية، خطوة عملية، شكل ماسي لاتخاذ القرار بنتيجتين، ثم العودة إلى نقطة نهاية واحدة. كل مخطط انسيابي، مهما بلغت درجة تعقيده، مبني على تكرار هذا النمط نفسه.

مخطط انسيابي مع حلقة تكرارية

تُمثل الحلقات في المخططات الانسيابية بسهم يعود إلى نقطة قرار سابقة بدلاً من الاستمرار للأمام. هذا هو المكافئ في المخططات الانسيابية لـ for or while تُعد الحلقة في الكود واحدة من أكثر الأنماط التي يتم اختبارها بشكل متكرر في دورات البرمجة التمهيدية، "ارسم مخطط انسيابي لإيجاد أكبر ثلاثة أرقام" والتمارين المماثلة تتطلب دائمًا تقريبًا حلقة أو بنية قرار متداخلة.

مثال على مخطط انسيابي للمسارات

تُصنّف مخططات المسارات (وتُسمى أيضًا مخططات التدفق متعددة الوظائف) خطوات العملية حسب الجهة المنفذة لها، مما يجعل عمليات التسليم بين الفرق أو الأنظمة واضحةً على الفور. يُعد هذا النمط هو المعيار لتوثيق عمليات الأعمال التي تشمل أقسامًا متعددة أو جهات خارجية.

كيفية إنشاء مخطط انسيابي لعملية تطوير البرمجيات

الخطوة الأولى: تحديد نقطتي البداية والنهاية. يحتاج كل مخطط انسيابي إلى نقطة بداية واضحة واحدة ونقطة نهاية واضحة واحدة أو أكثر. إذا لم تكن للعملية التي توثقها بداية ونهاية واضحتان، فإن نطاقها غير محدد بشكل كافٍ لرسم مخطط انسيابي فعال.

الخطوة الثانية: سرد جميع الخطوات بالتسلسل. اكتب الخطوات بلغة واضحة قبل إضافة الرموز. هذا يفصل تعريف المنطق عن عملية الرسم التخطيطي، ويسهل اكتشاف الأخطاء، إذ يُعدّ تصحيح خطوة مفقودة في قائمة نصية أسرع بكثير من تصحيحها في رسم تخطيطي غير مكتمل.

الخطوة الثالثة: تحديد كل نقطة قرار. راجع قائمة الخطوات وحدد كل مكان يعتمد فيه الإجراء التالي على شرط معين. تصبح كل نقطة قرار على شكل معين مع مسارين على الأقل للخروج، ويجب تسمية كل مسار (نعم/لا، صحيح/خطأ، أو الشرط المحدد).

الخطوة الرابعة: تخصيص الرموز المناسبة. اربط كل خطوة برمزها: مستطيلات للإجراءات، ومعينات للقرارات، ومتوازيات أضلاع للمدخلات/المخرجات، وأشكال بيضاوية للبداية والنهاية. إن استخدام الرموز بشكل متسق هو ما يجعل مخطط التدفق قابلاً للقراءة حتى من قبل شخص غير مطلع على العملية المحددة.

الخطوة 5: الربط باستخدام الأسهم الاتجاهية. يجب أن يكون لكل رمز اتصال واضح وارد وصادر (باستثناء البداية، التي لا يوجد لها اتصال وارد، والنهاية، التي لا يوجد لها اتصال صادر). يجب أن تتدفق الأسهم في اتجاه عام ثابت، عادةً من أعلى إلى أسفل أو من اليسار إلى اليمين، لتجنب التشويش البصري.

الخطوة السادسة: التحقق من صحة النتائج بتتبع كل مسار. تتبع مخطط التدفق يدويًا، مع مراعاة كل مسار ممكن من البداية إلى النهاية. تأكد من أن كل فرع من فروع القرار يؤدي إلى مكان ما، وأنه لا يوجد مسار مسدود دون الوصول إلى نقطة نهاية، وأن الحلقات لها شرط خروج محدد.

أدوات رسم المخططات الانسيابية لتطوير البرمجيات

بالنسبة لمخططات التدفق التي يتم إنشاؤها يدويًا، هناك العديد من الأدوات القياسية في سير عمل تطوير البرمجيات:

يُعدّ كلٌّ من Mermaid و PlantUML أداتين لتحويل المخططات إلى شفرة برمجية: حيث يُعرَّف المخطط الانسيابي كنص ويُعرض تلقائيًا، مما يُتيح التحكم في إصداراته جنبًا إلى جنب مع الشفرة المصدرية التي يُوثّقها. هذا هو النهج المُوصى به لأي مخطط انسيابي يُوثّق منطق الشفرة، لأنه يُمكن تحديثه في نفس عملية الالتزام التي يتم فيها تغيير الشفرة التي يصفها.

تُعد Lucidchart و Microsoft Visio و draw.io أدوات رسم تخطيطي للأغراض العامة مع واجهات السحب والإفلات، وهي مناسبة لتوثيق عمليات الأعمال والعروض التقديمية والمخططات التي يتم الاحتفاظ بها خارج نظام التحكم في الإصدارات.

تُعد أدوات السبورة البيضاء (السبورات البيضاء المادية، Miro، FigJam) مناسبة لجلسات التصميم التعاونية حيث يكون مخطط التدفق بمثابة أداة عمل أثناء المناقشة بدلاً من كونه وثيقة دائمة.

يكمن التحدي بين هذه الفئات في التزامن: فالمخططات التي تُحدَّث يدويًا في Lucidchart أو Visio تصبح قديمة مع تغير العملية أو الكود الأساسي، لأن تحديث المخطط يتطلب خطوة يدوية منفصلة يسهل نسيانها. أما المخططات البرمجية والإنشاء التلقائي فيحلان هذه المشكلة بربط دقة المخطط بعملية آلية بدلًا من الاعتماد على الذاكرة البشرية.

إنشاء مخططات انسيابية تلقائياً من التعليمات البرمجية الموجودة

يُعدّ رسم مخطط انسيابي يدوياً لتصميم جديد طريقة فعّالة. أما رسم مخطط انسيابي يدوياً لتوثيق نظام معقد وغير موثق، فهو غير عملي، وينتج عنه مخطط يصبح قديماً بمجرد الانتهاء منه إذا طرأ تغيير على الكود الأساسي أثناء عملية التوثيق.

بالنسبة لقواعد البيانات البرمجية الحالية، وخاصة الأنظمة الكبيرة أو القديمة، يقوم توليد مخططات التدفق الآلي بتحليل شفرة المصدر الفعلية وإنتاج مخطط التدفق مباشرة من تدفق التحكم الخاص بها، كل if، كل حلقة، كل استدعاء دالة يتم عرضه كرمز مخطط التدفق المقابل، دون الحاجة إلى قيام الإنسان بتتبع المنطق يدويًا أولاً.

يُعدّ هذا التمييز بالغ الأهمية بالنسبة للأنظمة القديمة. فبرنامج كوبول الذي عُدّل من قِبل عشرات المطورين على مدى عشرين عامًا، تراكمت فيه منطق شرطي لا يفهمه أي شخص فهمًا كاملًا. ويتطلب رسم مخطط انسيابي يدوي لهذا البرنامج قراءة كل سطر وتفسيره بدقة أولًا، وهي المشكلة التي يُفترض أن يحلها المخطط الانسيابي. أما التوليد الآلي من شفرة المصدر الفعلية فيُنتج مخططًا انسيابيًا دقيقًا بغض النظر عن مدى فهم أي شخص للبرنامج حاليًا، لأنه مُستمد مما تفعله الشفرة فعليًا وليس مما يعتقده المستخدمون.

كيفية SMART TS XL يقوم بإنشاء مخططات انسيابية من قاعدة التعليمات البرمجية الخاصة بك

SMART TS XL يُنتج هذا البرنامج مخططات انسيابية، ومخططات استدعاء الدوال، ومخططات التبعية مباشرةً من تحليل شفرة المصدر، باستخدام لغات البرمجة COBOL وJCL وJava وPython وRPG وغيرها، بدلاً من تكليف المطورين برسمها يدويًا. وهذا نهج مختلف تمامًا عن أدوات رسم المخططات العامة مثل Lucidchart أو Visio، التي توفر مساحات رسم فقط دون فهم لوظيفة الشفرة البرمجية.

تقوم خاصية عرض التعليمات البرمجية بتحليل تدفق التحكم في البرنامج، وتُنتج تلقائيًا مخططًا انسيابيًا دقيقًا لمنطق اتخاذ القرار، والفروع، والحلقات. بالنسبة لبرنامج COBOL قديم يحتوي على عقود من المنطق الشرطي المتراكم، فهذا يعني إمكانية إنشاء مخطط انسيابي كامل ودقيق في لحظات، بدلًا من قضاء أيام في قراءة التعليمات البرمجية ورسم المخططات يدويًا.

بما أن مخطط التدفق يُنشأ مباشرةً من الحالة الراهنة لشفرة المصدر، فإنه لا يمكن أن يفقد تزامنه كما يحدث مع المخططات التي تُعدّ يدويًا. في كل مرة يتغير فيها البرنامج الأساسي، تُعيد عملية إعادة إنشاء مخطط التدفق إنتاج مخطط مُحدّث يعكس المنطق الحالي الفعلي، مما يحل مشكلة التزامن التي تؤثر على كل فريق يعتمد على توثيق العمليات المرسوم يدويًا.

بالنسبة للفرق التي توثق الأنظمة المعقدة، فإن إمكانية رسم خرائط تبعية التطبيقات تتجاوز مخططات التدفق أحادية البرنامج لتظهر كيفية اتصال البرامج المتعددة وتدفقات العمل ومصادر البيانات عبر مجموعة تطبيقات كاملة، مما يجيب ليس فقط على سؤال "ماذا يفعل هذا البرنامج؟" ولكن أيضًا على سؤال "ما الذي يتصل به هذا البرنامج، وما الذي يتصل به؟" كما هو موضح في سياق تقنيات تصور التعليمات البرمجية ، فإن المخططات التي يتم إنشاؤها تلقائيًا تحل مشكلة التقادم التي تجعل التوثيق الذي يتم صيانته يدويًا غير موثوق به في أي نظام يتم تطويره بنشاط.

تُعدّ المخططات الانسيابية أداة تواصل، وليست مجرد وثيقة توثيقية.

لا تكمن قيمة المخطط الانسيابي في شكله بحد ذاته، بل في الفهم المشترك الذي يُولّده بين جميع من يطّلع عليه. فالمخطط الانسيابي الذي يُمثّل عمليةً ما بدقة، ولكن لا يُستعان به أثناء التطوير أو مراجعة الكود أو تدريب الموظفين الجدد، يكون قد أنتج وثائق دون أن يُضيف قيمة. أما المخطط الانسيابي الذي يستخدمه الفريق فعليًا لمناقشة الحالات الاستثنائية، أو لتدريب مطوّر جديد على وحدة برمجية غير مألوفة، أو لتحديد فرع معالجة أخطاء مفقود، فقد أدّى وظيفته على أكمل وجه.

تعتمد هذه القيمة العملية على تحديث مخطط التدفق باستمرار. فالمخطط الذي يُرسم مرة واحدة أثناء التصميم الأولي ولا يُحدّث أبدًا يصبح مُضللًا بمجرد اختلاف الكود عنه، وهو أسوأ من عدم وجود مخطط على الإطلاق، لأنه يُعطي ثقة زائفة. سواءً من خلال ممارسات "المخططات كجزء من الكود" التي تُبقي مخطط التدفق في نفس مستودع الكود، أو من خلال التوليد الآلي الذي يستخلص مخطط التدفق من الحالة الراهنة للكود، فإن الالتزام بالحفاظ على دقة المخطط هو ما يُميّز مخططات التدفق التي تُفيد الفريق حقًا عن تلك التي تُصبح وثائق قديمة لا يثق بها أحد.