تعتمد على أداة استخراج تبعية رمز المصدر ، المصممة لاستنتاج العلاقات النحوية بين كيانات رمز المصدر ، مثل الملفات والأساليب ، من لغات البرمجة المختلفة. هدفنا هو توفير إطار عمل يمكن توسيعه بسهولة لدعم استخراج التبعية من لغات البرمجة المختلفة وملفات التكوين ، بحيث يمكن بناء أدوات تحليل عالية المستوى ، بطريقة مستقلة عن اللغة. تتضمن تطبيقات العينة تصور التعليمات البرمجية ، وفهم البرنامج ، واكتشاف رائحة الكود ، وتحليل الهندسة المعمارية ، وإعادة تصميم التصميم ، إلخ.
إن إنشاءنا يعتمد على الملاحظات التي تفيد بأن البائعين المختلفين ، مثل الفهم ™ ، الهيكل 101 ™ ، و Lattix ™ ، أنشأوا أدوات استخراج التبعية الخاصة بهم المعبأة مع وظائف التحليل الأخرى. لإجراء تحليل جديد ، يجب على البائعين والباحثين إنشاء أدوات استخراج التبعية الخاصة بهم ، أو استخدام إخراج الأدوات الأخرى ، والتي عادة ما تكون مصممة ليتم إعادة استخدامها.
نعتقد أن تحليل التبعية لرمز مصدر البرمجيات هو واحد من أهم أسس هندسة البرمجيات. بالنظر إلى العدد المتزايد من الأنظمة المبنية على اللغات الجديدة واللاعب المتعدد ، فإن الحاجة إلى إطار استخراج التبعية متعدد اللغات المرن والقابل للتوسعة ، مع واجهات بسيطة وموحدة على نطاق واسع.
يعتمد على المصدر المفتوح والمجاني ، لتعزيز التعاون المجتمعي ، وتجنب العمل المتكرر ، وتحسين جودة الأدوات التحليلية.
يمكنك تنزيل أحدث إصدار يعتمد من https://github.com/multilang-depends/depends/release/ ،
ثم قم بفك ضغط ملف depends-*version*.tgz
في أي دليل لجهاز الكمبيوتر الخاص بك.
يعتمد على Java ، لذلك يمكن تشغيله على أي نظام تشغيل مع بيئة JRE أو JDK (مثل Windows أو Linux أو Mac OS).
باتباع مبدأ المسؤولية الفردية ، يتم تصميمه يعتمد لغرض استخراج التبعيات فقط. يوفر فقط واجهة CLI ، بدون واجهة المستخدم الرسومية. ولكن يمكنك تحويل إخراج يعتمد على واجهة المستخدم الرسومية للأدوات الأخرى ، مثل GraphViz (http://graphviz.org/) ، و plantuml (http://plantuml.com/) ، و DV8 (https: // www. Archdia.com).
يمكنك التشغيل يعتمد على الطرق التالية: depends.sh
على linux/mac java -jar depends.jar
depends.bat
ملاحظة: إذا واجهت خطأ في الذاكرة مثل GC overhead limt exceed
، فيرجى توسيع ذاكرة JVM مثل اتباع java -Xmx4g -jar depends.jar <args>
.
يمكن إدراج استخدام أداة CLI من خلاله depends --help
، مثل ما يلي:
Usage: depends [-hms] [--auto-include] [-d=<dir>] [-g=<granularity>]
[-p=<namePathPattern>] [-f=<format>[,<format>...]]...
[-i=<includes>[,<includes>...]]... <lang> <src> <output>
<lang> The language of project files: [cpp, java, ruby, python,
pom]
<src> The directory to be analyzed
<output> The output file name
--auto-include auto include all paths under the source path (please
notice the potential side effect)
-i, --includes=<includes>[,<includes>...]
The files of searching path
-d, --dir=<dir> The output directory
-f, --format=<format>[,<format>...]
The output format: [json(default),xml,excel,dot,
plantuml]
-g, --granularity=<granularity>
Granularity of dependency.[file(default),method,L#(the level of folder. e.g. L1=1st level folder) ]
-h, --help Display this help and exit
-s, --strip-leading-path Strip the leading path.
-m, --n-map-files Output DV8 dependency map file.
-p, --namepattern=<namePathPattern>
The name path separators.[default(/),dot(.)
يعتمد التشغيل ، تحتاج إلى تحديد 3 أهم معلمات: lang
، src
، output
، كما هو موضح أعلاه.
يرجى ملاحظة أنه بالنسبة لمعظم لغات البرمجة ، مثل C/C++, Ruby, Maven/Gradle
، فإن مسار --includes
مهم لأنه يعتمد على العثور على الملفات الصحيحة عند إجراء تحليل الاعتماد على التعليمات البرمجية ، على غرار Makefile/IDE. خلاف ذلك ، قد لا تكون التبعيات المستخرجة دقيقة.
لا تحدد تشمل مسارات خارج دليل SRC (على سبيل المثال ، يتضمن مستوى النظام المسارات ، أو التبعيات الخارجية) لأن يعتمد على معالجتها.
--auto-include
هي معلمة مفيدة لتبسيط إدخال Dire Dirs: مع هذه المعلمة ، سوف تتضمن جميع المخرجين الفرعيين لـ src
.
بالنسبة لبرامج Java
، لا يُطلب منك تحديد مسارات ، لأن التعيين بين مسارات ملف Java يتم ذكره بشكل صريح في عبارات الاستيراد.
يمكن تصدير إخراج يعتمد على 5 تنسيقات: JSON ، XML ، Excel ، DOT ، و Plantuml. نظرًا لتقييد MS Excel ، يمكنك فقط التصدير إلى ملف Excel إذا كان عدد العناصر أقل من 256.)
يمكن استخدام ملفات DOT لإنشاء الرسوم البيانية باستخدام GraphViz (http://graphviz.org/).
يمكن استخدام ملفات Plantuml لإنشاء مخطط UML باستخدام Plantuml (http://plantuml.com/).
يمكن استخدام ملفات JSON و XML لإنشاء مصفوفات بنية التصميم (DSMS) باستخدام DV8 (https://www.archdia.net).
يمكن العثور على تفاصيل تنسيق JSON/XML هنا.
يعتمد على دعم أنواع التبعية الرئيسية ، بما في ذلك:
import
، C/C ++ #include
، Ruby require
.للحصول على تفاصيل الأنواع المدعومة ، يرجى الرجوع إلى هنا
هناك العديد من الطرق للمساهمة في . على سبيل المثال:
يعتمد على تنفيذ نواة رشيقة لتحليل التبعية ، والتي يمكن تمديدها لاستيعاب لغات البرمجة المختلفة. حتى الآن ، فإنه يدعم فقط Java و C/C ++ و Ruby و Maven. لا تتردد في الاستفادة من هذا الإطار لإضافة مستخرج التبعية الخاص بك.
الجهد اللازم لكل لغة يختلف كثيرًا. أمضينا 24 ساعة لدعم Maven ، لكننا أمضينا أسابيع لاستخراج التبعيات من Ruby
تحليل ملفات المصدر ليست تافهة. هناك العديد من الميزات الخاصة باللغة التي يجب أخذها في الاعتبار. يعتمد الإبلاغ عن ميزات اللغة غير المدعومة أو إصلاح المشكلات الحالية بشكل أفضل.
يمكنك استخدامها كبنات بناء لإنشاء أدوات مختلفة ، إما مفتوحة المصدر أو تجاري ، للإنتاج أو الأبحاث ، مثل أدوات واجهة المستخدم الرسومية ، وأدوات تصور التعليمات البرمجية ، إلخ.
سيساعدنا ذلك كثيرًا إذا أصبحت شركتك أو معهدك راعيًا لمشروعنا. يمكن أن يساعد تبرعك في أن يكون مستقلاً ومستدامًا ودعم المزيد من المساهمين.
اهلا وسهلا بكم في استخدام "يعتمد" في مشاريعك ، إما مفتوحة المصدر أو تجاري ، وكذلك أبحاث هندسة البرمجيات. ملاحظاتك موضع تقدير كبير. سنكون شاكرين أيضًا إذا كان بإمكانك مساعدتنا في نشر الكلمات وتشجيع المزيد من الأشخاص على استخدامها.
تم بناء هذا المشروع على العمل الممتاز للباحثين الآخرين ، بما في ذلك إطار Enre (https://github.com/jinwuxia/enre) الذي اقترحه Jin Wuxia et al. ، وأبحاث الهندسة المعمارية من فريق البروفيسور يوانفانغ كاي ( https://www.cs.drexel.edu/~yfcai/) على تحليل التبعية.
تم تصميم الواجهة الأمامية الخاصة باللغة الخاصة بـ Language على العديد من المشاريع الممتازة مفتوحة المصدر ، بما في ذلك قواعد النحو antlr/antlr (https://github.com/antlr) ، Eclipse CDT (www.eclipse.org/cdt) ، و jruby ( https://github.com/jruby/jruby).