بهترین سایت تمرین تست نرمافزار، مشهورترین یا پرباگترین سایت نیست؛ Targetی است که برای Skill هدف شما مناسب، مجاز، قابل Reset و دارای Oracle باشد. یک Demo عمومی ممکن است برای چند تعامل UI ساخته شده باشد، نه هزار Request، اسکن امنیتی، نگهداری دائمی داده یا اجرای شبانهٔ CI. واژهٔ «Practice» نیز مجوز نامحدود ایجاد نمیکند.
این راهنما فهرست ۱۴۰۵/۲۰۲۶ را با یک Practice Target Contract ترکیب میکند. قبل از هر Run، Owner، Scope، Terms، روشهای مجاز، Rate/Concurrency، داده، حساب، Reset و Evidence را ثبت میکنید؛ بعد Goal را به Task، Oracle و Transfer تبدیل میکنید. هیچ سایت واقعیِ خارج از این قرارداد، زمین بازی QA نیست.
پاسخ کوتاه: هشت Target، هشت کاربرد متفاوت
- Sauce demo + examples: Login/Inventory و نمونههای UI Automation.
- The Internet: تعاملهای منفرد مانند Alert، Upload، Dynamic Loading و Shadow DOM.
- DemoQA: Elements، Forms، Frames، Widgets، Interactions و Book Store.
- ReqRes: API میزبانیشده با API key، Plan، Limit و دادهٔ پایدار.
- Restful-Booker: CRUD/Auth آزمایشی با Reset دهدقیقهای.
- Web Security Academy: Labهای امنیتی اختصاصیِ موضوعمحور.
- OWASP Juice Shop: برنامهٔ آسیبپذیر Self-host؛ نه هک دمو عمومی.
- OWASP WebGoat: درسهای امنیتی Localhost در محیط ایزوله.
Target choice = SkillFit + Permission + Isolation + Reset + Oracle + Evidence Famous != suitable Free != unlimited Deliberately vulnerable != permission for every deployment HTTP 200 != target health
مرز زمانی و مسئولیت
Snapshot این فهرست ۲۳ مرداد ۱۴۰۵، برابر با ۱۴ اوت ۲۰۲۶ است. دامنه، Plan، API key، Rate limit، Terms، نسخه، دسترسی از ایران و Availability تغییر میکنند. قبل از هر Run منبع رسمی را دوباره بخوانید. این مقاله مجوز حقوقی، امنیتی یا عملیاتی صادر نمیکند؛ مجوز باید از Owner همان Target و برای همان Scope معتبر باشد.
خطای اصلی متنهای فهرستی
عبارتهایی مانند «کاملاً امن و قانونی»، «بدون هیچ نگرانی»، «تماماً رایگان»، «بهترین برای همه» یا «واقعی» ادعاهای مطلقاند. سرویس ثالث میتواند shared، ناپایدار، quotaدار یا مشروط باشد. دادهٔ شما ممکن است ذخیره شود. Automation سبک با Load متفاوت است و UI practice با Security authorization یکی نیست.
مالکیت موضوع این مقاله
این صفحه مالک انتخاب و ادارهٔ Practice Target و تبدیل تمرین به Skill Transfer است. آموزش یک Framework، طراحی Test Case، تست API، تست اکتشافی، امنیت مجاز و ساخت پورتفولیو هرکدام Owner جدا دارند. بنابراین کپی چند Test Script یا جمعکردن Bug count معیار پایان نیست.
Practice Target Contract چیست؟
قرارداد تمرین یک Snapshot قابلممیزی است: Target دقیق، Purpose، Owner/Source، مجوز، Boundary شبکه/داده، Method، Rate/Concurrency، Reset، Account، Evidence و Expiry را کنار هم میگذارد. اگر فیلد حیاتی Unknown است، Run به `HOLD` میرود؛ حدس یا شهرت سایت جای پاسخ را نمیگیرد.
PRACTICE-TARGET-CONTRACT contract_id / version / as_of / expires_at: target_name / exact_origin / owner_source: purpose / skill_goal / learner_level: mode: HOSTED_SHARED | HOSTED_ISOLATED | SELF_HOSTED permission_ref / terms_ref / allowed_scope / prohibited_scope: methods / Rate/Concurrency / schedule / automation_allowed: account / secret / data / reset / retention / teardown: evidence_allowed / privacy / review_owner:
Gate مجوز پیش از بازکردن Tool
- Origin دقیق و Owner روشن است؟
- سایت یا پروژه صریحاً برای آن نوع تمرین ارائه شده است؟
- Hosted instance و source code مجوز یکسان دارند؟
- Automation، Mutation، Security و Performance جداگانه روشناند؟
- Rate، concurrency، account و data policy معلوماند؟
- اگر پاسخ منفی/نامعلوم است، آیا Self-host جایگزین داریم؟
PERMISSION-GATE target_id / activity_id: authorization_source / captured_at: allowed_methods / endpoints / identities: rate_concurrency / start_end: data_and_side_effect_boundary: status: PASS | FAIL | UNKNOWN-HOLD recheck_trigger:
Hosted Shared، Hosted Isolated و Self-hosted
| Mode | مزیت | ریسک | کار مناسب |
|---|---|---|---|
| Hosted Shared | شروع سریع | تداخل، Rate، Drift، عدم کنترل Reset | Run سبک و محدود |
| Hosted Isolated | Session/instance جدا | Expiry، telemetry، Terms | Lab موضوعی |
| Self-hosted | کنترل Version/Data/Fault | Setup، exposure، cleanup | Security/Load/CI کنترلشده |
Self-hosted بهخودیخود امن نیست. برنامهٔ عمداً آسیبپذیر اگر روی Interface عمومی، شبکهٔ سازمان یا Cloud بدون کنترل بالا بیاید، به Target دیگران تبدیل میشود. Loopback، Network isolation، Synthetic data، Snapshot و Teardown باید قبل از اجرا آماده باشند.
ماتریس انتخاب سریع Target
| Target | Skill اصلی | State/Reset | مرز مهم |
|---|---|---|---|
| Sauce examples | UI flow/automation | Shared/demo-dependent | نمونه آموزشی، نه Production |
| The Internet | Web element/wait | صفحات منفرد | Load/Security نامفروض |
| DemoQA | Form/widget/interaction | Hosted shared | Drift/ads/availability |
| ReqRes | API/Auth/CRUD | Project/persistent | API key/plan/quota/license |
| Restful-Booker | API workflow | Reset حدود ۱۰ دقیقه | Collision/shared state |
| Academy | Security lab | Dedicated/ephemeral | فقط lab assigned |
| Juice Shop | Vulnerable app | Self-host reset | دموی عمومی ممنوع برای hacking |
| WebGoat | Security lessons | Self-host/local | عمداً ناامن؛ network isolate |
SauceDemo و نمونههای رسمی
مخزن JavaScript Demonstration Scripts رسمی Sauce Labs نمونههای Selenium/WebdriverIO/Playwright/Cypress را گرد میآورد و صریحاً میگوید کدها AS-IS، برای آموزش/نمایش و نه Production هستند. برای تمرین Login، Inventory و ساخت Harness سبک مناسب است؛ اما «نمونه رسمی» به معنی معماری نهایی یا مجوز Load/DAST نیست.
- Goal را مثلاً «تشخیص خطای Login با Oracle رفتاری» تعریف کنید.
- Locator را با دلیل Stability انتخاب کنید، نه صرفاً کوتاهترین selector.
- Wait را بر Signal قابلمشاهده بنا کنید، نه sleep ثابت.
- یک Failure مصنوعی و مسیر Diagnosis اضافه کنید.
- Credentialهای عمومی Demo را Secret واقعی جا نزنید و Secret شخصی Commit نکنید.
The Internet برای تعاملهای منفرد وب
The Internet فهرستی از مثالها مانند Dynamic Controls/Loading، Alerts، Upload، Multiple Windows، Shadow DOM، Status Codes و Tables دارد. ارزش آن Isolation مسئله است: هر تمرین یک Mechanism را برجسته میکند. محدودیتش همین است؛ یک صفحهٔ منفرد E2E یا معماری واقعی محصول را اثبات نمیکند.
ELEMENT-PRACTICE mechanism: dynamic_loading claim: wait reacts to observable readiness setup / action / oracle: negative_case / timeout_budget: artifact: trace + assertion + diagnosis note variation: slow/fast/reordered transfer_target: owned local fixture
DemoQA برای Form، Widget و Interaction
DemoQA در Snapshot امروز Elements، Forms، Alerts/Frames/Windows، Widgets، Interactions و Book Store را نشان میدهد. برای Test Design، Keyboard interaction، upload و dynamic property مفید است؛ ولی تبلیغ، Drift DOM، دسترسی منطقهای یا State مشترک میتواند نتیجه را تغییر دهد. نسخه/Browser/Viewport و Evidence را ثبت کنید.
ReqRes؛ اصلاح یک ادعای منقضی
مستندات جاری ReqRes صریح است: همهٔ درخواستهای ReqRes اکنون به `x-api-key` نیاز دارند؛ برای Session کاربر Bearer جداست و Plan/Quota/License و Environment header مطرحاند. بنابراین ادعای قدیمی «بدون ثبتنام یا API key» غلط است. Key را Secret نگه دارید، Plan/استفادهٔ تجاری را بررسی و CI را به سرویس ثالث بیقید وابسته نکنید.
HOSTED-API-IDENTITY provider / docs_as_of: project / environment: auth_mode: API_KEY | SESSION_TOKEN key_source / scope / rotation / revoke: plan / quota / commercial_use_status: data_persistence / reset / deletion: CI_dependency / fallback:
Restful-Booker؛ State مشترک و Reset
Restful-Booker خودش را API playground با CRUD، Authentication، چند باگ و ده رکورد اولیه معرفی میکند و میگوید تقریباً هر ده دقیقه Reset میشود. برای workflow API خوب است؛ اما Run موازی یا Reset میتواند دادهٔ شما را عوض کند. ID را Discover کنید، Oracle را State-aware بسازید و نتیجهٔ shared service را پایدار فرض نکنید.
SHARED-STATE-RUN run_id / target_snapshot: record_discovery / ownership_marker: precondition_digest: mutation_scope / cleanup_attempt: reset_window / collision_signal: result: PASS | FAIL | INCONCLUSIVE evidence / expiry:
Web Security Academy؛ فقط Lab اختصاصی
فهرست Labهای Web Security Academy موضوعهایی از SQL injection و XSS تا API testing و Race condition دارد. Target مجاز همان Instance و Scope ساختهشده برای Lab است؛ تکنیک را به Domain دیگر تعمیم عملی ندهید. Account، Session، Expiry و Rules همان Lab را ثبت کنید و دادهٔ شخصی در Input نگذارید.
OWASP Juice Shop؛ Self-host را ترجیح دهید
مخزن رسمی OWASP Juice Shop برنامه را عمداً آسیبپذیر معرفی و روشهای Self-host را مستند میکند؛ اما همان README هشدار میدهد دموی عمومی Juice Shop برای تمرین هک شما نیست و uptime تضمین ندارد. نسخهٔ محلی/ایزوله را با Source/Release pin، Loopback، Synthetic data، no-ingress و Snapshot اداره کنید.
VULNERABLE-LAB-BOUNDARY project / release_or_digest: host_owner: LEARNER bind_scope: LOOPBACK_ONLY network: ISOLATED / egress_policy: data: SYNTHETIC_ONLY external_integrations: DISABLED snapshot / restore / teardown: authorization: SELF_OWNED_INSTANCE_ONLY
OWASP WebGoat؛ ناامنی عمدی را جدی بگیرید
README رسمی OWASP WebGoat آن را برنامهٔ عمداً ناامن آموزشی مینامد، Default را روی localhost میبندد و هشدار میدهد هنگام استفاده اتصال اینترنت را محدود کنید. این هشدار بخشی از Lab است، نه حاشیه. انتشار Port عمومی، استفاده از Credential واقعی یا اتصال به شبکهٔ کاری، تمرین نیست.
چه چیزهایی عمداً در فهرست «بهترین» نیست؟
- هر سایت فروشگاهی/بانکی/دولتی واقعی، حتی اگر Bug به نظر برسد؛
- Bug bounty خارج از Scope/Policy و زمان مجاز؛
- Demo ناشناس بدون Owner/Terms/Reset؛
- API عمومی Production با حساب یا دادهٔ واقعی؛
- Clone آسیبپذیر ناشناس که ممکن است بدافزار یا egress پنهان داشته باشد؛
- سرویس رایگان بهعنوان Dependency دائمی CI بدون Plan/Quota/Exit.
از Skill Goal شروع کنید، نه از Tool
«تمرین Playwright» Goal نیست. بنویسید چه Task و Decisionی باید بهتر شود: Wait قابلاعتماد، Contract Oracle، State isolation، Failure diagnosis، Exploratory note یا Risk communication. Tool فقط وسیله است و میتواند در Transfer عوض شود.
SKILL-GOAL goal_id / capability: work_task / decision_supported: baseline_behavior / gap_evidence: target_behavior / rubric: practice_target_fit: transfer_context / due / reviewer:
چرخهٔ انتقال مهارت
چرخهٔ کامل این است: `Goal → Task → Oracle → Run → Evidence → Feedback → Variation → Transfer`. اگر فقط Script سبز شود، ممکن است Syntax یاد گرفته باشید؛ نه طراحی تست یا تشخیص خرابی. Variation باید یکی از فرضها را تغییر دهد و Transfer روی Fixture دیگری که خودتان مجاز دارید اجرا شود.
- Goal رفتاری و Baseline را ثبت کنید.
- Task و Oracle را پیش از اجرا بنویسید.
- یک Run کنترل و یک Fault اجرا کنید.
- Evidence کمینه و قابل بازتولید جمع کنید.
- از Reviewer یا Self-review با Rubric بازخورد بگیرید.
- Data/Timing/Order/Browser را Variation دهید.
- همان Claim را روی Fixture دوم منتقل کنید.
- نتیجه را Keep/Adapt/Stop/Retire کنید.
Charter تمرین دستی و اکتشافی
«سایت را بگرد و باگ پیدا کن» قابل ارزیابی نیست. Mission، Scope، Risk، Data، Timebox، Oracle و Note schema تعیین کنید. Bug count را امتیاز مهارت نکنید؛ یک مدل یادگیری ممکن است Feature کم یا Bug عمدی داشته باشد. Observation، Inference و Question را جدا نگه دارید.
PRACTICE-CHARTER charter_id / mission: target_contract_ref / scope / out_of_scope: risks / test_ideas / oracle_sources: data / personas: FICTIONAL timebox / stop_conditions: notes: OBSERVATION | INFERENCE | QUESTION debrief / follow_up:
Automation؛ سبزشدن پایان نیست
- Setup و Cleanup مستقل؛
- Locator دارای قرارداد و Failure message؛
- Wait بر State، نه Delay ثابت؛
- Oracle فراتر از HTTP/UI presence؛
- Trace/Screenshot فقط وقتی لازم و پاکسازیشده؛
- Retry برای تشخیص، نه پنهانکردن Flake؛
- Version/Browser/Data/Target snapshot؛
- Maintenance و Retirement criteria.
Page Object Model یا Allure میتوانند مفید باشند، اما اجباری/جهانی نیستند. Pattern را از درد واقعی انتخاب کنید. Report زیبا Oracle ناقص را اصلاح نمیکند و Abstraction زودهنگام میتواند رفتار را پنهان کند.
API؛ Status Code را Verdict کامل نکنید
در ReqRes یا Restful-Booker، Method/Path/Header/Auth/Schema را با Business/State/Side-effect جدا کنید. `۲۰۰` فقط لایهای از نتیجه است. Missing/null/empty، enum، time، Unicode، duplicate، retry، timeout و order را در Scope مجاز تمرین کنید. روی Hosted shared تست مخرب، flood یا دادهٔ حساس نفرستید.
API-ORACLE case_id / contract_snapshot: request_shape_digest / synthetic_data_id: transport / protocol / schema: business / state / side_effect: authz_boundary / timing: verdict: PASS | FAIL | INCONCLUSIVE evidence / cleanup:
Security؛ فقط Instance مجاز و کنترلشده
وجود واژهٔ OWASP مجوز حمله به هر deployment نیست. برای Juice Shop/WebGoat از Instance تحت مالکیت خود و ایزوله استفاده کنید؛ برای Academy فقط Lab اختصاصی. Payload واقعی، Credential theft، persistence، pivot، third-party callback، resource exhaustion و دادهٔ بیرونی در این تمرین جای ندارند. روشهای آموزشی را به Target دیگر کپی نکنید.
Performance؛ سرویس عمومی Target بار نیست
هزار Request به یک Demo عمومی «تمرین JMeter» نیست؛ مصرف منبع شخص ثالث است. برای Load، برنامهٔ Self-host، ظرفیت سیستم خود، Workload Contract، سقف ایمنی، Monitoring، Stop condition و Recovery لازم است. حتی localhost اگر روی لپتاپ مشترک یا شبکهٔ سازمان است باید Boundary داشته باشد.
LOCAL-WORKLOAD-SAFETY owned_target / isolated_host: model / arrival_rate / concurrency / duration: resource_ceiling / abort_signal: monitoring / baseline / warmup: data_reset / recovery_check: external_traffic=false owner_present=true
دادهٔ تمرین؛ Synthetic و قابل حذف
- نام، موبایل، ایمیل، آدرس، تصویر و شناسهٔ واقعی وارد نکنید.
- از PAN/CVV2/OTP، حساب بانکی، Token و Cookie واقعی استفاده نکنید.
- Dataset را با ID، Seed، Owner و delete_at ثبت کنید.
- Screenshot/Trace/Video ممکن است Secret یا PII بگیرد؛ قبل از انتشار بازبینی کنید.
- در سرویس shared، نوشتهٔ شما ممکن است توسط دیگری دیده یا تغییر کند.
دسترسی از ایران و تغییر سرویس
در دسترس بودن در تاریخ ممیزی، وعدهٔ آینده نیست. ۴۰۳، WAF، Rate، تحریم، Billing، License، account eligibility یا DNS میتواند تغییر کند. راهحل امن: Cause classification، منبع رسمی، Self-host/Fixture جایگزین و Exit plan. هویت، نشانی یا موقعیت جعلی، حساب واسطه، پنهانسازی محل، دورزدن TLS یا Credential مشترک توصیه نمیشود.
ACCESS-CONTINUITY target / checked_at / region_context: result: AVAILABLE | DEGRADED | BLOCKED | UNKNOWN evidence: status / official_notice / terms: cause_hypotheses / confidence: approved_fallback: SELF_HOST | LOCAL_FIXTURE | OTHER data_export / secret_revoke / switch_trigger:
RTL، Unicode و دادهٔ ایرانی
Demo خارجی معمولاً نیاز ایران را پوشش نمیدهد. روی Fixture خود، IRR canonical و تومان فقط نمایشی ۱:۱۰، Persian/Arabic/Latin digits، ی/ی، ک/ک، ZWNJ، RTL/LTR/Bidi، UTC instant و Asia/Tehran view را اضافه کنید. جلالی Presentation است، نه جایگزین instant. داده کاملاً ساختگی باشد.
Evidence Pack کمینه
PRACTICE-EVIDENCE run_id / goal_id / target_contract_version: tool_runtime_lock / browser_or_client: fixture_seed / case_id / oracle_version: start_end_utc / environment: result / failure_class / diagnosis: sanitized_artifacts[] / hashes[]: feedback / variation / transfer_result:
Evidence باید Claim را پشتیبانی کند، نه فقط «من اجرا کردم». Screenshot زیاد، Log خام یا Video طولانی بدون Purpose ارزش را کم و ریسک نشت را زیاد میکند. Artifactهای حساس را عمومی نکنید و Retention/Deletion را ثبت کنید.
پورتفولیو؛ Permission و Attribution
- کد و Artifact خودتان را از Target/source جدا کنید.
- License، Attribution و محدودیت بازنشر را رعایت کنید.
- Credential، Token، Cookie، PII و دادهٔ shared را حذف کنید.
- Claim را محدود بنویسید: چه Skill، چه Target snapshot و چه Gap.
- Pass count، Bug count و Scoreboard را معادل Seniority ندانید.
- Reproduction امن و Cleanup را مستند کنید.
Rubric مهارت؛ چه چیزی را امتیاز دهیم؟
| بعد | شاهد | ضدسنجه |
|---|---|---|
| Framing | Goal/Scope/Risk روشن | تعداد سایت |
| Design | Case/Charter و Oracle | تعداد Test Case |
| Execution | Reproducible Run | صرفاً سبز بودن |
| Diagnosis | Failure classification | Screenshot زیاد |
| Maintenance | Drift/flake/change response | Framework پیچیده |
| Safety | Permission/data/rate/cleanup | «فقط Demo بود» |
| Transfer | Variation و Fixture دوم | حفظکردن tutorial |
Feedback؛ Reviewer چه ببیند؟
- آیا Claim و Oracle قبل از Run نوشته شدهاند؟
- آیا Target Contract واقعاً آن فعالیت را اجازه میدهد؟
- آیا Failure میان Product/Target/Harness/Data/Environment جدا شده؟
- آیا Test مستقل و قابل تکرار است؟
- آیا Evidence کمینه و پاکسازی شده؟
- آیا Variation و Transfer Skill را نشان میدهند؟
برنامهٔ ۳۰روزهٔ Contextual
- روز ۱ تا ۳: Capability، Baseline، Permission و Target Contract.
- روز ۴ تا ۸: Charter دستی روی Target UI سبک.
- روز ۹ تا ۱۴: سه Automation case با Fault/Diagnosis.
- روز ۱۵ تا ۱۹: API Oracle و shared-state collision.
- روز ۲۰ تا ۲۳: یک Lab امنیتی isolated و بدون exploit بیرونی.
- روز ۲۴ تا ۲۷: Variationهای Unicode/time/order و Fixture دوم.
- روز ۲۸ تا ۳۰: Reviewer، Evidence Pack، Transfer و Keep/Adapt/Stop.
آزمایشگاه آفلاین ایرانی SYN-QA-PRACTICE-IR-۰۱
Lab نهایی یک Checkout کاملاً ساختگی روی loopback دارد: Catalog، Cart، Order، PaymentAttempt، PSP Stub، Callback، Ledger و Notification fake. Timeout قبل/بعد Fake Commit، retry، duplicate، late/reordered event و Unknown state دارد. هیچ شبکهٔ بیرونی، شرکت/شخص/کاربر واقعی، پول، بانک، PSP، account، credential یا Production وارد نمیشود.
LAB SYN-QA-PRACTICE-IR-01 network=LOOPBACK_ONLY; external_calls=false data=SYNTHETIC; real_person=false; real_payment=false currency=IRR; toman_display_only=1:10 digits=123|۱۲۳|١٢٣; unicode=ی/ي|ک/ك|ZWNJ|RTL/LTR/Bidi time=UTC_INSTANT + ASIA_TEHRAN_VIEW; jalali=presentation_only faults=timeout_before_commit|timeout_after_commit|duplicate|late|reordered cleanup=SNAPSHOT_RESTORE; release_decision=false
Validator و مرز ادعا
Checker سطحی با دیدن شهرت، رایگانبودن، UI/API و Bug عمدی میگوید `FAMOUS_FREE_SAFE_REALISTIC_NO_PERMISSION_ALL_AUTOMATION_PORTFOLIO_READY`. ممیزی دادهٔ ناقص ۱۴۴ کنترل Target/Permission/Rate/Data/Reset/Oracle/Evidence/Feedback/Transfer را پیدا نمیکند و `HOLD-ONE-FOUR-FOUR` میدهد.
Safety rule مستقل `NO_REAL_PUBLIC_TARGET_USER_ACCOUNT_CREDENTIAL_SECRET_PERSON_PAYMENT_NETWORK_LOAD_SECURITY_ATTACK_PRODUCTION_OR_EXTERNAL_MUTATION_PASS` میدهد. پس از تکمیل Fixture، خروجی فقط `READY_FOR_PRACTICE_TARGET_SKILL_TRANSFER_REVIEW-ZERO` است؛ نه اثبات قانونیبودن هر Run، امنیت Lab، تسلط حرفهای، کشف همهٔ Bugها، آمادگی شغلی، کیفیت پورتفولیو یا انتقال قطعی به Production.
Anti-patternهای رایج
- «Demo است، پس هر کاری مجاز است»؛
- اسکن/Load روی Hosted shared؛
- هک دموی عمومی Juice Shop؛
- انتقال technique Academy به Domain واقعی؛
- Key/Token در Git یا Screenshot؛
- ReqRes بدون API key یا Plan check؛
- اعتماد به Reset مشترک بهعنوان isolation؛
- sleep ثابت، retry کور و assertion سطحی؛
- HTTP ۲۰۰ بهعنوان business success؛
- POM/Report بهعنوان هدف؛
- Bug count/Scoreboard بهعنوان مهارت؛
- PII یا پرداخت واقعی در Fixture؛
- برنامهٔ آسیبپذیر روی Public interface؛
- پورتفولیو بدون License/Attribution/Redaction؛
- تضمین «رایگان، امن، واقعی و همیشه در دسترس».
چکلیست Owner پیش از Run
- Goal/Task/Decision روشن است.
- Origin و Owner دقیق ثبت شدهاند.
- Source/Terms امروز بررسی شدهاند.
- Hosted instance با source license یکی فرض نشده است.
- Activity در Scope مجاز است.
- Rate/Concurrency/Schedule روشن است.
- Automation/Security/Load جدا Gate شدهاند.
- Account/Key کماختیار و قابل Revocation است.
- هیچ PII/Secret/پرداخت واقعی نیست.
- State/Reset/Collision شناخته شده است.
- Oracle قبل از Run نوشته شده است.
- Fault و Inconclusive مسیر دارند.
- Evidence کمینه و Sanitized است.
- Self-host روی Loopback/isolated است.
- Snapshot/Restore/Teardown آماده است.
- دسترسی ایران و Fallback بررسی شده است.
- Feedback با Rubric انجام میشود.
- Variation یک فرض را تغییر میدهد.
- Transfer روی Fixture دوم سنجیده میشود.
- Retention/Deletion/Portfolio permission روشن است.
مسیر مطالعهٔ داخلی
برای مرز مجوز از مجوز فعالیت تست و EULA، برای خروجی عمومی از پورتفولیوی QA و Permission، برای انتخاب Gap از ماتریس مهارتهای تستر و برای Harness قابلتحویل از نقشهٔ مهندس اتوماسیون استفاده کنید.
برای API، ماتریس Contract تست SOAP/REST؛ برای امنیت مجاز، OWASP Top ۱۰ و Charter مجاز؛ برای Session، تخصیص تست اکتشافی و Scripted؛ و برای Artifact، سناریوی تست در برابر Test Case مکمل این راهنما هستند.
سؤالات متداول سایتهای تمرین تست نرمافزار
آیا همهٔ سایتهای معرفیشده رایگاناند؟
نه بهصورت مطلق. بعضی Hosted targetها استفادهٔ رایگان محدود، Account/API key، quota، Plan یا مجوز تجاری دارند و میتوانند تغییر کنند. پروژهٔ متنباز نیز هزینهٔ اجرا/نگهداری و License دارد. صفحهٔ رسمی را در تاریخ Run بررسی کنید.
بهترین سایت برای شروع Automation کدام است؟
به Skill Goal بستگی دارد. The Internet برای یک Mechanism، SauceDemo برای flow کوچک و DemoQA برای تنوع Element مفیدند. ابتدا یک Target و سه Case با Oracle/Failure diagnosis انتخاب کنید؛ سپس روی Fixture دوم Transfer بگیرید.
آیا میتوان روی این سایتها تست Load اجرا کرد؟
بدون مجوز صریح خیر. Hosted demo/shared را Target بار ندانید. یک برنامهٔ Self-host تحت مالکیت خود، Workload Contract، سقف منابع، Monitoring و abort/recovery بسازید. رایگان یا Demo بودن اجازهٔ مصرف انبوه منبع نیست.
آیا Juice Shop عمومی برای تمرین امنیت مناسب است؟
README رسمی میگوید Demo عمومی برای hacking شما نیست. نسخهٔ Self-host ایزوله یا Lab رسمی اختصاصی را انتخاب کنید. هر deployment Scope و Owner جدا دارد؛ عمداً آسیبپذیر بودن source به همهٔ Instanceها مجوز نمیدهد.
چطور تمرین را به پورتفولیو تبدیل کنیم؟
Claim محدود، Contract/نسخهٔ Target، Goal، Oracle، Fault، Diagnosis، Variation و Transfer را نشان دهید. License/Attribution را رعایت، Secret/PII/دادهٔ shared را حذف و فقط Artifact مجاز خودتان را منتشر کنید. تعداد Script یا Bug بهتنهایی مهارت را ثابت نمیکند.
جمعبندی: زمین بازی خوب، مرز دارد
سایت تمرین مفید جایی نیست که بتوانید «هر کاری» روی آن انجام دهید؛ جایی است که Goal، Permission، Scope، Rate، Data، Reset و Oracle آن روشن باشد. Target hosted را سبک و مسئولانه بهکار ببرید، امنیت/بار را روی Lab ایزولهٔ خود انجام دهید، دسترسی و Terms را تاریخدار نگه دارید و هر تمرین را با Feedback، Variation و Transfer به مهارتی قابلاثبات تبدیل کنید.

