electrical-engineering-principles
التآزر بين المبادئ الصلبة والتنمية التي تحركها التجارب
Table of Contents
مقدمة: لماذا يُبقى كل من منظمة شولد الدولية وشركة تنمية الموارد البشرية معاً
ويقتضي تطوير البرامجيات الحديثة السلامة الهيكلية والتصحيح السلوكي، إذ لا تُنجز هذه الأساليب إلا بقدر ما تتسم به مبادئ SOLID وPriven Development (TDD) وعلى السطح، تركز المنظمة على التصميم - كيف ترتبط الفصول والنماذج بعضها ببعض - بينما تركز الشعبة على العمليات - اختبارات الكتابة قبل رمز الإنتاج، ومع ذلك، فإنها تعزز بعضها البعض عمليا بطريقة تتجاوز التعايش البسيط.
ويمكن فهم التآزر بين برنامج المساعدة التقنية والتنمية والتنمية والتنمية باعتباره حلقة تغذية مرتدة، إذ يُعدّ المطورون في إطار برنامج تطوير التنمية المستدامة الذين يُقدّمون إلى وحدات سلوك صغيرة قابلة للاختبار، وهذه الوحدات، عندما يُصمَّم ذلك مع برنامج التنمية المستدامة، تصبح معزولة بشكل طبيعي ومقروءة، ويُعدّ هيكل قائم على برنامج التنمية المستدامة، بدوره، أكثر قدرة على الاعتماد على الاعتماد على المسؤولية المحددة دون الحاجة إلى تشغيل نظام كامل.
Understanding the SOLID Principles
ويلخص هذا المختصر، الذي أنشأه روبرت س. مارتن )العم بوب( في أوائل العقد الأول من القرن الماضي، خمسة مبادئ تصميم تهدف إلى إنشاء نظم يسهل الحفاظ عليها ومداها مع مرور الوقت، ويعالج كل مبدأ نوعا محددا من التصلب أو الهشاشة التي كثيرا ما تصيب مشاريع البرامجيات، ولنبحث كل منها في سياق التنمية التي تجرى على أساس الاختبار.
مبدأ المسؤولية الوحيدة
SRP] states that a class should have only one reason to change. In practice, this means a class should encapsulate a single functionity or business rule. When a class does too many things, it becomes difficult to isolate a single behavior during testing. For example, consider a class that both reads a formation file and processes user input.
ومن منظور التنمية الاجتماعية، فإن المسؤولية عن الحماية حليف طبيعي، وعندما تكتب اختبارا أولا، تضطرون إلى التفكير في سلوك واحد - " ما ينبغي أن يفعله النظام في هذا السيناريو الصغير؟ " وهذا التركيز السلوكي يتوافق مع مبدأ المسؤولية الشخصية، وعندما تجمع الاختبارات، ستلاحظون عندما يبدأ الفصل في تولي مسؤوليات متعددة: إن اختبارات سلوك واحد ستبدأ في طلب إنشاء سلوكيات غير متصلة بها.
المبدأ المفتوح/المغلق
OCP] asserts that software entities should be open for extension but closed for modification. The goal is to add new features without changing existing, tested code. In practice, this is achieved through abstractions — interfaces or abstract classes that define a contract, while concrete implementations can be swapped or added.
لأن قسم التوثيق والتصنيف المقطعي يحتاج إلى مجموعة من الاختبارات المُتَعَدّة، فإنّك مُحفّز جداً لتجنب تعديل تلك الاختبارات أو الرمز الذي تغطيه، وعندما تحتاج إلى بديل جديد لسلوك (مثل بوابة الدفع الجديدة)، يمكنك إدخال تنفيذ جديد للتفاعل دون لمس اختبارات مُجهزة الدفع الحالية، وهذا يقلّل من المخاطر ويبقي نظامك التراجعي الأخضر.
Liskov Substitution Principle (LSP)
LSP] states that subtypes must be substitutable for their base types without altering the correctness of the program. In other words, if a client expects a ] object, passing a ] should not break the client’s logical. Violating LSP inherits typically occurs when a subclass override a way
عندما تكتب اختباراً يستخدم واجهة أو صفاً جذاباً، تقوم بافتراض بشأن العقد، وإذا كان التنفيذ المختلف لهذا الواجهة سبباً للفشل حتى عندما يكون الاختبار صحيحاً، فإن التصميم يُحتمل أن ينتهك نظام الأفضلية والأفضلية، فإن الممارسة الجيدة في مجال تطوير التجارة تجبرك على تحديد عقود واضحة في المقدمة، التي تتوافق مع نظام الأفضليات والأفضليات.
مبدأ الفصل بين الأوجه
ISP] recommends that no client should be forced to depend on methods it does not use. Fat interfaces – interfaces that contain many unrelated methods – create unnecessary coupling. When a test requires a class that implements such an interface, you must stub or mock many methods even though the test only uses a few.
(ب) بكتابة اختبارات صغيرة ومتماسكة، يمكنك أن تُجري عادةً وصلات بينية محددة، مثلاً بدلاً من أن تكون هذه الوصلات ذات طابع احتكاري [(FLT:4]) مع ، ، و، يمكنك أن تقسمها إلى
مبدأ الإعالة
DIP] says to depend on abstractions, not concretions. Highlevel modules should not import low-level modules; both should depend on interfaces. This is the cornerstone of testability. When business logical depends directly on , testing that logical in isolation becomes near impossible without a real database. but if it depends on an LIT
"العملاء الأولون في "العملية الـ "دي بي لأن الإختبارات هم أول عملاء في كودكم عندما تكتبون اختبار قبل تنفيذ الصف، تصممون بطبيعة الحال الواجهة التي سيستهلكها الإختبار، وتصبح هذه الواجهة مُجرد عملية التنفيذ الملموسة مكتوبة لاحقاً، ويمكنكم أن تتبادلوها بلا جهد، وهذا التداخل العكسي للهيكل من خلال الاختبارات هو أحد أقوى الطرق لتحقيق برنامج مكافحة الاتجار بالبشر
ما هي "التطور الـ "الـ "الـ "الـ "إختبار الـ "دريفن
(ب) إن تطوير الاختبارات ليس مجرد " اختبارات الكتابة أولاً " بل هو ممارسة منضبطة تتبع حلقة تردد ضيق: ]Red, Green, Refactor.]
- Red]: أكتب اختباراً فاشلاً يحدد السلوك المرغوب فيه، وينبغي أن يكون الاختبار محدداً قدر الإمكان (مثلاً، " ينبغي للمستعمل الذي لا يشارك أن يرى لوحة المتابعة الافتراضية " ).
- Green]: أكتب الحد الأدنى من كمية رمز الإنتاج لجعل تمرير الاختبارات.
- Refactor: Clean up both the test and production code while ensuring all tests remain green. This step is where design improvements, including SOLID adherence, happen.
وهذه الدورة متكررة عشرات المرات يوميا، وكل دورة تنتج زيادة ضئيلة في الأداء الوظيفي المجرب، وتوثق الفوائد توثيقا جيدا: انخفاض عدد الحشرات، وتحسين التغطية بالتراجع، وانخفاض وقت الانهيار، وتصميم يخرج عن أنماط الاستخدام الحقيقية بدلا من المضاربة الأمامية، ووفقا لمقال " ماركتين فاولر " بشأن " قانون العمل " ، تشجع الممارسة أيضا " أهدافا " .
التآزر بين SOLID وTDD
ويأتي التقاطع بين مبادرة " سولتيد " و " تي دي " حيث يفي التصميم المعماري بالتحقق، ويجسد كل مبدأ جانبا مختلفا من تجربة " تطوير التجارة والتنمية " ، وندرس هذه العلاقات بالتفصيل بأمثلة ملموسة.
Enhanced Testability through SRP and DIP
ويمكن القول إن الشهادة هي أعظم فضيلة يمكن أن تكون لها قاعدة رمزية للاحتفاظ بها، ويكفل مشروع القانون الخاص لكل فئة تركيزا ضيقا، مما يجعل اختباراتها قصيرة وسهلة الفهم، ويكفل مشروع القانون الدولي فصل هذه الفئات عن الهياكل الأساسية (القاعدة، وخدمات الإنترنت، ونظم الملفات) ويسمحان معا بكتابة اختبارات الوحدة التي تجري على الفور ولا تُعدّل.
شبكة الأمان في إطار برنامج عمل فيينا الدولي وبرنامج التنمية الصناعية
ومن بين نقاط البيع الرئيسية في مجال التنمية أنه يمنحك الشجاعة لتكرير المفاعلات، كما أن مجموعة الاختبارات تعمل كشبكة أمان، ويستفيد مكتب المقارنات الدولية من ذلك بتقليل الحاجة إلى تعديل المدونة القائمة عند إضافة سمات جديدة، وعندما تتبع برنامج العمليات، فإنكم تضيفون عادة تصنيفات فرعية جديدة أو ملصقات بدلا من تحرير الفئات الأساسية، ولأن هذه الفئات الأساسية تخضع بالفعل للاختبار الدقيق، فإن خطر التراجع في الدرجة الدنيا.
LSP and ISP in Test Design
وكثيرا ما تجبرك اختبارات الكتابة على التفكير في العقود والوصلات البينية، وتذكركم بأن اختباراً يُكتب ضد طبقة أساسية أو واجهة ينبغي أن يمر لأي تنفيذ صحيح، وإذا وجدتم أن الاختبار يفشل عندما يُجرى ضد طبقة فرعية معينة، فقد كشفتم عن انتهاك نظام الأفضلية المحلية، وهذا أمر جيد، وبالمثل، تشجعكم خطة العمل الدولية على تصميم وصلات بينية صغيرة ومتعلقة بدور محدد(15).
نموذج عملي: بناء دائرة إخطار
تخيل أنك مكلف ببناء نظام إخطار يمكن أن يرسل رسائل عبر البريد الإلكتروني، وأجهزة الأمن الخاصة، والضغط، وقد يؤدي مطور أقل خبرة إلى إنشاء طبقة أحادية تستخدم طريقة مثل تستخدم مفتاحاً لتحديد كيفية التسليم، وسيكون اختبار هذا مؤلماً - مما يسخر من ثلاث آليات تسليم مختلفة في اختبار واحد، وأي تغيير في شكل بريد إلكتروني سيؤثر على ذلك.
عن طريق تطبيق نظام SOLID جنبا إلى جنب مع شعبة التنمية:
- SRP]: صنف ] فقط أوشيبسات إرسال، وكل قناة توصيل (البريد الإلكتروني، SMS، دفع) تعيش في صفها الخاص مع مسؤولية واحدة.
- OCP]: To add a new channel (e.g., Slack), you implement a that conforms to the existing interface — no need to touch the class.
- LSP]: جميع تنفيذات الوصل قابلة للتبادل من منظور .
- ISP]: لا تشمل الواجهة سوى الأساليب ذات الصلة بإرسال إخطار - لا توجد طرق غير ذات صلة مثل أو .
- DIP]: يعتمد على المشهد، وليس على أصناف القنوات الملموسة.
ومع ذلك، ستبدأون بكتابة اختبار لـ - اختبار بسيط يتحقق من الرسالة الإلكترونية هو " الموافقة " (ربما عن طريق جاسوس) ثم تكتبون رمزاً كافياً لتجتازون هذا الاختبار، ثم تختبرون صف مع قناة متنقلة، ولأن التصميم يلتزم بـ SOLID، فإن كل اختبار معزول وسريع.
الأطر العملية للتكامل
إن اعتماد كل من برنامجي التنمية المستدامة والتنمية في آن واحد يمكن أن يشعرا بالسخرية في البداية، والاستراتيجيات الملموسة التالية ستساعدك على بناء العادة.
- Start with a single module]: Choose a small, self-contained feature (like the notification service above).
- Treat testability as a design goal]: After writing a test that feels precarious — maybe because it requires too much setup or mocking — ask yourself which SOLID principle is being violated. Often the answer is DIP (a concrete dependency) or ISP (a fat interface). Refactor both the test and the code to improve the design.
- (أ) استخدام حاويات حقن الإعالة في الاختبارات [(FLT:1]: بالنسبة لفحوصات الوحدات، يفضل الحقن اليدوي أو أطر السخرة البسيطة، وهذا يبقي اختبارات صريحة ويعزز تفكير SOLID، وكما تُقدر، النظر في استخدام حاوية خفيفة الوزن لاختبارات التكامل، ولكن دائماً ما تبقي اختبارات الوحدة معزولة.
- Refactor after every green test]: The “Refactor” step of TDD is the perfect time to improve adherence to SOLID. For example, if a class grows two responsibilities, extract a new class (SRP). If a test depends on many methods from an interface, split that interface (ISP).
- Introduce code reviews with a SOLID checklist: Pair reviews with TDD by having team members check that each new test suite covers isolated, single —responsibility components. This reinforces the principles across the team.
For additional reading, Robert C. Martin’s original article on the SOLID principles] is still one of the best references. For a deep dive into TDD, Kent Beck’s Test-Driven Development by Example remains the seminal work.
الشلالات المشتركة إلى أفويد
حتى المطورين ذوي الخبرة يمكن أن يسقطوا في فخ عندما يجمعوا بين هذين المنهجيين، إدراكاً منهم لهذه المجازف سيوفر لك الوقت
- ] riting tests that are too coarse: A single test that exercises an entire work flow (e.g., “login and create an order”) violates SRP for tests. Break it into smaller, isolated tests that target individual behaviors. This makes it easier to maintain a SOLID design.
- Mocking everything]: While mocks are essential for DIP, over-mocking can hide design flaws. If you need to mock five different interfaces to test one class, that class likely depends on too many things -- a sign of a SOLID violation. Refactor the class to reduce its responsibilities.
- Ignoring the Refactor step]: Many TDD novices abandon refactoring once the test passes. This is where SOLID improvements happen. If you never refactor, the design degrades, and your tests become coupled to a messy structure.
- Overengineering at the start]: Beginners sometimes try to apply all five SOLID principles before writing the first line of production code. That’s not how TDD works. Let the tests reveal the need for abstractions. Start with simple implementations and introduce interfaces when test pain becomes too high.
الاستنتاج: ثقافة الجودة
والتآزر بين مبادئ SOLID وتطور الاختبارات هو أمر غير متزامن، إذ أن الفلسفة تتقاسم جذوراً مشتركة: الرغبة في كتابة مدونة يمكن فهمها وتغييرها وتصحيحها، وتوفر المنظمة المبادئ التوجيهية الهيكلية - " كيف " التصميم الجيد، وتوفر الدراسة الاستقصائية للتطورات البشرية - " ما " من الوظائف الصحيحة، وتنتج، عند ممارستها معاً، تصميماً سهلاً للتنمية:
وتُبلغ الأفرقة التي تعتمد في كثير من الأحيان عن انخفاض كبير في دورات التنصت على الحشرات وزيادة القدرة على الاستجابة للاحتياجات المتغيرة، والاستثمارات الأولية في التعلم من أجل كتابة الاختبارات أولاً، وتصميمها مع شركة SOLID في ذهنها، تُسدد مرات عديدة في الديون التقنية المخفضة، وكما قال العم بوب نفسه في جزيئته بشأن دورات التذاكر ، " إن تصميم الفعل المتعلق بكتابة يجعل مناًاً متبادلاً " .