Skip to content

Latest commit

Β 

History

182 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CISSP Analyzer

Professional CISSP Exam Analysis Tool

Analyzes exam results and generates beautiful 7-sheet Excel reports showing exactly where students are weak.

Status: βœ… Production Ready (Core Features) | Tests: 418/419 Passing | Version: 2.0.0 | Python: 3.9-3.12 | Platforms: macOS, Windows, Linux

⚠️ Note: Ready for standalone & batch analysis. Add Phase 3F (Database) + Phase 3D (Security) for multi-user production deployment (~14 hours).


What Does It Do?

You provide:

  • πŸ“„ Exam PDF (questions and answers)
  • πŸ“Š Student answer Excel file
  • πŸ‘€ Student name(s)

You get:

  • πŸ“ˆ Professional 7-sheet Excel reports
  • πŸ“ Shows weak domains, topics, question types
  • πŸ“… Personalized study plan for each student
  • 🎯 Color-coded results (easy to understand)

Example Output:

Input:
  - June_21st_Test.pdf
  - student_answers.xlsx (John Doe's answers)

Output:
  - CISSP_Individual_Report_John_Doe.xlsx (7 professional sheets)
  - Shows John got 68.8%, weak in Kerberos, strong in Access Control, etc.

βœ… Recently Validated (July 2026)

Phase 2 Integration Testing:

  • βœ… Real exam PDF parsing (25 questions, 100% confidence)
  • βœ… Real student Excel files (5 students, 116 answers, 84-96% coverage)
  • βœ… Complete pipeline validated end-to-end
  • πŸ“„ See: PHASE2_VALIDATION_REPORT.md

Full System Integration Testing (with Ollama AI):

  • βœ… All 7 modules work seamlessly together
  • βœ… Data integrity verified (deterministic, zero loss)
  • βœ… Scales to 1000+ students (99% memory savings)
  • βœ… File safety verified (atomic writes, locking)
  • βœ… AI-powered insights generated (qwen2.5-coder:1.5b)
  • βœ… 418/419 tests passing
  • πŸ“„ See: FULL_INTEGRATION_TEST_REPORT.md

Quick Start (10 Minutes)

Step 1: Install (2 minutes)

On Mac:

git clone https://github.com/sriramshiv26-prog/cissp-analyzer.git
cd cissp-analyzer
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pytest -v  # Should show 279 passed

On Windows (Command Prompt):

git clone https://github.com/sriramshiv26-prog/cissp-analyzer.git
cd cissp-analyzer
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
pytest -v

On Linux (Ubuntu/Debian):

git clone https://github.com/sriramshiv26-prog/cissp-analyzer.git
cd cissp-analyzer
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pytest -v

Step 2: Prepare Your Question Bank (Local Setup)

The system requires a local CISSP question bank on your machine. Place it here:

cissp-analyzer/
└── data/
    └── questions/
        └── CISSP_162_QUESTIONS_REFERENCE.json  ← Your question bank goes here

Why local? Each user has their own question bank version. The repo doesn't include itβ€”you provide your own.

Example question bank format:

{
  "metadata": {
    "total_questions": 162,
    "exam_name": "CISSP",
    "version": "2026"
  },
  "questions": [
    {
      "id": "Q001",
      "domain": "Security & Risk Management",
      "topic": "Information Security Governance",
      "difficulty": "Medium",
      "type": "Scenario",
      "trap_category": "All-of-the-Above",
      "text": "Question text here...",
      "options": {
        "A": "Option A",
        "B": "Option B",
        "C": "Option C",
        "D": "Option D"
      },
      "correct_answer": "C"
    }
    // ... more questions
  ]
}

Don't have a question bank yet? Use the included example:

cp examples/CISSP_162_QUESTIONS_REFERENCE.json data/questions/

Step 3: Verify Setup (1 minute)

python3 run.py --help

This shows available commands and verifies the system is ready.

Step 4: Choose Your Analysis Mode

FIRST TIME? Try with included example:

python3 run.py

ANALYZING STUDENT ANSWERS?

  1. Place student answer Excel file in your working directory
  2. Ensure question bank is in data/questions/CISSP_162_QUESTIONS_REFERENCE.json
  3. Run:
python3 run.py --analyze <student_file.xlsx>

BATCH ANALYSIS (Multiple Students)?

python3 run.py --batch <directory_with_answer_sheets>

Step 5: View Results

Open the generated Excel file in:

  • Microsoft Excel
  • Google Sheets
  • LibreOffice Calc

✨ What's New in v1.0.1 (July 2026)

Multi-Week Question Bank Management & Flexible Answer Sheet Matching

Solve the problem: "If I upload a question bank today and answer sheets next week, will the system remember it without re-uploading?"

Answer: YES! We've added a complete multi-question-bank system:

New Features (6-Layer Validation Pipeline)

Layer Feature Benefit
0.25 πŸ“š Question Bank Registry Remember PDFs forever - no re-uploading across months/years
0 πŸ” Fuzzy File Matching Find sheets matching PDFs despite typos (Jul12 = july12 = JULY12)
0.5 🎯 Interactive Question Bank Mapper Explicitly confirm which answer sheets belong to which PDF
1 βœ… Format Validation Verify files are valid before processing
2 πŸ”„ Sheet Variation Detection Handle different Excel sheet naming patterns automatically
3 πŸŽ“ Exam Consistency Check Verify answer sheets match question bank before analysis

Key New Tools

# Remember question banks across time
python3 question_bank_registry.py --register july12
python3 question_bank_registry.py --find-matches july26
python3 question_bank_registry.py --list

# Interactive PDF β†’ Answer sheet mapping
python3 map_questions_to_answers.py --batch july26

# Detect exam consistency & groupings
python3 detect_exam_consistency.py --batch july26

# Fuzzy filename matching debug
python3 fuzzy_file_matcher.py --batch july26

Real Scenario (Why This Matters)

Month 1, Week 1: Upload 5 question banks (CISSP, CompTIA, AWS, GCP, Azure)
                 python3 question_bank_registry.py --register qbanks_july

Month 1, Week 2: Program A submits 100 answer sheets for CISSP exam
                 python3 question_bank_registry.py --find-matches program_a
                 β†’ System auto-suggests CISSP_Exam.pdf from 1 week ago βœ“

Month 1, Week 3: Program B submits 80 answer sheets for CompTIA exam
                 python3 question_bank_registry.py --find-matches program_b
                 β†’ System auto-suggests CompTIA_Security+.pdf from 2 weeks ago βœ“

Month 2, Week 1: Program A retakes CISSP (new 100 students)
                 python3 question_bank_registry.py --find-matches program_a_round2
                 β†’ System recognizes CISSP_Exam.pdf (now used in 2 batches) βœ“
                 β†’ NO re-uploading needed!

Comprehensive Documentation (New)

Start here for complete workflows:


Main Menu Options Explained

When you run python3 run.py, you see 3 choices:

Option Use Case Input
[1] Batch Analysis Multiple students in one exam Exam PDF + Excel with multiple students
[2] Standalone Analysis Single student, one-time exam Exam PDF + Single student answers
[3] Full Batch Workflow Complete pipeline with validation Same as [1] + auto-fix + consolidation

Choose based on your needs. See section above for examples.


What's In The Report? (7 Sheets)

# Sheet Name What It Shows
1 Performance Summary Score, pass/fail status, how much more needed to pass, personalized message
2 Q&A Breakdown Every question - was it right or wrong, color-coded (green=correct, red=wrong)
3 By Question Type Performance on Definition vs Scenario vs Application questions
4 By Exam Tricks Performance on trick questions (MOST, BEST, FIRST, NOT, EXCEPT keywords)
5 By Domain Performance across 8 CISSP domains (which domain is weakest?)
6 By Difficulty Performance on Easy vs Medium vs Hard questions
7 Study Plan Personalized weekly study plan based on weak areas

Example: If student got 68.8%, the report shows:

  • βœ… Strengths: Domain 2 (88.9%), Domain 6 (100%)
  • ❌ Weaknesses: Domain 3 (47%), Domain 5 Kerberos (0%)
  • πŸ“… Study Plan: "Focus on Kerberos - 3 hours/week"

Historical Exam Tracking (NEW)

Track student progress across multiple exams and get adaptive study recommendations.

First Exam (Baseline)

python3 run.py
# Select: Standalone Analysis β†’ Single Student Mode

Output:

outputs/CISSP_Individual_Report_StudentName.xlsx

Second Exam (Progress Tracking)

python3 run.py
# Select: Standalone Analysis β†’ Comparative Mode (with history)
# Tool auto-detects previous exam and tracks progress

The tool automatically detects prior exams and adds:

  • Sheet 7: Progress Over Time (trends in domains, difficulty levels, question types)
  • Sheet 8: Adaptive Study Plan (momentum-based recommendations)

Output:

outputs/Mock2_2026-06-28_StudentName.xlsx  ← Shows progress vs Mock1

Filename Convention

All reports follow this pattern:

Mock[N]_[YYYY-MM-DD]_[StudentName].xlsx

Where:

  • N = exam sequence (Mock1, Mock2, Mock3, etc.)
  • YYYY-MM-DD = analysis date
  • StudentName = student name (spaces converted to underscores)

New Report Sheets (Exams 2+)

Sheet Content
Sheet 7: Progress Over Time Trend charts showing performance across exams: domains improving/declining, difficulty level progression, question type mastery
Sheet 8: Adaptive Study Plan Momentum-based recommendations: focus areas with highest ROI based on trend analysis, not just raw weaknesses

How It Works

The adaptive recommendation engine:

  1. Compares exam-to-exam performance
  2. Calculates momentum (improving vs declining topics)
  3. Identifies "quick wins" (topics improving but still weak)
  4. Recommends 3-week focused study plan with daily time allocation

Multiple Students / Batch Analysis

Analyze multiple students at once:

python3 run.py
# Select: Batch Analysis (Multiple students in cohort)
# Provide exam PDF and student answers Excel file

Output (one report per student):

outputs/CISSP_Individual_Report_John.xlsx
outputs/CISSP_Individual_Report_Jane.xlsx
outputs/CISSP_Individual_Report_Bob.xlsx
outputs/CISSP_Class_Report.xlsx  ← Compare all students

Requirements

  • Python: 3.9, 3.10, 3.11, or 3.12
  • Packages: pandas, openpyxl, pypdf (auto-installed via pip install -r requirements.txt)
  • Time: Installation = 2 min, Analysis = 10-15 sec per exam
  • AI: None needed - pure data analysis

Files You Need

MINIMUM (To Run Any Analysis)

  1. Exam PDF - Your test file with questions (example: exam.pdf)
  2. Student Answers Excel - Student responses in Excel format (see EXAMPLE_student_answers.xlsx)

OPTIONAL (For Advanced Features)

  1. Domain Mapping JSON - Already included for CISSP exams
  2. student_roster.json - Only needed for [1] Batch Analysis option

Correct Excel Format

Column headers = Student names, Rows = Answers (A/B/C/D)

Example:

Question John Doe Jane Smith
Q1 A B
Q2 B A
Q3 C C
Q4 D D

See EXAMPLE_student_answers.xlsx for real example See FORMATS_AND_TEMPLATES_GUIDE.md for all accepted formats


Detailed Setup

Platform-specific installation commands:

Quick reference card (printable):

Complete documentation index:

Download templates and examples:


How It Works (Technical)

Step 1: Parse PDF β†’ Extract 125 questions Step 2: Parse Excel β†’ Get student answers Step 3: Match answers to questions β†’ Calculate correct/wrong Step 4: Analyze 5 dimensions:

  • Domain (8 CISSP domains)
  • Topic (20+ topics within domains)
  • Difficulty (Easy/Medium/Hard)
  • Question Type (Definition, Application, Scenario, Exception, Sequence)
  • Exam Tricks (MOST, BEST, FIRST, NOT, EXCEPT keywords) Step 5: Generate 7-sheet Excel report with color coding

No AI involved - pure data processing and analysis.


Test Coverage

All components are thoroughly tested:

pytest -v
# Result: 279 passed, 2 skipped (comprehensive coverage across all modules)

Tests cover:

  • βœ… Environment validation (12 tests)
  • βœ… Question bank registry (persistence & fingerprinting)
  • βœ… Fuzzy filename matching (flexible file grouping)
  • βœ… Sheet variation detection (Excel naming patterns)
  • βœ… Exam consistency detection (grouping & validation)
  • βœ… Interactive mapping (PDF β†’ Answer sheet confirmation)
  • βœ… PDF extraction & parsing
  • βœ… Excel parsing (multiple formats)
  • βœ… Question mapping & metadata
  • βœ… Performance analysis (5 dimensions)
  • βœ… Report generation (7-sheet format)
  • βœ… Error handling & edge cases (15+ scenarios)
  • βœ… Input format variations (40+ formats)
  • βœ… Integration across all modules
  • βœ… Performance benchmarks

Common Questions

Q: Does this use AI? A: No. Pure Python data analysis and Excel generation.

Q: Can I use it with a different exam? A: Yes! Provide a mapping file with question β†’ domain/topic data.

Q: What if my Excel format is different? A: The parser is flexible. It handles most formats. Minor adjustments may be needed.

Q: Can it handle 200 questions instead of 125? A: Yes! Works with any number of questions.

Q: Can teachers use this? A: Yes! Teachers provide exam PDF + student answer file, get reports for each student.

Q: Is it free? A: Yes! Open source, MIT licensed.


Project Structure

cissp-analyzer/
β”œβ”€β”€ README.md                                  ← You are here
β”œβ”€β”€ check_setup.py                            ← RUN THIS FIRST! (verify setup)
β”œβ”€β”€ INSTALLATION_COMMANDS.md                   ← Platform-specific setup
β”œβ”€β”€ QUICK_SETUP_CARD.txt                      ← 7-step quick start
β”œβ”€β”€ DOCUMENTATION_INDEX.md                    ← Master documentation index
β”œβ”€β”€ WORKFLOW_OVERVIEW.md                      ← 5-step process explanation
β”œβ”€β”€ FORMATS_AND_TEMPLATES_GUIDE.md            ← All input formats
β”œβ”€β”€ NAMING_CONVENTIONS_AND_FORMATS.md         ← Naming rules
β”œβ”€β”€ WHERE_TO_DOWNLOAD_TEMPLATES.md            ← Download guide
β”œβ”€β”€ requirements.txt                          ← Dependencies
β”œβ”€β”€ analyze.py                                ← Main entry point (run this!)
β”œβ”€β”€ analyze_standalone.py                     ← Standalone analysis mode
β”œβ”€β”€ analyze_dec25.py                          ← Dec-25 batch analysis (pre-configured)
β”œβ”€β”€ analyze_july26.py                         ← July-26 batch analysis (pre-configured)
β”‚
β”œβ”€β”€ cissp_analyzer/                           ← Source code modules
β”‚   β”œβ”€β”€ pdf_parser.py                         ← Reads exam PDF
β”‚   β”œβ”€β”€ excel_parser.py                       ← Reads student answers
β”‚   β”œβ”€β”€ domain_mapper.py                      ← Question metadata
β”‚   β”œβ”€β”€ analysis_engine.py                    ← Performance analysis
β”‚   β”œβ”€β”€ adaptive_plan_generator.py            ← Study recommendations
β”‚   β”œβ”€β”€ individual_report_gen.py              ← Creates 7-sheet report
β”‚   β”œβ”€β”€ class_report_gen.py                   ← Compares students
β”‚   β”œβ”€β”€ interactive_cli.py                    ← CLI interface
β”‚   β”œβ”€β”€ main.py                               ← Orchestrator
β”‚   └── dependency_checker.py                 ← Environment validation
β”‚
β”œβ”€β”€ data/                                     ← Question mappings
β”‚   └── question_domain_mapping.json          ← 125 CISSP questions
β”‚
β”œβ”€β”€ EXAMPLE_answer_key.json                   ← 30 sample questions (JSON)
β”œβ”€β”€ EXAMPLE_answer_key.csv                    ← 30 sample questions (CSV)
β”œβ”€β”€ EXAMPLE_student_answers.xlsx              ← 4 students, 20 questions (USE THIS!)
β”œβ”€β”€ EXAMPLE_FILES_HOW_TO_USE.md               ← How to expand examples
β”œβ”€β”€ TEMPLATE_answer_key.json                  ← Blank JSON template
β”œβ”€β”€ TEMPLATE_student_answers.md               ← Excel format guide
β”œβ”€β”€ TEMPLATE_directory_structure.md           ← Project setup guide
β”œβ”€β”€ TEMPLATE_REFERENCE.txt                    ← Template overview
β”‚
└── tests/                                    ← Test suite (277 tests)
    β”œβ”€β”€ test_environment_validation.py
    β”œβ”€β”€ test_analysis_engine.py
    β”œβ”€β”€ test_adaptive_plan_generator.py
    β”œβ”€β”€ test_input_formats.py
    β”œβ”€β”€ test_error_handling.py
    β”œβ”€β”€ test_integration.py
    └── ... (additional test modules)

Example

Real example from Arjun (Practice Test 1):

Input:

  • Practice_Test_1.pdf (107 questions)
  • arjun_answers.xlsx (Arjun's 124 answers)

Output:

  • CISSP_Individual_Report_Arjun.xlsx

Arjun's Results:

  • βœ… Score: 40/117 = 34.2% (needs 35.8% improvement)
  • βœ… Weakest Domain: Domain 5 (IAM) = 12.5%
  • βœ… Weakest Topic: Kerberos = 0%
  • βœ… Weakest Trick Type: Multiple keyword tricks = 0%
  • πŸ“… Study Plan: Focus on Domain 4 (Network) and Domain 5 (IAM)

Troubleshooting

Problem: "FileNotFoundError: student_roster.json"

Cause: You selected [1] Batch Analysis but don't have the batch setup files. Solution:

  1. For first-time use, select [2] Standalone Analysis instead
  2. For batch analysis, read TEMPLATE_directory_structure.md

Problem: "FileNotFoundError: No such file or directory: 'exam.pdf'"

Cause: The exam PDF doesn't exist at the path you provided. Solution:

  1. Check the file path is correct
  2. Make sure the file exists: ls -la path/to/file.pdf
  3. Try using the full path: /Users/yourname/Downloads/exam.pdf

Problem: "FileNotFoundError: (Errno 2) No such file or directory: '.../answers.xlsx'"

Cause: The student answers Excel file doesn't exist. Solution:

  1. Check the file path is correct
  2. Try using EXAMPLE_student_answers.xlsx first to verify the format
  3. Make sure your Excel file matches the format in FORMATS_AND_TEMPLATES_GUIDE.md

Problem: "KeyError: column 'StudentName' not found"

Cause: Column names in Excel don't match student names in the mapping. Solution:

  1. Open EXAMPLE_student_answers.xlsx and check the format
  2. Make sure your Excel column headers are student names
  3. See FORMATS_AND_TEMPLATES_GUIDE.md for details

Problem: "pytest shows fewer than 277 passed"

Cause: Some tests are being skipped (usually 4 skipped is normal). Solution:

  1. Run: pytest -v to see details
  2. 277 passed + 4 skipped = healthy test suite
  3. If you see failures, check your Python version: python3 --version (need 3.9+)

Before Asking for Help

Run these checks:

# 1. Verify setup
python3 run.py --setup

# 2. Verify tests pass
pytest -v

# 3. Check Python version
python3 --version

# 4. Check required packages
pip list | grep -E "pandas|openpyxl|pypdf"

# 5. Verify file exists
ls -la your_exam_file.pdf
ls -la your_student_answers.xlsx

If all pass and you still have issues:

  1. Read FORMATS_AND_TEMPLATES_GUIDE.md for file format help
  2. Check DOCUMENTATION_INDEX.md for more resources
  3. Open an issue on GitHub with the error message

Installation Issues?

If you get stuck during installation:

  1. Make sure Python 3.9+ is installed: python3 --version
  2. Make sure pip is installed: python3 -m pip --version
  3. Reinstall packages: pip install -r requirements.txt --force-reinstall
  4. See INSTALLATION_COMMANDS.md for detailed platform-specific troubleshooting

License

MIT License - Free to use for any purpose


Questions?

NEW: Complete Onboarding Guides (v1.0.1)

Setup & Format Help


Ready to analyze exams? Run: python3 run.py


Version: 1.0.1 | Last Updated: July 13, 2026 | Tests: 279/279 Passing | Status: Production Ready | New Features: Question Bank Registry, Fuzzy Matching, Interactive Mapping

About

CISSP exam analyzer with dual-mode analysis (single exam & comparative with history), 5D performance tracking, adaptive recommendations, and professional Excel reports. Python 3.9-3.12 | macOS, Windows, Linux

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages