أكثر

يعمل GDAL_CALC ولكني أحصل على خطأ بيثون في نهاية كل عملية تمنع التشغيل الآلي

يعمل GDAL_CALC ولكني أحصل على خطأ بيثون في نهاية كل عملية تمنع التشغيل الآلي


Python 3.4.1 و GDAL 1.11.0 و OSGEO4W و Windows 7 و OSGEO4W Windows Shell

كل 64 بت

(تم تثبيت ArcGIS أيضًا 10.2 مع Python 2.7)

لذا فإن gdal_translate يعمل بشكل جيد.

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

هذا نموذج من سطر التعليمات البرمجية الذي يعطي الخطأ (جميع أوامر gdal_calc تقريبًا تعطي الخطأ ولكن ليس gdal_translate).

gdal_calc.py -A 2000025-2000032.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  QUAL  2000025-2000032.m0481pfv50-qual.hdf.tiffBINARY.tiff --outfile = A25_32_SSTQUAL4.tiff - احسب = "أ * ب"

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

تم إنشاء رسالة خطأ إضافية> توقيع المشكلة: اسم الحدث: APPCRASH اسم التطبيق: python.EXE إصدار التطبيق: 0.0.0.0 الطابع الزمني للتطبيق: 5193f3af Fault Module Name: ntdll.dll Fault Module: 6.1.7601.18247 Fault Module Timestamp: 521eaf24 Exception Code : c0000005 إزاحة الاستثناء: 0000000000053290 إصدار نظام التشغيل: 6.1.7601.2.1.0.256.48 معرف الموقع: 1033 معلومات إضافية 1: 8c64 معلومات إضافية 2: 8c64dfac0942d27b36722f7434c64847 معلومات إضافية 3: e156 معلومات إضافية 4: e156d5603c95b65c330488aa

باعتباره الى ابعد حد نهج ثقيل ، جهد أخير لهذا ، يمكنك تعطيل مربعات حوار التعطل في Windows باستخدامDontShowUIالقيمة في مفاتيح التسجيل Windows Error Reporting.


لدي نفس الخطأ من نافذة OSGEO4W ... قد تكون هناك مشكلة في إعداد البيئة ، شيء ما يتعلق بمكتبة مفقودة عندما أتعمق فيها:

من _sre import MAXREPEAT ImportError: لا يمكن استيراد اسم MAXREPEAT

ومع ذلك ، في نافذة الأوامر العادية ، تعمل بشكل جيد ... لقد أضفت GDAL_DATA ومتغيرات البيئة الأخرى التي تعتبر مهمة لجعل GDAL يعمل في Python وأنا أستخدم python 2.7 (التي تأتي مع ArcMap).

متغيرات البيئات التي يستخدمها GDAL:

GDAL_DATA C:  Program Files  QGIS Dufour  share  gdal GDAL_DRIVER_PATH C:  Program Files  QGIS Dufour  bin  gdalplugins GEOTIFF_CSV C:  Program Files  QGIS Dufour  share  epsg_csv PROJ_LIB C:  Program Files  share  المشروع

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

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

تعيين GDAL_DATA = C:  Program Files  QGIS Dufour  share  gdal set GDAL_DRIVER_PATH = C:  Program Files  QGIS Dufour  bin  gdalplugins set GEOTIFF_CSV = C:  Program Files  QGIS Dufour  share  epsg_csv set: PROJ_LIB = C  ملفات البرامج  QGIS Dufour  share  proj gdal_calc.py -A 2000025-2000032.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  QUAL  2000025-2000032.m0481pfv50-qual.hdf.tiffBINARY. tiff --outfile = A25_32_SSTQUAL4.tiff --calc = "A * B" وقفة

عند حفظه كملف دفعي (.bat) والنقر عليه مرتين ، سيتم فتح نافذة أمر ، وتشغيل الأمر ثم مطالبة المستخدم بالضغط على إدخال للمتابعة (خروج). لا تكون إعدادات البيئة دائمة عند القيام بهذه الطريقة ولا تنطبق إلا على تلك النافذة. إذا كنت قلقًا بشأن إصدار python الذي يقوم بتشغيل الكود ، فاستخدمتعيين المسار =؛٪طريق٪لقصر المسار على إصدار واحد فقط.

في ملف دفعي٪ A يتم استبداله بـ ٪٪ A ، يقوم معالج الأوامر بإزالة٪ الأولى:

set GDAL_DATA = C:  Program Files  QGIS Valmiera  share  gdal set GDAL_DRIVER_PATH = C:  Program Files  QGIS Valmiera  bin  gdalplugins set GEOTIFF_CSV = C:  Program Files  QGIS Valmiera  share  epsg_csv set: PROJ_LIB = C  Program Files  QGIS Valmiera  share  proj pause for ٪٪ A in ("C:  temp  *. hdf") do gdal_translate -of GTiff -a_srs "+ init = epsg: 4326" -a_ullr -180 90 180 - 90 -co "COMPRESS = PACKBITS" -sds "٪٪ A" "٪٪ A.tiff" لـ ٪٪ A in ("C:  temp  *. tiff") do gdalinfo "٪٪ A" >> "٪ ٪ A.txt "لـ ٪٪ A في (" C:  temp  *. tiff ") قم بعمل gdal_calc.py -A" ٪٪ A "--outfile =" ٪٪ ABINARY.tiff "--calc =" 0 * (A <3) "--calc =" 1 * (A> 3) "لـ ٪٪ A in (" C:  temp  *. tiff ") do gdal_calc.py -A" ٪٪ A "- outfile = "٪٪ A_C.tiff" --calc = "A * (0.07500000298)" gdal_calc.py -A 2000001-2000008.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  2000001-2000008. m0481pfv50-qual.hdf.tiffBINARY.tiff --outfile = A1_8_SSTQUAL4.tiff --calc = "A * B" gdal_calc.py -A 2000009-2000016.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  2000009-2000016.m0481pfv50-qual.hdf.tiffBINARY.tiff - ملف = A9_16_SS TQUAL4.tiff --calc = "A * B" gdal_calc.py -A 2000017-2000024.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  2000017-2000024.m0481pfv50-qual.hdf.tiffBINARY. tiff --outfile = A17_24_SSTQUAL4.tiff --calc = "A * B" gdal_calc.py -A 2000025-2000032.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  2000025-2000032.m0481pfv50-qual .hdf.tiffBINARY.tiff --outfile = A25_32_SSTQUAL4.tiff --calc = "A * B" gdal_calc.py -A A1_8_SSTQUAL4.tiff -B A9_16_SSTQUAL4.tiff -C A17_24_SSTQUAL4.tiff -D A25_32_SSTQUAL4.tiff -D A25_32_SSTQUAL4.tiff -D A25_32_SSTQUAL4.tiff -D A25_32_SSTQUAL4.tiff -D A25_32_SSTQUAL4.tiff -D .tiff --calc = "A + B + C + D" gdal_calc.py -A 2000001-2000008.m0481pfv50-qual.hdf.tiffBINARY.tiff -B 2000009-2000016.m0481pfv50-qual.hdf.tiffBINARY.tiff -C 2000017-2000024.m0481pfv50-qual.hdf.tiffBINARY.tiff -D 2000025-2000032.m0481pfv50-qual.hdf.tiffBINARY.tiff --outfile = QUAL_final.tiff --calc = "A + B + C + D" gdal_calc. py -A SST_SUM_C.tiff -BC:  temp  QUAL_final.tiff --outfile = SST_Final_C.tiff --calc = "A / B" gdal_translate SST_Final_C.tiff-of GTiff -ot Float32 -a_nodata 0 SST_Final_C_NoData.tiff gdal_fillnodata SST_Final_C_NoData.tiff -md 5 -si 2 SST_Final_C_NoData_Foc.tiff لـ ٪٪ A in ("C:  temp  landmask  *. hdf") do gdal_translate -of GTiff -a_srs "+ init = epsg: 4326" -a_nodata 2 - a_ullr -180 90 180 -90 -co "COMPRESS = PACKBITS" -sds "٪٪ A" "٪٪ A.tiff" لـ ٪٪ A in ("C:  temp  landmask  *. tiff") قم بعمل gdal_calc. py -A "٪٪ A" --outfile = "٪٪ A_FINAL.tiff" --calc = "1 * (A <5)" gdal_calc.py -A SST_Final_C_NoData_Foc.tiff -BC:  temp  landmask  pfv50_land. m04.hdf.tiff_FINAL.tiff --outfile = SST.tiff --calc = "A * B" gdal_translate SST.tiff -of GTiff -ot UInt16 -a_nodata 0 -stats -co "COMPRESS = LZW" SST_ALLDONE.tiff وقفة

إنشاء الباركود pdf417 ، تفاوت الكلمات المشفرة لتصحيح الخطأ في Reed Solomon بين Python و JAVA

لقد قمت بإنشاء رمز شريطي pdf417 باستخدام مكتبة Python pdf417gen.

كان الرمز الشريطي عبارة عن تمثيل رسومي للسلسلة "M1LONG". يحتوي الرمز الشريطي على عمودين للبيانات ويتم تعيين مستوى أمان تصحيح الخطأ Reed Solomon على "1". يشير هذا إلى أنه مع إدخال ثمانية كلمات مشفرة للبيانات ، يجب أن يكون عدد كلمات تشفير تصحيح الخطأ أربعة.

يعرض إخراج Python كلمات رمز البيانات من D07 إلى D00 كـ <8 ، 389 ، 902 ، 11 ، 900 ، 344 ، 396 ، 900>. يسرد Python كلمات ترميز تصحيح الخطأ من C03 إلى C00 كـ <718 ، 801 ، 313 ، 877>. هذا هو Python الذي تم استخدامه لإنشاء جميع الكلمات المشفرة:

يتم إنشاء كلمات تشفير تصحيح الخطأ باستخدام كثيرات الحدود وحساب جالوا فيلد ومكملات المعامل 929 ، وهو عدد كلمات الكود الممكنة لنظام pdf417. تستخدم الحسابات عددًا من العوامل لتبسيط العملية. بالنسبة لمستوى الأمان 1 ، فإن عدد العوامل الموصى به هو أربعة. العوامل هي 522،568،723،809

هذه هي المشكلة. حاولت إعادة إنشاء كلمات كود الخطأ باستخدام كود JAVA الزائف الذي تم الحصول عليه من http://grandzebu.net/informatique/codbar-en/pdf417.htm

لقد كتبت برنامج JAVA لمحاولة إنشاء نفس الكلمات البرمجية مثل برنامج Python الموصوف أعلاه ، لكنه لا يولد نفس كلمات رموز الخطأ.

يقوم برنامج JAVA بالتجميع والتشغيل ، تبدو الرياضيات جيدة بالنسبة لعيني غير المدربة ، لكن رموز الخطأ المنتجة ليست هي نفسها. هنا JAVA الخاص بي ، يُطلق على متغيرات JAVA نفس اسم Python لتسهيل مقارنة البرنامجين.

سأكون ممتنًا للغاية لمعرفة ما هي المشكلة في رمز JAVA الذي يمنعه من إنشاء كلمات رموز الخطأ نفسها مثل برنامج Python الموجود في المكتبة pdf417gen.


تتناول مكتبة TikZ 2.10 الخارجية هذه المشكلة. يعد إضفاء الطابع الخارجي على جميع رسومات TikZ في مستند LaTeX أمرًا سهلاً مثل:

إذا تم تسمية المستند الخاص بك report.tex ، فسيؤدي ذلك إلى التخلص من سلسلة من الصور: report-figure0.pdf ، report-figure1.pdf ، إلخ ، إلخ. للحصول على إخراج أكثر قابلية للإدارة ، يمكنك تحديد دليل فيه يجب وضع الملفات والأسماء الأكثر وصفية من report-figure0.pdf:

لتجميع المستند ، ستحتاج إلى التأكد من وجود دليل الأرقام وتشغيل pdflatex مع تمكين تنفيذ الصدفة:

تتوفر مجموعة كاملة من الخيارات لتخصيص طريقة إخراج الأشكال. راجع القسم 52.4 (هذا الترقيم عرضة للتغيير!) من وثائق إصدار التطوير للحصول على معلومات وخيارات كاملة. يغطي الدليل أيضًا كيفية الحصول على إخراج EPS - لكن هذا الخيار يبدو أقل تلميعًا من إخراج PDF.

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

لأسباب مختلفة ، لم أكن راضيًا تمامًا عن أي من الحلول الأخرى ، لذلك كتبت نصًا بلغة Python يناسب هدفي.

الأشياء التي يجب أن تضعها في اعتبارك هي:

  1. قمت بوضع البرنامج النصي على نفس مستوى ملف main.tex الخاص بك
  2. أنت تكتب كود tikz الخاص بك. يمكنك وضع كل شخصية داخل ملف بامتداد * .tikz. يحتوي كل ملف فقط على start . نهاية .
  3. تكتب التمهيد الذي تريد استخدامه مع ملفات * .tikz. لا يحتوي هذا بالضرورة على نفس الحزم مثل التمهيد لملف main.tex. السبب وراء احتفاظك بديباجة مشتركة لجميع الأشكال هو تسهيل إجراء تغييرات في أشياء مثل الخطوط وما إلى ذلك.
  4. تقوم بتشغيل البرنامج النصي!

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

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

ها هي إجابتي البديلة من كونراد ربما تكون جيدة بنفس القدر ، وبالتأكيد موثقة بشكل أفضل.

لقد توصلت للتو إلى ما يلي. يبدو أنه يعمل بشكل جيد (على أنظمة Unix / Linux و Mac):

تفسير:

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

بعد ذلك ، يستدعي sed للتصفية من تلك السطور الجزء ذي الصلة فقط ، أي وسيطة الأمر التي سيتم استخدامها كاسم عمل pdflatex. ثم يستخدم من أجل تكرار كل هذه الأسماء الوظيفية ويستدعي pdflatex بدوره لكل منها.

لقد قمت بإنشاء برنامج نصي شل ، والذي يقوم بإنشاء ملفات PDF من جميع ملفات tikz / pgfplots /. -الأرقام. مقارنة بالحلول الحالية ، فإن لمنهجتي بعض المزايا: (لا أعرف الحلول الحالية جيدة جدًا. ولكن آمل أن تكون بعض المزايا مزايا حقيقية.)

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

ميزة أخرى لحلي هي أن ملفات PDF يتم تجميعها بالتوازي. لكن ستلاحظ إذا فشل ملف PDF واحد أو أكثر في تجميع المعلومات التفصيلية من ملفات السجل ، ثم يتوقف التجميع المتبقي للمستند الرئيسي. يمكن أن يقتصر عدد التجميعات التي تعمل في الخلفية على عدد من العمليات مثل 4 أو 8 (اعتمادًا على عدد نوى وحدة المعالجة المركزية التي تريد استخدامها). هذا مفيد بشكل خاص ، إذا كانت إحدى العمليات تحتاج إلى قدر كبير من ذاكرة الوصول العشوائي (في حالتي ، تحتاج بعض صور pgfplots الواسعة إلى> 1 جيجابايت من ذاكرة الوصول العشوائي أثناء التجميع.)

خيار المسودة هو التعرف على تجنب التجميعات غير الضرورية. أيضًا ، هناك خيار buildall و buildnone ، والذي قد يكون مفيدًا في حالة تغيير الرؤوس مرارًا وتكرارًا.

لا يقتصر على tikz ، ولكن يجب أن تكون أي حزمة ممكنة ، حيث أن كل صورة هي مجرد مستند .tex عادي وكامل.

فيما يتعلق بـ tikz ، واجهت بعض المشاكل مع قص النص عند حدود الصور باستخدام قائمة بذاتها. لا يحدث هذا السلوك مع الحل الخاص بي ، حيث أقوم بقص صفحات A4 بالصور باستخدام pdfcrop بعد التجميع.

لقد حصلت على ملف .sty لاستدعاء البرنامج النصي كما هو موضح في ما يلي. يوجد تعريف لمجلد الصور ، مثالان للصور ومكالمة البرنامج النصي ومعالجة القيمة المرجعة. usepackage هو السطر الأول بعد فئة documentclass في المستند الرئيسي ، لذلك تأكد من تحديث جميع ملفات PDF دائمًا.

تم تضمين الصورة بهذا الشكل في مستند أساسي (قصير جدًا):

مثال على الصورة سيكون

يظهر البرنامج النصي الذي تم استدعاءه في ما يلي. يبحث في كل ملف .tex عن حزمة الاستخدام ، والمدخلات ، و pgfplotstableread ويتعرف أيضًا على ما إذا كانت الملفات المستخدمة أحدث من ملف PDF الحالي المحتمل.


5 إجابات 5

يجب عليك دائمًا اختيار الاختبارات بعناية عندما يتعلق الأمر باختبار الأتمتة. :)

أحد الأسباب ، كما قلت ، هو التداخل (ومع ذلك ، وقت التنفيذ والمتانة). ان مثال للتوضيح:

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

سبب آخر للتفكير في الحالات التي يجب أتمتتها هو ببساطة أنه ليس كل الاختبارات الآلية مفيدة أو فعالة من حيث التكلفة على المدى الطويل. أنصحك بالبحث على YouTube عن عرض Angie Jones على & quot ما هي الاختبارات التي يجب أن نقوم بأتمتة & quot - راجع أيضًا https://slides.com/angiejones/which-tests-should-we-automate#/20

لا يوجد مفهوم لتداخل حالات الاختبار في مستويات الاختبار المختلفة ،

كلاهما معزول تمامًا

فقط لأن API يعمل بشكل جيد لا يمكنك ضمان عمل واجهة المستخدم بشكل جيد.

تخيل اجتياز جميع اختبارات API الخاصة بك ولكن المستخدم غير قادر على استخدام واجهة المستخدم ، تخيل أن كل واجهة المستخدم الخاصة بك تعمل بسبب المعلومات المخزنة مؤقتًا ولكن الخلفية الفعلية تفشل.

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

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

في كل مستوى اختبار لدينا نطاقات اختبار مختلفة.

نحن لا نختبر تدفق الأعمال ولكن المكون والوظيفة

إختبار الإدماج

التكامل مع المكونات الأخرى ، ما مدى استقرار النظام الفرعي المتكامل ليكون قادرًا على استخدامه للتوسع مع المكونات ذات المستوى الأعلى. مثل API مع واجهة المستخدم

اختبار النظام

هنا تختبر قابلية الاستخدام وتفاعلات المستخدم والانحدار البصري ومنطق العمل والتدفق.

لذلك لا يوجد مفهوم للاختبارات المتداخلة في مستويات الاختبار المختلفة

TLDR: سيكون لديك تداخل بين حالات اختبار تكامل E2E و API ، من حيث نفس نقاط النهاية التي يتم ممارستها في كل من و هذا حسن - يساعدك على معرفة مكان المشكلة إذا (. عندما) يحدث خطأ ما.

عند العمل مع قاعدة بيانات لا تحتوي حاليًا على اختبار آلي شامل ، ابدأ باختبارات E2E (/ الوظيفية / واجهة المستخدم). لماذا ا؟

تساعد أتمتة التطبيق من خلال مهام سير عمل واجهة المستخدم على بناء التعاطف مع المستخدمين - ما الذي يستخدمونه ، وكيف يفعلون ذلك؟

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

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

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

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

من المحتمل أن يكون لديك التحقق من صحة المدخلات على مستوى واجهة المستخدم التي تمنع تقديم الطلب إذا كانت غير صالحة ، ولكن لا يزال يتعين عليك اختبار التحقق من جانب الخادم و

ربما ليس لديك روابط لموارد مفقودة في واجهة المستخدم ، ولكنك لا تزال ترغب في اختبار 404.

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


5 إجابات 5

هل حاولت استخدام ConflictResolution: = المعلمة xlLocalSessionChanges في طريقة SaveAs؟

  • لا يسمح هذا الإعداد بتشغيل أي وحدات ماكرو. عند فتح مصنف Excel جديد ، لا يتم تنبيهك إلى حقيقة أنه يحتوي على وحدات ماكرو ، لذلك قد لا تدرك أن هذا هو سبب عدم عمل المصنف كما هو متوقع.

  • يمنع هذا الإعداد تشغيل وحدات الماكرو. ومع ذلك ، في حالة وجود وحدات ماكرو في مصنف ، يتم عرض نافذة منبثقة لتحذيرك من وجود وحدات الماكرو وتم تعطيلها.

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

  • يسمح هذا الإعداد بتشغيل كافة وحدات الماكرو. عند فتح مصنف Excel جديد ، لا يتم تنبيهك إلى حقيقة أنه يحتوي على وحدات ماكرو وقد لا تكون على دراية بوحدات الماكرو قيد التشغيل أثناء فتح الملف.

إذا كنت تثق بوحدات الماكرو وكنت موافقًا على تمكينها ، فحدد هذا الخيار:

ويجب ألا يظهر مربع الحوار هذا لوحدات الماكرو.

بالنسبة لمربع حوار الحفظ ، بعد ملاحظة أن هذا كان يعمل في Excel for Mac 2011 ، صادفت السؤال التالي حول SO ، StackOverflow - منع الحوار عند استخدام VBA لحفظ ماكرو يحتوي على ملف Excel (.xlsm) باعتباره غير ماكرو تحتوي على ملف (.xlsx). منه ، يبدو أن إزالة مربع الحوار غير ممكن ، باستثناء ما قد يكون من خلال بعض محاكاة إدخال لوحة المفاتيح. أود إرسال سؤال آخر للاستفسار عن ذلك. آسف لم أستطع سوى الحصول عليك في منتصف الطريق. سيكون الخيار الآخر هو استخدام جهاز كمبيوتر يعمل بنظام Windows مع Microsoft Excel ، على الرغم من أنني لست متأكدًا مما إذا كان هذا خيارًا لك في هذه الحالة.


مقتطف من ملفهم التمهيدي

بدلاً من ذلك ، يمكنك استخدام halo مع Python مع العبارة:

أخيرًا ، يمكنك استخدام الهالة كزينة:

النسخة المحسّنة منVictor Moyseenko كإصدار أصلي بها مشاكل قليلة

  1. كان يغادر شخصيات الدوار بعد اكتمال الغزل
  2. وأحيانًا تؤدي إلى إزالة الحرف الأول للمخرج التالي أيضًا
  3. يتجنب حالة السباق النادرة بوضع الخيوط. Lock () على الإخراج
  4. يعود إلى إخراج أبسط عندما لا يتوفر tty (لا يوجد دوران)

مثال على استخدام فئة Spinner أعلاه:

بالتأكيد ، هذا ممكن. إنها مجرد مسألة طباعة حرف مسافة للخلف ( b) بين الأحرف الأربعة التي تجعل "المؤشر" يبدو وكأنه يدور (- ، ، | ، /).

وحدة اللعنات. أود إلقاء نظرة على وظائف addstr () و addch (). لم تستخدمه رغم ذلك.

لمزيد من معالجات وحدة التحكم المتقدمة ، في نظام التشغيل Unix ، يمكنك استخدام وحدة curses python ، وفي Windows ، يمكنك استخدام WConio الذي يوفر وظائف مكافئة لمكتبة الشتائم.

احصل على وحدة شريط التقدم الرائعة - http://code.google.com/p/python-progressbar/ استخدم RotatingMarker.

لقد وجدت حزمة py-spin على GitHub. لديها العديد من أساليب الغزل لطيفة. فيما يلي بعض العينات حول كيفية الاستخدام ، Spin1 هو - / النمط:

من الممكن أيضًا التحكم في الدوران يدويًا:

أنماط أخرى في الصورة أدناه.

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

ها أنت ذا - بسيط وواضح.

حل بسيط لكن بسيط:

هناك حدود واضحة ، ولكن مرة أخرى ، الخام.

أقترح حلاً باستخدام الديكور

لقد قمت بإنشاء Singleton عام ، يتشاركه التطبيق بأكمله

يمكن أن يكون هذا أيضًا حلًا آخر باستخدام دالة ذات معلمة.

يمكنك كتابة ' r 033 [K' لمسح السطر الحالي. وما يلي مثال معدّل منnos.

لأي شخص مهتم بـ nodejs ، أكتب أيضًا مثالًا لـ nodejs.

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

بعد أن قلت كل ما قلته وكتبت كل ما كتبته ، كنت أفعل أشياء بيثون لمدة أسبوع فقط. إذا كانت هناك طرق أنظف للقيام بذلك أو فاتني بعض أفضل الممارسات التي أحب أن أتعلمها. شكرا.


أهم مؤشرات أداء الموقع

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

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

فيما يلي عشرة مؤشرات لأداء موقع الويب يجب على كل مالك موقع أن يراقبها.

مدة التشغيل

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

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

الوقت حتى البايت الأول (TTFB)

يقيس الوقت حتى البايت الأول (TTFB) استجابة الخادم أو موارد الشبكة الأخرى. إنه يقيس الوقت من المستخدم أو العميل الذي يقدم طلب HTTP إلى البايت الأول من الصفحة التي يتلقاها متصفح العميل & # 8217s.

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

أفضل طريقة للاستفادة من مؤشر الأداء هذا هي إرسال طلبات من مواقع مختلفة. تحقق من سرعة استجابة خادم الويب أثناء ساعات الذروة وخارجها.

يتم قياس TTFB ضمن هذه الإجراءات الثلاثة:

  1. إرسال طلب إلى الخادم
  2. معالجة وتوليد الاستجابة
  3. إرسال الرد إلى العميل مرة أخرى

وقت تحميل كامل الصفحة

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

إذن ، كيف تقيس وقت تحميل الصفحة الكاملة؟ يمكنك الاستفادة مراقبة أداء التطبيق(APM) لمساعدتك في التعامل مع هذا المؤشر. يسهل اقتفاء أثر من شفرة المصدر الخاصة بك ويقدم رؤى حول سرعة موقع الويب الخاص بك.

تذكر أن المستخدمين يفضلون مواقع الويب سريعة التحميل. دعونا نلقي نظرة على بعض حالات الاستخدام:

  • تعرضت الشركة لخسارة بنسبة 1٪ في الإيرادات لكل 100 مللي ثانية من تأخير تحميل الموقع.
  • يحتاج موقع الويب التجاري إلى زيادة معدل التحويل بنسبة 1.5٪.
  • تريد شركة تقليل وقت التحميل لتحسين التحويلات.

يمكنك حل هذه السيناريوهات باستخدام أدوات مراقبة الأداء مع التسجيل المركزي ومراقبة المستخدم الحقيقي.

ما زلت غير مقتنع؟ ماذا عن توسيع مناقشتنا ليس فقط من خلال تجربة المستخدم ولكن مع تصنيفات البحث العضوية. قام Google بتضمين سرعة الصفحة وعمق المحتوى والتوافق مع الجوّال كجزء من عوامل ترتيب الخوارزمية.

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

كسر الروابط

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

ربما أخطأت في كتابة عنوان URL المقصود ، أو أن الصفحة المرتبطة لم تعد موجودة؟ خلاصة القول هي أن الروابط المعطلة سيئة للأعمال.

قم بإجراء صيانة دورية وفحص الروابط المعطلة. لمساعدتك ، تذكر دائمًا هذه عند التعامل مع الروابط المعطلة:

  • الروابط المعطلة تحبط زوار موقعك وقد تضر بسمعتك.
  • إنه يعطي انطباعًا بأنك لا تقوم بـ "التدبير المنزلي المنتظم".
  • يمكن أن تؤثر على معدل التحويل الخاص بك.
  • الروابط المعطلة تعيق تحسين ترتيب صفحتك.

رحلة المستخدم

رحلة المستخدم هي مؤشر أداء مهم آخر لأنها تساعدك في التحسين المستمر. يحدد ما إذا كان لديك سير العمل الصحيح. يضمن سير العمل الفعال أن يتمتع المستخدمون بتجربة مستخدم رائعة.

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

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

أداء قاعدة البيانات

ما أهمية أداء قاعدة البيانات؟ تحتوي معظم مواقع الويب على محتوى ديناميكي مأخوذ من قاعدة بيانات. إنه مؤشر أداء ويب حيوي آخر لضمان تشغيل موقع ويب بسلاسة.

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

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

الأداء الجغرافي

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

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

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

أجهزة خادم الويب

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

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

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

زوار الموقع

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

من ناحية أخرى ، إذا انخفض عدد زوار موقع الويب ، فقد تكون هناك مشكلة فنية أو أن المحتوى الخاص بك لا يتفاعل بشكل كافٍ.

جودة الموقع

المؤشر الأخير هو جودة الموقع. يمكنك الحصول على جميع مؤشرات الأداء الفنية ، ولكن يجب أن تراقب جودة موقع الويب الخاص بك. تدقيق جودة موقع الويب هو عملية يدوية ويجب إجراؤها بانتظام.

ضع في اعتبارك الأسئلة التالية في تدقيق جودة موقع الويب الخاص بك:

  • هل واجهة مستخدم موقع الويب مناسبة وجذابة؟
  • هل لكل صفحة هدف واضح؟
  • هل النص منظم بشكل جيد ومقروء؟
  • هل أسلوب كتابة الإعلانات مناسب للجمهور المستهدف؟
  • هل يوفر معلومات قيمة للمستخدمين والزوار؟

أسئلة اختبار الاختبار الفاشل

عند إضافة رسالة جديدة إلى قائمة انتظار SQS ، سيتم إخفاؤها من مثيلات المستهلك لفترة محددة.

عندما يسترد مثيل المستهلك رسالة ، سيتم إخفاء هذه الرسالة في قائمة الانتظار لفترة محددة.

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

أثناء معالجة رسالة ، يمكن لمثيل المستهلك تعديل عداد رؤية الرسالة بمقدار ثابت

أثناء معالجة رسالة ، يمكن لمثيل المستهلك إعادة تعيين رؤية الرسالة عن طريق إعادة تشغيل عداد المهلة المحدد مسبقًا.

اعمل مع فريق تصميم الويب الخاص بك لإنشاء بعض صفحات الويب باستخدام نصوص جافا مضمنة لمحاكاة أكثر 5 صفحات ويب للمعلومات شيوعًا وتسجيل صفحات الويب.

قم بترقية خادمك الحالي من Ixlarge إلى 32xlarge طوال مدة الحملة.

قم بإنشاء صفحة تسجيل مكررة تخزن تفاصيل التسجيل في DynamoDB للمعالجة غير المتزامنة باستخدام SQS & amp Lambda.

اعمل مع فريق تصميم الويب الخاص بك لإنشاء بعض صفحات الويب في PHP للتشغيل على مثيل EC2 بحجم 32xlarge لمحاكاة أكثر 5 صفحات ويب للمعلومات شيوعًا وتسجيل صفحات الويب.

أعد إنشاء صفحات الويب الخمس الأكثر شيوعًا للعملاء الجدد واشترك في صفحات الويب على Lightsail واستفد من التحجيم التلقائي لـ AWS لتحمل العبء.

عند إضافة رسالة جديدة إلى قائمة انتظار SQS ، سيتم إخفاؤها من مثيلات المستهلك لفترة محددة

أثناء معالجة رسالة ، يمكن لمثيل المستهلك إعادة تعيين رؤية الرسالة عن طريق إعادة تشغيل عداد المهلة المحدد مسبقًا.

أثناء معالجة رسالة ، يمكن لمثيل المستهلك تعديل عداد رؤية الرسالة بمقدار ثابت

عندما يستقصي مثيل المستهلك عن عمل جديد ، ستسمح له خدمة SQS بالانتظار لفترة معينة حتى تكون الرسالة متاحة قبل إغلاق الاتصال.

عندما يقوم مثيل المستهلك باسترداد رسالة ، سيتم إخفاء هذه الرسالة من مثيلات المستهلك الأخرى لفترة محددة.

استخدم Elastic Load Balancer ، وهو نشر متعدد النطاق لمجموعة Auto- Scaling من مثيلات EC2 Spat (الأساسية) تعمل جنبًا إلى جنب مع مجموعة Auto-Scaling من مثيلات EC2 عند الطلب (ثانوية) ، DynamoD

2. استخدم Elastic Load Balancer ، وهو نشر متعدد النطاق لمجموعة Auto- Scaling من مثيلات EC2 عند الطلب (أساسية) تعمل جنبًا إلى جنب مع مجموعة Auto-Scaling لمثيلات EQ Spot (ثانوية) ، نشر متعدد AZ من RDS.

3.استخدام Elastic Load Balancer ، وهو نشر متعدد النطاق لمجموعة Auto-Scaling من مثيلات EC2 الموضعية (الأولية) التي تعمل جنبًا إلى جنب مع مجموعة Auto-Scaling من مثيلات EC2 عند الطلب (ثانوية) ، نشر متعدد AZ من RDS.

1 قم بإنشاء مستخدم IAM بسياسة يمكنها قراءة إعدادات Security Group و NACL.

قم بإنشاء دور IAM بسياسة يمكنها قراءة إعدادات مجموعة الأمان و NACL.

3 قم بإنشاء دور IAM بسياسة يمكنها قراءة مجموعة الأمان وإعدادات المسار.

4 اشرح أن AWS يطبق أمان الشبكة بشكل مختلف وأنه لا يوجد جهاز جدار حماية. قد تقترح بعد ذلك أن يأخذ الاستشاري دورة "A Cloud Guru" AWS CSA-A استعدادًا للتدقيق.

قم بإنشاء مستخدم IAM بسياسة يمكنها قراءة مجموعة الأمان وإعدادات المسار.

4 اشرح أن AWS يطبق أمان الشبكة بشكل مختلف وأنه لا يوجد جهاز جدار حماية. قد تقترح بعد ذلك أن يأخذ الاستشاري دورة "A Cloud Guru" AWS CSA-A استعدادًا للتدقيق.

قم بتمكين التحقق من المصدر / الوجهة في مثيل NAT.

قم بتكوين كل حركة المرور للخروج عبر Elastic Load Balancer.

قم بتعطيل فحص المصدر / الوجهة في مثيل NAT الخاص بك.

أثناء معالجة رسالة ، يمكن لمثيل المستهلك تعديل عداد رؤية الرسالة بمقدار ثابت.

أثناء معالجة رسالة ، يمكن لمثيل المستهلك إعادة تعيين رؤية الرسالة عن طريق إعادة تشغيل عداد المهلة المحدد مسبقًا.

عندما يستقصي مثيل المستهلك عن عمل جديد ، ستسمح له خدمة SQS بالانتظار لفترة معينة حتى تكون الرسالة متاحة قبل إغلاق الاتصال.

عند إضافة رسالة جديدة إلى قائمة انتظار SQS ، سيتم إخفاؤها من مثيلات المستهلك لفترة محددة

عندما يسترد مثيل المستهلك رسالة ، سيتم إخفاء هذه الرسالة في قائمة الانتظار لفترة محددة.

6 اقترح أنه أثناء الانتقال ، يمكن تشغيل حل AWS Storage Gateway VTL ثانٍ في VPC الجديد للعميل ودمجه مع VTS الحالي. في الوقت نفسه ، يمكن استخدام حل Enterprise Backup Solution الحالي لإجراء نسخ من شريط إلى شريط لترحيل المحفوظات من الشريط إلى شريط VTL / VTS الظاهري.


نصائح حول مجموعات الأمان والمنافذ التي لها وصول غير مقيد


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

يجعل Amazon FSx for Luster من السهل والفعال من حيث التكلفة إطلاق وتشغيل نظام الملفات عالي الأداء الأكثر شهرة في العالم. يتم استخدامه لأحمال العمل مثل التعلم الآلي والحوسبة عالية الأداء (HPC) ومعالجة الفيديو والنمذجة المالية. تم تصميم نظام الملفات Luster مفتوح المصدر للتطبيقات التي تتطلب تخزينًا سريعًا - حيث تريد أن يتماشى التخزين لديك مع حوسبتك. يتكامل FSx for Luster مع Amazon S3 ، مما يجعل من السهل معالجة مجموعات البيانات باستخدام نظام الملفات Luster. عند الارتباط بحاوية S3 ، يعرض FSx لنظام الملفات Luster بشفافية كائنات S3 كملفات ويسمح لك بإعادة كتابة البيانات المتغيرة إلى S3.
يوفر FSx for Luster القدرة على معالجة "البيانات الساخنة" بطريقة متوازية وموزعة وكذلك تخزين "البيانات الباردة" بسهولة على Amazon S3. لذلك فإن هذا الخيار هو الأنسب لبيان المشكلة المحدد.

خيارات غير صحيحة:
Amazon FSx for Windows File Server - توفر Amazon FSx for Windows File Server تخزين ملفات مُدار بالكامل وموثوقًا للغاية يمكن الوصول إليه عبر بروتوكول Service Message Block (SMB) القياسي في الصناعة. إنه مبني على Windows Server ، ويقدم مجموعة واسعة من الميزات الإدارية مثل حصص المستخدم واستعادة ملف المستخدم النهائي وتكامل Microsoft Active Directory (AD). لا يسمح FSx لـ Windows بتقديم كائنات S3 كملفات ولا يسمح لك بإعادة كتابة البيانات المتغيرة إلى S3. لذلك لا يمكنك الرجوع إلى & quot؛ بيانات & quot؛ مع وصول سريع للقراءات والتحديثات بتكلفة منخفضة. ومن ثم فإن هذا الخيار غير صحيح.

Amazon EMR - Amazon EMR هي منصة البيانات السحابية الضخمة الرائدة في الصناعة لمعالجة كميات هائلة من البيانات باستخدام أدوات مفتوحة المصدر مثل Apache Spark و Apache Hive و Apache HBase و Apache Flink و Apache Hudi و Presto. تستخدم Amazon EMR Hadoop ، وهو إطار عمل مفتوح المصدر ، لتوزيع بياناتك ومعالجتها عبر مجموعة قابلة لتغيير الحجم من مثيلات Amazon EC2. لا تقدم EMR نفس سرعة التخزين والمعالجة مثل FSx لـ Luster. لذلك فهو ليس مناسبًا لسيناريو سير العمل عالي الأداء المحدد.


12 إجابات 12

يود مصنعو PLC أن تصدق أن برامجهم أكثر موثوقية ويتم اختبارها بشكل أكثر شمولاً. انطباعي هو أن مكونات نظام التشغيل الأساسية الخاصة بـ PLCs عادة ما تكون مصممة ومختبرة بشكل جيد ، لكن محركات الأجهزة الخارجية (أنظمة الحركة وما شابهها) غالبًا ما يتم اختراق المكتبات معًا بواسطة مهندسي التطبيقات ثم يتم تمريرها في جميع أنحاء الشركة. غالبًا ما تكون الأجهزة الموجودة في PLCs قديمة - الكثير منها يعمل بمعالجات Geode القديمة والساخنة.

عندما تشتري PLC من Allen-Bradley أو B & ampR أو Siemens أو أي من اللاعبين الكبار الآخرين ، فأنت تدفع في الغالب مقابل الدعم عندما تسوء الأمور. تم تصنيع أجهزتهم بنفس عمليات التصنيع مثل Arduinos ، ولا يوجد شيء سحري حول أنظمة التشغيل في الوقت الفعلي التي تعمل على PLCs مما يجعلها خالية من الأخطاء. لكني أعتقد أن هذا الدعم غالبًا ما يستحق الدفع مقابله. إذا كانت آلة تكلف الشركة مليون دولار كل يوم لا تعمل ، فسأكون متأكدًا من أنه عندما يحدث خطأ ما ، كان هناك فريق من المحترفين الذين يمكنهم المساعدة في إصلاحها ، ليس أنا وجوجل فقط. بالنسبة للحالة المحددة للستائر الخفيفة أو غيرها من أقفال الأمان ، أود التأكد من أن الشركة المصنعة لديها بوليصة تأمين ضخمة مطبقة ، بدلاً من بيان يحاول التنصل من جميع القابلية للتسويق لأي غرض معين.

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

من المحتمل أن أضع نموذجًا أوليًا للنظام باستخدام Arduino ثم أعد كتابة الكود في C خالص بمجرد أن يعمل ، بحيث يكون الكود الخاص بي هو الكود الوحيد في وحدة التحكم الدقيقة.

Arduino نفسه ليس جيدًا للتطبيقات الصناعية بسبب نقص الحماية المناسبة ودرع أمبير. ولكن من الممكن صنع وحدات تحكم قائمة على أساس AVR من الدرجة الصناعية:

يجب أن يكون لديك حماية ، تصفية الطاقة / التنظيم / الحماية ، optopairs لقيادة الأشياء الخارجية ، أغطية فصل مناسبة لكل شريحة رقمية.

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

يجب عليك التحقق من مصدر الساعة الخاص بك بعناية - لا يتراجع AVR إلى مذبذب RC في حالة فشل مذبذب الكريستال. لذلك من الأفضل التمسك بـ RC الداخلي إذا كنت لا تحتاج إلى دقة الساعة أو تولي اهتمامًا إضافيًا للتوجيه البلوري ، ومكثفات التحميل ، وجودة PCB (= تذكيرات التدفق ، وحماية الرطوبة) والدرع حول الكريستال.

هناك uC أفضل للتطبيقات الصناعية ، لا سيما وجود ميزة RC-back-back.

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

في الوقت الحاضر ، في أنظمة التحكم الأكثر تعقيدًا ، تشتمل عمليات السلامة الحرجة دائمًا على دعم سلكي / هوائي / هيدروليكي / ميكانيكي صلب ، أو على الأقل حالة آمنة من التعطل. تعد واجهة المشغل لنظام التحكم جزءًا أساسيًا من نظام التحكم ، والذي يعد في معظم الحالات جهاز كمبيوتر مكتبي من متجر أجهزة الكمبيوتر المحلي خارج نطاق التحكم في الجهاز ، مع نظام تشغيل عربات التي تجرها الدواب / المعرضة للانهيار الذي يعمل على تشغيل عربات التي تجرها الدواب / تحطم- تطبيقات التحكم في العمليات المعرضة. هذا ليس من قبيل المبالغة. لقد صممنا وبنينا المصانع في أكثر البيئات تحديًا في الصناعات الكيميائية والتعدين حيث يشكل الغبار والأبخرة جزءًا من الحياة ، حتى في غرفة التحكم ، ولم يكن هناك أعطال من المعدات الاستهلاكية / التجارية القياسية الجاهزة أكثر من من معدات صناعية. تفشل محركات الأقراص الثابتة ولكنها مغلقة. فشلوا على أي حال. نقوم بانتظام بنفخ سحب من الغبار الصناعي للوحات الكمبيوتر الرئيسية التي تعمل على HMI. الحيلة هي أن يكون لديك تكرار مزدوج / ثلاثي في ​​جميع الأنظمة المهمة / الحرجة. يمكن لأي شيء أن يفشل. هذا هو السبب في أن العناصر الهامة للسلامة يتم دعمها دائمًا بواسطة الأجهزة ، وهذا مطلب تشريعي في عظم الدول والحس السليم في الآخرين.

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

تقدم Rockwell منتج SoftLogix وهو عبارة عن برنامج PLC يعمل على جهاز كمبيوتر شخصي قياسي في المتجر. فكر في الأمر. يمكن أن تكون الحجة القائلة بأن أجهزة الكمبيوتر الشخصية تعمل في بيئة كهربائية / جوية أكثر حماية من وحدات التحكم PLCs صحيحة في بعض الحالات ، ولكن ليس في معظمها ، وقليل جدًا في المصانع التي نخدمها. المفارقة هي أن انتشار الإيثرنت يتطلب محولات إيثرنت في الميدان. لا نستخدم ، كقاعدة عامة ، المفاتيح الصناعية ، ولكن العناصر التجارية القياسية ولا يزال يتعين علينا فشل التبديل بعد 10 سنوات ومئات من عمليات التثبيت. توجد هذه المفاتيح في نفس اللوحات مثل PLC I / O. ما يفشل ، ولكن نادرًا ، هو مصدر الطاقة الرخيص الذي يصاحب المحول. تجنب ذلك ولن يكون المفتاح هو المكون الأكثر موثوقية في التثبيت.

بالنسبة للاختبار الصارم / مراقبة الجودة لمعدات PLC الصناعية ، فقد قمت مؤخرًا بتكليف مصنع حيث كان كل واحد من 8 أو 10 من بطاقات الإدخال / الإخراج التناظرية عن بُعد هي DOA. المورد ، أحد أكبر العلامات التجارية في العالم ، لم يغمض عينيه واستبدله على الفور. أعتقد أنها كانت دفعة سيئة وقد يكونون على علم بالمشكلة قبل تقريرنا. عملت البدائل بشكل مثالي وما زالت تعمل بعد 3 سنوات.

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


عظيم ، لقد هلكنا! - ماذا نفعل حيال ذلك؟

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

حول الإصدار والتخزين

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

ولكن مع ذلك ، إذا كانوا يوفرون مثل هذه الوظيفة ، فربما يكون الحل الخاص بك هو اتباع إرشادات معايير الصناعة المحبوبة أعلاه ، ونقلها إلى نظام البرمجة هذا !!

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

حول الاختبار

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

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

الطريق طويل وحاد.

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

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

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

لسوء الحظ ، هذا يعني أنك قد تحتاج إلى الغوص والقيام بقدر هائل من العمل على الساق. وبالتالي.

الكلمات المشهورة والطلبات المتواضعة:

  • وثيقة كل ما تفعله.
  • يشارك خبرتك.
  • المصدر المفتوح أي أداة كتابتك.

من خلال القيام بكل هذا ، سوف:

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

من يدري ، يمكن أن تكون في بداية مجتمع جديد نابض بالحياة لغة غامضة X. إذا لم يكن هناك شيء ، ابدأ واحدًا!

ربما هو جميل من الداخل، لكن لا أحد لديه دليل حتى الآن ، لذلك ساعدني إنزال هذا الجدار القبيح و دع الآخرين يلقون نظرة خاطفة!

وللغاية الخطوة الأولى سيكون إدخال نظام التحكم في الإصدار (SVN ، Git ، Mercurial ، TFS ، إلخ). يجب أن يكون هذا في مشروع سيحتوي على إعادة التخصيم.

يحرر: بخصوص VSC - يمكن لكل حزمة تحكم بالمصادر إدارة الثنائيات ، على الرغم من وجود بعض القيود. تتمتع معظم الأدوات في السوق بالقدرة على استخدام عارض ومحرر مخصص للفرق ، واستخدام هذه الإمكانية. الملفات الثنائية المصدر ليست عذرا عدم استخدام التحكم في الإصدار.

هناك وظيفة مماثلة حول كيفية التعامل مع التعليمات البرمجية القديمة، قد يكون مرجعًا جيدًا للمتابعة - نصيحة حول العمل مع التعليمات البرمجية القديمة

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

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

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

لا أعرف ما إذا كان هذا خيارًا لك ، لكنني سأبدأ بمحاولة إقناعهم بذلك توظيف المزيد من المطورين المحترفين. بهذه الطريقة يمكنهم التركيز في مشاكل المجال (أنا متأكد من أن لديهم ما يكفي هناك).

أعتقد أنهم أذكياء جدًا ، لكن أن تصبح مطورًا جيدًا يتطلب الكثير من الوقت. هل هم مستعدون لقضاء الكثير من الوقت في نشاط ليس من أعمالهم الرئيسية؟ IMHO ، هذه ليست الطريقة لتحقيق أفضل النتائج.

رائع. يبدو أنك تواجه تحديًا كبيرًا حقًا أمامك! كنت سأفعل شيئًا على غرار ما يلي:

  • في البداية: تحديد الأولويات. ماذا تريد تحقيقه اولا؟ ما هو الأهم بالنسبة للوضع الحالي للمشروع؟ ما الذي ستحصل عليه أكثر من مقابل مقدار الوقت الذي ستستغرقه للوصول إلى هناك.
  • تأكد من أن لديك ملف التحكم في الإصدار النظام. Git أو Mercurial على سبيل المثال.
  • الحصول على نوع من التكامل المستمر نظام (مثل Jenkins) قيد التشغيل.
  • احصل على تتبع الأخطاء تشغيل النظام. فرس النبي لطيف جدا في رأيي.
  • تفحص تحليل الكود الثابت (إذا كان هناك شيء متاح للغة التي تعمل بها حاليًا).
  • حاول أن تحقق نفس القدر التناسق في أي شيء من تسمية المتغيرات إلى اصطلاحات التعليمات البرمجية العامة والمبادئ التوجيهية في قاعدة الكود.
  • اخضع النظام للاختبار. هذا مهم للغاية لنظام إرث كبير مثل هذا في رأيي. استخدم حالات الاختبار لتوثيق السلوك الحالي، بغض النظر عما إذا كان السلوك يبدو غريبًا أم لا (عادةً ما يكون هناك سبب وراء ظهور الشفرة لسبب معين ، أو قد تكون جيدة أو سيئة ، أو كلاهما P). عمل Michael Feathers بفاعلية مع Legacy Code هو مصدر ممتاز لذلك.

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

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

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

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

ابحث عن الحالات التي تم فيها تكرار نفس الوظيفة. اعملوا على التوحيد.

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

بعد النظر في Gensym G2 قليلاً ، يبدو أن طريقة التعامل مع هذه المشكلة ستعتمد بشكل كبير على مقدار قاعدة الشفرة التي تبدو كالتالي:

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

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

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

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

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

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

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

عادة ما تكون الشكاوى التي تسمعها مقدمًا لا علاقة لها بالمشكلات المهمة. بعد كل شيء ، من الطبيعي تمامًا سماع هذه الشكاوى في أي مشروع برمجي.

صعب فهم الكود؟ التحقق من. قاعدة رمز ضخمة؟ التحقق من.

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

إليكم ما أود معالجته بالترتيب:

  1. النسخ الاحتياطية ، كل من الخادم والإصدار المحلي
  2. قم بإعداد متتبع الأخطاء
  3. إعداد نظام الإصدار
  4. قم بإعداد الأسئلة الشائعة / Wiki
  5. استخلاص المعلومات أولاً من جميع العلماء / المبرمجين
    • ذكرهم بقاعدة 80/20. 20٪ من الأخطاء مسؤولة عن 80٪ من المشاكل.
    • ركز على أكبر المشكلات ، واستمر في طلبات التحسين وما إلى ذلك.
    • الغرض هنا ليس تخويف الأشخاص بقائمة كبيرة ، ولكن قائمة من المكاسب الصغيرة التي يمكن تحقيقها. بعد كل شيء ، عليك أن تثبت جدارتك أيضًا.
  6. قم بإعداد نظام البناء
    • ابدأ العمل على الحصول على تصميمات موثوقة (قد يستغرق ذلك بعض الوقت)
    • تحديد وتسمية كل مشروع
    • تحديد التبعيات الدورية
    • إذا كانت هناك ثنائيات من بعض المشاريع مفتوحة المصدر ، فحاول الحصول على المصادر
  7. حدد كيف يمكن تشكيل كود G2 ، على سبيل المثال واجهات برمجة التطبيقات والخدمات
  8. حدد كيف يمكن اختبار وتوثيق كود G2.
  9. قم بإعداد نظام مراجعة التعليمات البرمجية
  10. استخلاص المعلومات الثاني
    • كيف تبدو الوحدة المثالية؟
    • كيفية تطويق التعليمات البرمجية القديمة
    • كيفية التفاف الوحدة النمطية الجديدة حول الكود القديم (انظر نمط Strangler http://agilefromthegroundup.blogspot.com.au/2011/03/strangulation-pattern-of-choice-for.html)
  11. حدد فريقًا من المبرمجين الأفضل واعمل معهم لتغليف وحداتهم.
  12. توجد مراجعات للكود في هذه المرحلة لتحسين الاتصال والتوثيق. اجعلها سهلة في هذه المرحلة. فرز أي مشاكل العملية.
  13. طرح النظام على المبرمجين الآخرين. دع أعضاء فريق الكراك يصبحون مرشدين أقران للبقية. تذكر أن القياس هو المشكلة هنا. أنت فعال في دور إداري.

أسئلة مثل هذه هي السبب الكامل وراء وجود مشروع Software Carpentry.

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

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

كما أنني أوصي بشدة بورقة Paul Dubois الممتازة "المحافظة على الصواب في البرامج العلمية" (الحوسبة في العلوم والهندسة أمبير، مايو - يونيو 2005) ، الذي يصف نهج "الدفاع في العمق" الذي يجمع بين عشرات الممارسات المختلفة بطريقة منطقية ومتماسكة.

أعتقد أولاً وقبل كل شيء عليك أن تنظف وضعك ماذا يريدون منك؟

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

أعتقد أن المطلب الأساسي هنا هو "حفظ المعرفة في النظام" ، لذلك عليك أن تذهب وتنقب عنها!

المهمة الأولى هي كتابة الوثائق.

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

يجب عليك بعد ذلك أن تسأل أين يريدون الذهاب؟

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

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

أثناء تحليل المستندات وكتابتها ، قراءة واستخدام والإعلان عن أنماط تصميم GoF! :-)

لقد انتهيت للتو من تقديم سلسلة من العروض التقديمية حول مبادئ روبرت مارتن SOLID لزملائي في العمل. لا أعرف جيدًا كيف تُترجم هذه المبادئ إلى G2 ، ولكن نظرًا لأنك تبحث عن أساسيات أساسية من 5 إلى 7 ، تبدو هذه مجموعة راسخة للبدء بها. إذا كنت تريد تقريبه إلى 7 ، فيمكنك البدء بـ DRY ورمي Fail-Fast.

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

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

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

أهم مبادئ العمل في مثل هذه الحالة هي:

كن صبورا. لن يتم ملء الحفرة التي استغرق حفرها 20 عامًا في غضون أسابيع قليلة.

كن ايجابيا. قاوم إغراء الشكوى والتذمر.

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

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

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

أنشئ تطبيقات صغيرة. عند العمل باستخدام قاعدة بيانات قديمة ، أجد أنني أصل إلى اللب. أستعيد روحي من خلال بناء تطبيقات مساعدة صغيرة. ربما ستساعدك هذه التطبيقات في قراءة قاعدة بيانات G2 العملاقة وفهمها وتعديلها. ربما يمكنك إنشاء IDE صغير أو أداة محلل ستساعدك على العمل في بيئتك. هناك العديد من الحالات التي لن تساعدك فيها البرمجة الوصفية وبناء الأدوات على الخروج من المآزق العملاقة التي تفرضها عليك قواعد الرموز القديمة فحسب ، بل تمنح عقلك أيضًا القدرة على الطيران بلا قيود من خلال لغة G2 الخاصة بك. اكتب أدواتك ومساعديك بأي لغة يمكنك القيام بها بشكل أسرع وأفضل. بالنسبة لي ، تشمل هذه اللغات Python و Delphi. إذا كنت شابًا من Perl ، أو كنت تحب البرمجة في C ++ أو C # ، فاكتب أدواتك المساعدة بهذه اللغة. تعليم باقي أعضاء الفريق كيفية إنشاء تطبيقات وأدوات مساعدة صغيرة ، و "المكوّنات" وستلاحظ في النهاية أن قاعدة التعليمات البرمجية القديمة الخاصة بك ليست شاقة على الإطلاق

مراجعة مراقبة: أظهر لخبراء المجال فائدة القدرة على العودة ، ومعرفة من الذي غير ماذا ، وما إلى ذلك (هذا أكثر صرامة مع جميع الملفات الثنائية ، ولكن إذا كانت المحتويات عبارة عن رمز بالفعل ، فمن المؤكد أن هناك نوعًا من محول G2 إلى نص التي يمكن أن تمكن الاختلافات.)

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

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

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

"البرنامج نفسه هو نموذج فيزيائي لمصنع معالجة كيميائية معقد."

"نظرًا لأن G2 يشبه الرمز غير المكتوب ، ولكنه رمز آلي مكتوب بواسطة بعض واجهة المستخدم الرسومية gadawful." - إريك ريبين

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

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

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

ثلاث حزم تجارية مستخدمة على نطاق واسع في صناعتك هي: gPROMS ، و Aspen Custom Modeller ، و (إذا كانت نماذجك لا تتضمن ظواهر موزعة على طول المجالات المكانية) ، فهناك حزم برامج تعتمد على Modelica ، مثل Dymola.

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

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

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

لذلك يمكنني القول ببعض الخبرة أن بعض الخيارات الرئيسية التي تم اتخاذها بشكل سيئ في وقت مبكر من تطوير البرنامج (مثل اللغة أو مكتبة المفاتيح) تميل إلى البقاء والتسبب في الألم لفترة طويلة. لقد قاموا بالفعل "بتشكيل" البرنامج من حولهم. يبدو لي أنك قد تواجه سنوات عديدة من تنظيف الشفرة الخالصة هنا. (أنا متردد في استخدام الأرقام ، لكنني أفكر في أكثر من 10 سنوات من الأشخاص ، وربما أكثر من ذلك بكثير إذا لم تتمكن من نقل الكود من G2 إلى شيء يدعم أدوات إعادة البناء الآلي الجيدة مثل Eclipse / Java quick-smart.)

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

لإعطاء بعض المنظور ، قد تكون مندهشًا جدًا من تقليل الحجم. على سبيل المثال يمكن في الواقع تمثيل 200،000 LoC في شيء مثل 5000 سطر من المعادلات (حسنًا ، أعتقد هنا ، لكن يمكنني أن أحاول الحصول على شهادة فعلية من الأصدقاء في العمل) بالإضافة إلى عدد قليل من الوحدات الوظيفية الصغيرة نسبيًا مكتوبة بشيء مثل C (على سبيل المثال ، حسابات الخصائص الفيزيائية - على الرغم من أن العبوات الجاهزة قد توجد مرة أخرى اعتمادًا على العملية الكيميائية الخاصة بك). هذا لأنك تتخلص حرفيًا من رمز الحل الخوارزمي وتترك "كومة" للأغراض العامة من المحللين الرياضيين تقوم بالعمل الشاق. بمجرد تشغيل عمليات المحاكاة ، يمكنك فعل الكثير معها ، مثل تحسين العملية - دون تغيير سطر من التعليمات البرمجية.

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

أخيرًا ، نظرًا لأن إجابتي قد تكون غير صحيحة ، أود فقط إضافة كتاب آخر إلى قائمة الكتب الجيدة المشار إليها هنا بالفعل: Clean Code by Robert Martin. مليئة بالنصائح البسيطة (والمبررة) التي يسهل تعلمها وتطبيقها ، ولكنها يمكن أن تحدث فرقًا كبيرًا للأشخاص الذين يطورون كودًا جديدًا في شركتك.


شاهد الفيديو: Learn Python in Arabic #34 - الاستمرار في التكرار continue in loop Python