
إطار عمل تحليل ثابت سهل التعلم/الاستخدام لجافا وأندرويد
<div align="center">
<img src="https://assets.kitploit.com/production/public/readmes/5723/5e5a1c4adbc35999db283bd6c372430aba581b06159633c846c284a6ef1c91aa.png" height="200">
# Tai-e
[](https://github.com/pascal-lab/Tai-e/actions/workflows/test.yml)
[](https://openjdk.java.net/)
[](https://search.maven.org/artifact/net.pascal-lab/tai-e)
[](https://codecov.io/gh/pascal-lab/Tai-e)
[](https://doi.org/10.1145/3597926.3598120)
</div>
## ✨أخبار
- الإصدار v0.5.4:
- تأتي Tai-e مع واجهة أمامية جديدة، توفر تحويلاً أسرع وأكثر موثوقية من برامج Java إلى IR الخاص بـ Tai-e.
- يتم دعم تحليل تطبيقات Android من خلال مكون إضافي قائم على PacDroid مدمج مع تحليل المؤشرات.
- يتم دعم تحليل Spring DI و WEC من خلال المكون الإضافي لتحليل Spring.
- تم قبول ورقتنا _"Two Approaches to Fast Bytecode Frontend for Static Analysis"_ في <ins>OOPSLA'25</ins>. تعرض هذه الورقة الواجهة الأمامية الجديدة للبايت كود في Tai-e، والتي هي أسرع وأكثر موثوقية بشكل ملحوظ من الواجهات الأمامية الحالية.
- تم قبول ورقتنا _"Pointer Analysis for Database-Backed Applications"_ في <ins>PLDI'25</ins>. تصف هذه الورقة تحليل مؤشرات شامل لتطبيقات Java المدعومة بقواعد البيانات المطورة على أساس Tai-e.
- تم قبول ورقتنا _"PacDroid: A Pointer-Analysis-Centric Framework for Security Vulnerabilities in Android Apps"_ في <ins>ICSE'25</ins>. يوضح هذا العمل قدرة Tai-e الجديدة في تحليل Android، ويوفر نهجًا بسيطًا وفعالاً لتحليل أمان التطبيقات. حصل هذا العمل على **جائزة أفضل قطعة أثرية**🏅.
- تم قبول ورقتنا _"Bridge the Islands: Pointer Analysis for Microservice Systems"_ في <ins>ISSTA'25</ins>. تصف هذه الورقة أول تحليل مؤشرات لأنظمة Microservice في Java تم تطويره على أساس Tai-e.
- تم قبول ورقتنا _"Interactive Cross-Language Pointer Analysis for Resolving Native Code in Java Programs"_ في <ins>ICSE'25</ins>. هذا أول تحليل مؤشرات عبر اللغات بين Java و C. فاز هذا العمل **بجائزة الورقة المتميزة**🏅.
- تم قبول ورقتنا _"Context Sensitivity without Context: A Cut-Shortcut Approach to Fast and Precise Pointer Analysis"_ في <ins>PLDI'23</ins>. هذا هو أول عمل بحثي منشور تم تطويره على أساس Tai-e.
- تم قبول ورقتنا _"Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics"_ في <ins>ISSTA'23</ins>. تصف هذه الورقة التصميمات للمكونات الرئيسية لـ Tai-e.
## جدول المحتويات
- [ما هو Tai-e؟](#what-is-tai-e)
- [كيفية الحصول على Tai-e القابل للتشغيل؟](#how-to-obtain-runnable-tai-e)
- [كيفية تضمين Tai-e في مشروعك؟](#how-to-include-tai-e-in-your-project)
- [الإصدار المستقر](#stable-version)
- [أحدث إصدار](#latest-version)
- [التوثيق](#documentation)
- [التوثيق المرجعي](#reference-documentation)
- [سجل التغييرات](#changelog)
- [مهام Tai-e](#tai-e-assignments)
## ما هو Tai-e؟
Tai-e (النطق: [ˈtaɪə:]) هو إطار عمل جديد لتحليل البرامج الثابتة للغة Java (يرجى الاطلاع على [ورقة ISSTA 2023](https://cs.nju.edu.cn/tiantan/papers/issta2023.pdf) للحصول على التفاصيل)، والذي يتميز بتصميمات "أفضل" مما لا شك فيه من كل من التصميمات الجديدة التي اقترحناها وتلك الموجودة في الأطر الكلاسيكية مثل Soot و WALA و Doop و SpotBugs. Tai-e سهل التعلم، سهل الاستخدام، فعال، وقابل للتوسع بشكل كبير، مما يسمح لك بتطوير تحليلات جديدة بسهولة فوقه.
حاليًا، يوفر Tai-e مكونات التحليل الرئيسية التالية (والمزيد من التحليلات قيد
التطوير):
- إطار عمل قوي لتحليل المؤشرات
- إنشاء مخطط الاستدعاء أثناء التنفيذ
- تقنيات مختلفة كلاسيكية ومتقدمة لتجريد الكومة وحساسية السياق لتحليل المؤشرات
- نظام المكونات الإضافية للتحليل القابل للتوسع (يسمح بتطوير وإضافة تحليلات جديدة تتفاعل مع تحليل المؤشرات بسهولة)
- تحليل أمان قابل للتكوين
- تحليل التلوث، الذي يسمح بتكوين المصادر، المصارف، نقل التلوث، والمعقمات
- كشف العديد من تسريبات المعلومات وثغرات الحقن
- مفاضلات مختلفة بين الدقة والكفاءة (الاستفادة من إطار تحليل المؤشرات)
- تحليلات أساسية / خدمية متنوعة
- تحليلات أساسية، مثل تحليل الانعكاس وتحليل الاستثناءات
- تحليلات ميزات اللغة الحديثة، مثل تحليل lambda و method reference، وتحليل invokedynamic
- أدوات خدمية مثل مؤقت التحليل، مدقق القيود (لتصحيح الأخطاء)، ومفرغات المخططات المختلفة
- إطار تحليل تدفق التحكم / البيانات
- إنشاء مخطط تدفق التحكم
- تحليلات تدفق البيانات الكلاسيكية، مثل تحليل المتغيرات الحية، نشر الثوابت
- تحليلات تدفق البيانات الخاصة بك
- نظام كشف الأخطاء المشابه لـ SpotBugs
- كاشفات الأخطاء، مثل كاشف المؤشر الفارغ، كاشف `clone()` غير الصحيح
- كاشفات الأخطاء الخاصة بك
تم تطوير Tai-e بلغة Java، ويمكن تشغيله على أنظمة التشغيل الرئيسية بما في ذلك Windows و Linux و macOS.
كبادرة احترام للمطورين، نتوقع منك **يرجى [الاستشهاد](https://github.com/pascal-lab/tai-e/blob/master/CITATION.bib) بالورقة** من ISSTA 2023 التي تصف إطار Tai-e في عملك البحثي:
Tian Tan and Yue Li. 2023.
**Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics.**
In Proceedings of the 32nd ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA '23), July 17–21, 2023, Seattle, WA, USA ([pdf](https://cs.nju.edu.cn/tiantan/papers/issta2023.pdf), [bibtex](https://github.com/pascal-lab/tai-e/blob/master/CITATION.bib)).
## كيفية الحصول على Tai-e القابل للتشغيل؟
الطريقة الموصى بها هي تنزيل توزيعة ZIP من [GitHub Releases](https://github.com/pascal-lab/Tai-e/releases).
تحتوي التوزيعة على Tai-e، جميع التبعيات وقت التشغيل، التوثيق دون اتصال، ونصوص بدء التشغيل لنظامي Windows و Linux و macOS.
بدلاً من ذلك، يمكنك بناء أحدث إصدار من Tai-e بنفسك من الكود المصدري. يمكن القيام بذلك ببساطة عبر Gradle (تأكد من أن Java 17 (أو إصدار أعلى) متوفرة على نظامك):
```bash
./gradlew distZip
```
سيتم إنشاء توزيعة ZIP في `tai-e/build/distributions/`.
بعد استخراجها، قم بتشغيل Tai-e عبر نص بدء التشغيل:
```bash
# على Linux/macOS
./tai-e-<version>/bin/tai-e -h
# على Windows
.\tai-e-<version>\bin\tai-e.bat -h
```
من أجل التوافق مع الإصدارات القديمة والبرامج النصية، لا يزال Tai-e يوفر JAR شاملة قديمة:
```bash
./gradlew fatJar
java -jar build/tai-e-all-<version>.jar -h
```
## كيفية تضمين Tai-e في مشروعك؟
تم تصميم Tai-e كأداة مستقلة، ولكن لديك أيضًا خيار تضمينه في مشروعك كاعتمادية.
وهو متوفر في مستودعات Maven، مما يسمح لك بدمجه بسهولة في مشاريع Java الخاصة بك باستخدام أدوات البناء مثل Gradle و Maven.
نحافظ على كل من الإصدارات المستقرة والأحدث من Tai-e، وفيما يلي الإحداثيات المقابلة بتنسيقات نصوص Gradle و Maven:
### الإصدار المستقر
لـ Gradle:
```kotlin
dependencies {
implementation("net.pascal-lab:tai-e:0.5.4")
}
```
لـ Maven:
```xml
<dependencies>
<dependency>
<groupId>net.pascal-lab</groupId>
<artifactId>tai-e</artifactId>
<version>0.5.4</version>
</dependency>
</dependencies>
```
### أحدث إصدار
لـ Gradle:
```kotlin
repositories {
mavenCentral()
maven { url = uri("https://central.sonatype.com/repository/maven-snapshots/") }
}
dependencies {
implementation("net.pascal-lab:tai-e:0.5.5-SNAPSHOT")
}
```
لـ Maven:
```xml
<repositories>
<repository>
<id>snapshots</id>
<name>Sonatype snapshot server</name>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>net.pascal-lab</groupId>
<artifactId>tai-e</artifactId>
<version>0.5.5-SNAPSHOT</version>
</dependency>
</dependencies>
```
يمكنك استخدام هذه الإحداثيات في نصوص Gradle أو Maven الخاصة بك لتضمين الإصدار المطلوب من Tai-e في مشروعك.
## التوثيق
### التوثيق المرجعي
لقد قدمنا معلومات مفصلة عن Tai-e في [التوثيق المرجعي](https://tai-e.pascal-lab.net/docs/current/reference/en/index.html)، والذي يغطي جوانب مختلفة مثل [الإعداد في IntelliJ IDEA](https://tai-e.pascal-lab.net/docs/current/reference/en/setup-in-intellij-idea.html)، [خيارات سطر الأوامر](https://tai-e.pascal-lab.net/docs/current/reference/en/command-line-options.html)، و [تطوير تحليل جديد](https://tai-e.pascal-lab.net/docs/current/reference/en/develop-new-analysis.html).
يرجى ملاحظة أن التوثيق المرجعي المذكور أعلاه يتعلق بـ *أحدث إصدار* من Tai-e.
إذا كنت بحاجة إلى توثيق لإصدار مستقر معين، يرجى الرجوع إلى [فهرس التوثيق](https://tai-e.pascal-lab.net/docs).
بالإضافة إلى ذلك، يتم تضمين التوثيق داخل المستودع ويتم صيانته جنبًا إلى جنب مع الكود المصدري.
يمكنك الوصول إلى التوثيق المرجعي لإصدار معين من Tai-e (بتنسيق AsciiDoc) من خلال استكشاف دليل [docs/en](https://github.com/pascal-lab/tai-e/blob/master/docs/en)، بدءًا من [index.adoc](https://github.com/pascal-lab/tai-e/blob/master/docs/en/index.adoc).
يسمح لك هذا بالوصول إلى التوثيق الخاص بالإصدار لـ Tai-e.
بالإضافة إلى التوثيق
المرجعي، [Javadocs](https://tai-e.pascal-lab.net/docs/current/api/index.html) لـ Tai-e هي
أيضًا متاحة كمورد مرجعي مفيد.
### سجل التغييرات
نظرًا لأننا نطور ونحدث Tai-e بنشاط، فإننا نسجل التغييرات البارزة التي أجريناها، خاصة الميزات الجديدة والتغييرات الجذرية، في [CHANGELOG](https://github.com/pascal-lab/tai-e/blob/master/CHANGELOG.md).
إذا وجدت شيئًا خاطئًا بعد تحديث Tai-e، ربما يمكنك التحقق من [CHANGELOG](https://github.com/pascal-lab/tai-e/blob/master/CHANGELOG.md) للحصول على معلومات مفيدة.
## مهام Tai-e
بالإضافة إلى ذلك، قمنا بتطوير [إصدار تعليمي من Tai-e](https://tai-e.pascal-lab.net/en/intro/overview.html) حيث تم تصميم ثماني مهام برمجة بعناية لتدريب المتعلمين بشكل منهجي على تنفيذ تقنيات تحليل ثابتة مختلفة لتحليل برامج Java حقيقية.
يشارك الإصدار التعليمي قدرًا كبيرًا من الكود مع Tai-e، وبالتالي فإن أداء المهام سيكون طريقة جيدة للتعرف على Tai-e.