|
4 | 4 | \usepackage{booktabs} |
5 | 5 | \usepackage{multicol} |
6 | 6 | \usepackage{longtable} |
| 7 | +\usepackage{amsmath} |
| 8 | +\usepackage{hyperref} |
| 9 | +\usepackage{float} |
| 10 | + |
7 | 11 |
|
8 | 12 | \title{Reflection and Traceability Report on \progname} |
9 | 13 |
|
@@ -762,9 +766,98 @@ \section{Design Iteration (LO11 (PrototypeIterate))} |
762 | 766 |
|
763 | 767 | \section{Design Decisions (LO12)} |
764 | 768 |
|
765 | | -\plt{Reflect and justify your design decisions. How did limitations, |
766 | | - assumptions, and constraints influence your decisions? Discuss each of these |
767 | | - separately.} |
| 769 | +This section reflects on the key design decisions made during the development of the DomainX tool, organized by the limitations, assumptions, and constraints that influenced them. |
| 770 | + |
| 771 | +\subsection{Limitations} |
| 772 | + |
| 773 | +The primary limitation we faced was the project timeline. Development had to be completed within a single academic year, which required us to prioritize core functionality over comprehensive features. This time constraint directly influenced several architectural decisions: |
| 774 | + |
| 775 | +\begin{itemize} |
| 776 | + \item \textbf{Modular Backend Architecture:} We chose a modular Django-based architecture rather than a monolithic design. This allowed team members to work on different modules (e.g., domain management, metric collection, AHP calculations) in parallel without blocking each other, accelerating development. |
| 777 | + \item \textbf{Feature Prioritization:} Due to time constraints, we prioritized essential features such as user authentication, domain management, metric collection, and AHP ranking over optional features like sensitivity analysis, bulk data upload, and logging changes. This ensured that the core research workflow remained functional while less critical features were deferred. |
| 778 | + \item \textbf{Automated Testing Focus:} While we aimed for 80\% code coverage, time limitations prevented us from achieving this target. We focused testing efforts on critical modules (e.g., AHP calculations, data validation) where failures would have the greatest impact, while lower-risk areas received less coverage. |
| 779 | + \item \textbf{Simplified Deployment:} We opted for a traditional Django + React deployment over a more complex microservice architecture to reduce setup time and maintenance overhead, given the short development window. |
| 780 | +\end{itemize} |
| 781 | + |
| 782 | +\subsection{Assumptions} |
| 783 | + |
| 784 | +Several assumptions guided our design decisions, based on the expected users and environment: |
| 785 | + |
| 786 | +\begin{itemize} |
| 787 | + \item \textbf{User Technical Proficiency:} We assumed that users (researchers working with Dr.~Smith) have basic technical proficiency, including familiarity with web browsers, GitHub, and research methodologies. This allowed us to design a web-based interface without extensive onboarding tutorials, though we still provided tooltips and inline help for metric input fields. |
| 788 | + \item \textbf{Stable Internet Connection:} We assumed users would have reliable internet access, as the tool depends on external APIs (GitHub, PyPI) for automated data collection. This assumption influenced our decision not to implement offline caching mechanisms. |
| 789 | + \item \textbf{GitHub API Availability:} We assumed that GitHub APIs would remain accessible and within rate limits during typical usage. We implemented basic error handling but did not build complex retry or fallback mechanisms due to time constraints. |
| 790 | + \item \textbf{Researcher Collaboration:} We assumed that multiple researchers would collaborate on the same domains, requiring role-based access control. This led us to implement Contributor and Viewer roles to manage edit permissions. |
| 791 | +\end{itemize} |
| 792 | + |
| 793 | +\subsection{Constraints} |
| 794 | + |
| 795 | +Various external and internal constraints shaped the final design of the system: |
| 796 | + |
| 797 | +\begin{itemize} |
| 798 | + \item \textbf{Time Constraint (Schedule):} The most significant constraint was the fixed capstone timeline, with a hard deadline for the final release. This forced us to make deliberate trade-offs: |
| 799 | + \begin{itemize} |
| 800 | + \item We prioritized security features (password encryption, role-based access) over sensitivity testing, as data protection was deemed more critical for user trust. |
| 801 | + \item We implemented a working AHP calculation matching the LBM paper methodology but deferred comprehensive sensitivity analysis to future work. |
| 802 | + \item We focused on stability and correctness of core features rather than exhaustive performance optimization. |
| 803 | + \end{itemize} |
| 804 | + |
| 805 | + \item \textbf{Budget Constraint:} The project could not exceed \$125 in hosting costs. This constraint led us to: |
| 806 | + \begin{itemize} |
| 807 | + \item Use McMaster University's existing infrastructure when possible, rather than paid cloud services. |
| 808 | + \item Optimize database queries to reduce server load, allowing us to run on lower-cost instances. |
| 809 | + \item Avoid third-party paid APIs, relying instead on free public APIs (GitHub, PyPI) with rate limits. |
| 810 | + \end{itemize} |
| 811 | + |
| 812 | + \item \textbf{Technical Constraints:} GitHub API rate limits (60 requests per hour for unauthenticated users, 5000 for authenticated) constrained how many libraries could be analyzed in a single session. We mitigated this by using authenticated requests where possible and adding status indicators for long-running analyses. |
| 813 | + |
| 814 | + \item \textbf{Research Methodology Constraint:} The AHP calculations had to follow the exact methodology from the LBM research paper. This constrained our implementation to use the specific pairwise comparison formula: |
| 815 | + \[ |
| 816 | + A_{jk} = |
| 817 | + \begin{cases} |
| 818 | + \min(9, x_{sub} - y_{sub} + 1) & \text{if } x_{sub} \geq y_{sub} \\ |
| 819 | + 1 / \min(9, y_{sub} - x_{sub} + 1) & \text{if } x_{sub} < y_{sub} |
| 820 | + \end{cases} |
| 821 | + \] |
| 822 | + We could not deviate from this formula, even if alternative approaches might have been simpler to implement. |
| 823 | + |
| 824 | + \item \textbf{User Access Constraints:} The system had to support both authenticated researchers (who can edit data) and public viewers (read-only access). This led us to implement role-based access control with Django's authentication system, ensuring that unauthorized users cannot modify domain data. |
| 825 | + |
| 826 | + \item \textbf{Platform Compatibility:} The tool had to run on standard desktop browsers (Chrome, Firefox, Edge) without requiring additional software installation. This constrained us to use web technologies (HTML/CSS/JavaScript for frontend, Python/Django for backend) rather than platform-specific solutions. |
| 827 | +\end{itemize} |
| 828 | + |
| 829 | +\subsection{Design Decisions Summary} |
| 830 | + |
| 831 | +The following table summarizes the key design decisions and their justifications: |
| 832 | + |
| 833 | +\begin{table}[H] |
| 834 | +\centering |
| 835 | +\caption{Summary of Design Decisions} |
| 836 | +\label{tab:design-decisions} |
| 837 | +\begin{tabular}{p{4cm} p{4.5cm} p{5.5cm}} |
| 838 | +\toprule |
| 839 | +\textbf{Decision Area} & \textbf{Choice Made} & \textbf{Justification} \\ |
| 840 | +\midrule |
| 841 | +Backend Framework & Django & Rapid development, built-in admin, ORM, and authentication \\ |
| 842 | +\midrule |
| 843 | +Frontend Framework & React & Component reusability, responsive UI, large ecosystem \\ |
| 844 | +\midrule |
| 845 | +Database & MySQL (production), SQLite (development) & MySQL for scalability, SQLite for local testing \\ |
| 846 | +\midrule |
| 847 | +AHP Implementation & Custom pairwise formula & Required by LBM research paper methodology \\ |
| 848 | +\midrule |
| 849 | +Authentication & Django built-in with role-based access & Secure, meets access control requirements \\ |
| 850 | +\midrule |
| 851 | +Automated Metrics & GitHub API + GitStats + SCC & Free, well-documented, meets data collection needs \\ |
| 852 | +\midrule |
| 853 | +Testing & pytest with GitHub Actions CI & Automated, integrates with development workflow \\ |
| 854 | +\midrule |
| 855 | +Deployment & McMaster University infrastructure & Cost-free, meets budget constraint \\ |
| 856 | +\midrule |
| 857 | +Security & Password hashing (bcrypt), role-based access & Protects user data, prevents unauthorized edits \\ |
| 858 | +\bottomrule |
| 859 | +\end{tabular} |
| 860 | +\end{table} |
768 | 861 |
|
769 | 862 | \section{Economic Considerations (LO23)} |
770 | 863 |
|
|
0 commit comments