هل ينبغي أن يشمل عد LOC الاختبارات والتعليقات؟

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

  •  07-07-2019
  •  | 
  •  

سؤال

في حين أن LOC (# سطر من التعليمات البرمجية) يعد قياسًا إشكاليًا لتعقيد التعليمات البرمجية، فهو الأكثر شيوعًا، وعندما يستخدم بعناية شديدة، يمكن أن يوفر تقديرًا تقريبيًا للتعقيدات النسبية على الأقل لقواعد التعليمات البرمجية (أي.إذا كان أحد البرامج هو 10KLOC والآخر 100KLOC، مكتوبًا بنفس اللغة، بواسطة فرق ذات نفس الكفاءة تقريبًا، فمن المؤكد تقريبًا أن البرنامج الثاني أكثر تعقيدًا).

عند حساب أسطر التعليمات البرمجية، هل تفضل حساب التعليقات في ؟ماذا عن الاختبارات؟

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

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

لقد رأيت طرقًا في جميع أنحاء الطيف، بدءًا من حساب الأسطر "التشغيلية" غير الفارغة وغير المعلقة، إلى "XXX أسطر من التعليمات البرمجية التي تم اختبارها والتعليق عليها"، والتي تشبه إلى حد كبير تشغيل "wc -l على كافة ملفات التعليمات البرمجية في مشروع".

ما هو تفضيلك الشخصي، ولماذا؟

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

المحلول

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

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

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

إذا يقيمونها على الميزات المضافة، وتحصل على الكثير من الميزات.

إذا يقيمونها على مقياس مكابي تحصل ظائف بسيطة يبعث على السخرية.

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

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

ولكن إذا كنت تريد حقا مقياس "حجم كود 'فقط tar.gz قانون الأساس. انها تميل لتكون بمثابة تقدير تقريبي أفضل من "المحتوى" من خطوط العد الذي هو عرضة للأساليب البرمجة المختلفة.

نصائح أخرى

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

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

Lines of Code:       75,000
Lines of Comments:   10,000
Lines of Tests:      15,000
                  ---------
Total:              100,000

بهذه الطريقة يمكنك التأكد من أنها ستفعل

  1. الانتهاء.
  2. قم بنفس الطريقة في كل مرة.

وأنا شخصيا لا أشعر بأن متري LOC لوحده هو مفيد مثل بعض المقاييس الرموز الأخرى.

NDepend سوف تعطيك متري LOC لكن سيعطي لك أيضا العديد من الآخرين، هذه الدرجة من التعقيد cyclometric. بدلا من ذكرها جميعا، وهنا صلة للقائمة.

وهناك أيضا CodeMetric الإضافية للحصول على <لأ href = "HTTP: // www.red-gate.com/products/reflector/ "يختلط =" نوفولو noreferrer "> العاكس

وأنا لست بصدد الإجابة على سؤالك مباشرة لسبب بسيط: أنا <م> الكراهية سطور التعليمات البرمجية المتري. بغض النظر عن ما كنت أحاول لقياس ذلك من الصعب جدا أن تفعل أسوأ من LOC. الى حد كبير أي متري البعض يهمك أن نفكر في ما ستكون أفضل.

وعلى وجه الخصوص، يبدو أنك تريد قياس تعقيد من التعليمات البرمجية. عموما cyclometric تعقيد (وتسمى أيضا تعقيد مكابي) هو أفضل بكثير متري لهذا الغرض.

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

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

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

for (int i = 0; i < list.count; i++)
{
    // do some stuff
}

for (int i = 0; i < list.count; i++){
    // do some stuff
}

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

يعتمد على الغرض الذي تستخدم LOC من أجله.

كمقياس للتعقيد - ليس كثيرًا.ربما تكون 100KLOC في الغالب عبارة عن تعليمات برمجية تم إنشاؤها من جدول بسيط، و10KLOC kas 5KLOC regexps.

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

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

[عدل] [شخص لديه رأي مماثل حول حجم الكود]1

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

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

أخيرًا، إخلاء المسؤولية - استخدم المقاييس بذكاء.هناك استخدام جيد للمقاييس هو المساعدة في الإجابة على السؤال "أي جزء من الكود سيستفيد أكثر من إعادة إنشاء" أو "ما مدى عاجلة مراجعة رمز لأحدث تسجيلات؟" - وظيفة خط 1000 مع تعقيد سيكلومي من 50 هي علامة نيون واضحة تقول "refactor me الآن".الاستخدام السيئ للمقاييس هو "مدى إنتاجية المبرمج X" أو "ما مدى تعقيد برنامجي".

مقتطف من المقال: كيف تحسب عدد أسطر التعليمات البرمجية (LOC) لديك؟ نسبة إلى الأداة NDepend التي تقوم بحساب القيمة المنطقية عدد أسطر الكود لبرامج .NET.


كيف تحسب عدد أسطر التعليمات البرمجية (LOC) لديك؟

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

اعتمادًا على أسلوب البرمجة الخاص بكل مطور وعلى حسب اختيار اللغة (C#، VB.NET...) يمكن أن يكون هناك اختلاف كبير من خلال قياس LOC.

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

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

في عالم .NET، يمكن حساب LOC المنطقي من ملفات PDB، وهي الملفات التي يستخدمها مصحح الأخطاء لربط كود IL بالكود المصدر.تقوم الأداة NDepend بحساب LOC المنطقي لطريقة ما بهذه الطريقة:وهو يساوي عدد نقاط التسلسل الموجودة لطريقة ما في ملف PDB.يتم استخدام نقطة التسلسل لتحديد نقطة في كود IL تتوافق مع موقع محدد في المصدر الأصلي.مزيد من المعلومات حول نقاط التسلسل هنا.لاحظ أن نقاط التسلسل التي تتوافق مع قوسي C# "{" و"}" لا تؤخذ بعين الاعتبار.

من الواضح أن LOC لنوع ما هو مجموع LOC لطرقه، وLOC لمساحة الاسم هو مجموع LOC لأنواعه، وLOC للتجميع هو مجموع LOC لمساحة الاسم الخاصة به، وLOC للتطبيق هو مجموع جمعياتها LOC.وهنا بعض الملاحظات:

  • الواجهات والأساليب المجردة والتعدادات لها LOC يساوي 0.يتم أخذ التعليمات البرمجية المحددة التي يتم تنفيذها بشكل فعال فقط في الاعتبار عند حساب LOC.
  • لا تعتبر مساحات الأسماء والأنواع والحقول وإعلانات الطرق سطرًا من التعليمات البرمجية لأنها لا تحتوي على نقاط تسلسل مقابلة.
  • عندما يواجه برنامج التحويل البرمجي C# أو VB.NET تهيئة حقول المثيل المضمنة، فإنه يقوم بإنشاء نقطة تسلسل لكل منشئ المثيل (تنطبق نفس الملاحظة على تهيئة الحقول الثابتة المضمنة والمنشئ الثابت).
  • لا يتداخل LOC المحسوب بطريقة مجهولة مع LOC لطرق الإعلان الخارجية الخاصة به.
  • عادة ما تكون النسبة الإجمالية بين NbILInstructions وLOC (في C# وVB.NET) حوالي 7.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top