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

StackOverflow https://stackoverflow.com/questions/146936

  •  02-07-2019
  •  | 
  •  

سؤال

كما يمكنك العمل في تركة codebase ما سوف يكون لها أكبر الأثر على مر الزمن التي من شأنها تحسين نوعية تعليمات البرمجة الأساسية?

  • إزالة غير المستخدمة رمز
  • إزالة تكرار الكود
  • إضافة وحدة الاختبارات لتحسين التغطية الاختبار حيث التغطية منخفضة
  • إنشاء تتفق التنسيق في الملفات
  • تحديث 3rd الطرف البرمجيات
  • والحد من التحذيرات التي تم إنشاؤها بواسطة ثابت أدوات التحليل (أنا.هـ.Findbugs)

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

هل كانت مفيدة؟

المحلول

هذا هو كتاب عظيم.

إذا كنت لا ترغب في الإجابة, فإن أفضل نصيحة أستطيع أن أعطي ليكون:

  • أولا توقف عن جعل التعليمات البرمجية القديمة[1]

[1]:إرث = رمز رمز دون وحدة الاختبارات وبالتالي غير معروف

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

ملاحظة:أنا لا أقول أن عليك أن تتوقف عن كل شيء و قضاء أسابيع في كتابة الاختبارات على كل شيء.بل على العكس تماما, فقط اختبار حول المناطق التي تحتاج إلى اختبار العمل من هناك.

جيمي Bogard وراي هيوستن لم مثيرة للاهتمام يلقي الشاشة على الموضوع جدا مشابهة لهذه:http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/05/06/pablotv-eliminating-static-dependencies-screencast.aspx

نصائح أخرى

أنا أعمل مع إرث 1M LOC تطبيق المكتوبة تعديلها من قبل حوالي 50 المبرمجين.

* Remove unused code

عديمة الفائدة تقريبا...تجاهله.أنت لن تحصل على عائد كبير على الاستثمار (ROI) من هذا واحد.

* Remove duplicated code

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

* Add unit tests to improve test coverage where coverage is low

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

* Create consistent formatting across files

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

* Update 3rd party software

تفعل ذلك إلا إذا كان هناك جديد حقا ميزة جميلة أو النسخة التي لديك لا يدعمها نظام التشغيل الجديد.

* Reduce warnings generated by static analysis tools

يمكن أن يستحق ذلك.في وقت الإنذار يمكن إخفاء خلل محتمل.

إضافة وحدة الاختبارات لتحسين التغطية الاختبار.بعد اختبار جيد التغطية سوف تسمح لك ريفاكتور وتحسين وظائف دون خوف.

هناك كتاب جيد في هذا مكتوب من قبل كاتب CPPUnit, العمل بفعالية مع التعليمات البرمجية القديمة.

إضافة إلى اختبارات إرث رمز certianly أكثر صعوبة مما خلق لهم من نقطة الصفر.الأكثر فائدة مفهوم أخذت من الكتاب هو مفهوم "طبقات" ، الذي يعرف الريش

"مكان حيث يمكنك تغيير السلوك في البرنامج دون تحرير في هذا المكان."

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

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

أنا يمكن أن تتصل هذه المسألة كما لدي حاليا في حضن واحدة من تلك' المدرسة القديمة تعليمات البرمجة الأساسية.ليس حقا تراث ولكن بالتأكيد لا يتبع الاتجاه من السنين.

انا اقول لكم الأشياء التي أحب أن الإصلاح في ذلك لأنها علة لي كل يوم:

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

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

أود أن أقول أنه إلى حد كبير يعتمد على ما تريد القيام به مع التعليمات البرمجية القديمة...

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

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

إذا كنت تخطط على الإصدار 2.0 ، إضافة وحدة الاختبارات و تنظيف التعليمات البرمجية سوف تجلب إلى الأمام

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

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

أكبر شيء فعلته إرث البرمجية التي يجب أن تعمل مع بناء حقيقي API حوله.انها 1970 نمط COBOL API التي بنيت فيها .صافي نموذج كائن حولها ، بحيث أن كل تعليمات برمجية غير آمنة في مكان واحد ، كل من الترجمة بين API الأصلي أنواع البيانات .صافي أنواع البيانات في مكان واحد ، الطرق الرئيسية عودة وقبول البيانات ، وهلم جرا.

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

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

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

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

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

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

في وقت متأخر إلى الحزب ، ولكن قد يكون من المفيد القيام فيها وظيفة/طريقة استخدامها أو المشار إليها في كثير من الأحيان:

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top