fix bonus points
This commit is contained in:
139
README.md
139
README.md
@@ -1,11 +1,11 @@
|
||||
# DHBW 2025: Web Engineering Prüfungsleistung
|
||||
**Maximale Punktzahl: 100 Punkte**
|
||||
**Maximale Basispunktzahl: 100 Punkte + bis zu 15 Bonuspunkte**
|
||||
|
||||
---
|
||||
|
||||
## 1. Grundanforderungen (insg. 30 Punkte)
|
||||
## 1. Grundanforderungen (30 Punkte)
|
||||
|
||||
### Projektgrundlagen (15/30 Punkte)
|
||||
### Projektgrundlagen (15 Punkte)
|
||||
- **Funktionsfähige Anwendung** (8 Punkte)
|
||||
- Webapp oder Backend-Anwendung läuft fehlerfrei
|
||||
- Kernfunktionalitäten sind in der Projektdokumentation beschrieben und testbar
|
||||
@@ -17,7 +17,7 @@
|
||||
- README.md mit Installation, Verwendung und Technologie-Stack
|
||||
- Kurze Erklärung der Hauptfunktionen am Anfang relevanter Dateien
|
||||
|
||||
### Präsentation (15/30 Punkte)
|
||||
### Präsentation (15 Punkte)
|
||||
- **Elevator Pitch** (5 Punkte)
|
||||
- Maximal 1 Minute
|
||||
- Welches Problem wird gelöst und warum wurde es vorher noch nicht gelöst?
|
||||
@@ -25,7 +25,7 @@
|
||||
- **Technische Präsentation** (5 Punkte)
|
||||
- PowerPoint/Folien mit Technologie-Stack
|
||||
- Live-Demo der Anwendung
|
||||
- **Projektevolution:** (5 Punkte)
|
||||
- **Projektevolution** (5 Punkte)
|
||||
Jedes Projekt verläuft unterschiedlich.
|
||||
Sofern es zutrifft, beschreibt die unterschiedlichen Phasen des Projekts.
|
||||
*Wie weit seid ihr gekommen? Wo waren die Stolpersteine? Wie könnte sich eure Anwendung bei fortgesetzter Arbeit entwickeln?*
|
||||
@@ -37,9 +37,9 @@
|
||||
|
||||
---
|
||||
|
||||
## 2. Clean Code Prinzipien (insg. 30 Punkte)
|
||||
## 2. Clean Code Prinzipien (25 Punkte)
|
||||
|
||||
### Projektstruktur (10/30 Punkte)
|
||||
### Projektstruktur (10 Punkte)
|
||||
- **Ordnerstruktur** (5 Punkte)
|
||||
```
|
||||
projekt/
|
||||
@@ -64,9 +64,9 @@
|
||||
- Ein Konzept pro Datei (Single Responsibility)
|
||||
- Konsistente Namenskonventionen: `kebab-case` für Dateien, `camelCase` für Variablen, `PascalCase` für Komponenten/Klassen
|
||||
|
||||
### Code-Qualität (10/30 Punkte)
|
||||
### Code-Qualität (10 Punkte)
|
||||
|
||||
#### KISS Prinzip (2 Punkte)
|
||||
#### KISS Prinzip (3 Punkte)
|
||||
|
||||
**❌ Nicht so einfach:**
|
||||
```javascript
|
||||
@@ -85,23 +85,7 @@ function calculateActiveTotal(data) {
|
||||
}
|
||||
```
|
||||
|
||||
**❌ Nicht so einfach:**
|
||||
```javascript
|
||||
const u = users.find(u => u.id === id && u.active && !u.deleted) || null;
|
||||
```
|
||||
|
||||
**✅ Einfach:**
|
||||
```javascript
|
||||
function findActiveUser(users, userId) {
|
||||
return users.find(user =>
|
||||
user.id === userId &&
|
||||
user.active &&
|
||||
!user.deleted
|
||||
) || null;
|
||||
}
|
||||
```
|
||||
|
||||
#### Beschreibende Namen (2 Punkte)
|
||||
#### Beschreibende Namen (3 Punkte)
|
||||
|
||||
**❌ Schlecht:**
|
||||
```javascript
|
||||
@@ -117,21 +101,7 @@ let userProfiles = [];
|
||||
function calculateTotalPrice(price, taxRate) { return price * taxRate; }
|
||||
```
|
||||
|
||||
**❌ Unklar und uneindeutig:**
|
||||
```javascript
|
||||
const btn = document.getElementById('btn');
|
||||
let flag = false;
|
||||
function process(items) { /* ... */ }
|
||||
```
|
||||
|
||||
**✅ Sprechende Variablennamen:**
|
||||
```javascript
|
||||
const submitButton = document.getElementById('submit-btn');
|
||||
let isFormValid = false;
|
||||
function validateUserInput(formData) { /* ... */ }
|
||||
```
|
||||
|
||||
#### Funktionsverantwortlichkeiten (5 Punkte)
|
||||
#### Funktionsverantwortlichkeiten (4 Punkte)
|
||||
|
||||
**❌ Zu viele Verantwortlichkeiten:**
|
||||
```javascript
|
||||
@@ -163,7 +133,7 @@ function sendWelcomeEmail(email) {
|
||||
}
|
||||
```
|
||||
|
||||
### Kommentierung & Dokumentation (5/30 Punkte)
|
||||
### Kommentierung & Dokumentation (5 Punkte)
|
||||
**JSDoc ist optional und der beste Code muss nicht kommentiert werden.**
|
||||
|
||||
**❌ Über-/Unterkommentiert:**
|
||||
@@ -193,40 +163,11 @@ function calculateCompoundInterest(principal, rate, time) {
|
||||
}
|
||||
```
|
||||
|
||||
**❌ Unterkommentiert:**
|
||||
```javascript
|
||||
function x(a,b,c,d,e) {
|
||||
return a*b+c-d/e;
|
||||
}
|
||||
```
|
||||
|
||||
**✅ Mit JSDoc dokumentiert:**
|
||||
```javascript
|
||||
/**
|
||||
* Calculates shipping cost based on weight, distance and priority
|
||||
* @param {number} weight - Package weight in kg
|
||||
* @param {number} distance - Delivery distance in km
|
||||
* @param {boolean} isPriority - Priority delivery flag
|
||||
* @returns {number} Total shipping cost
|
||||
*/
|
||||
function calculateShippingCost(weight, distance, priority) {
|
||||
const baseCost = weight * 2.5;
|
||||
const distanceCost = distance * 0.1;
|
||||
const priorityMultiplier = priority ? 1.5 : 1;
|
||||
return (baseCost + distanceCost) * priorityMultiplier;
|
||||
}
|
||||
```
|
||||
|
||||
### Live-Demo (5/30 Punkte)
|
||||
- Anwendung läuft während der Präsentation stabil
|
||||
- Alle Kernfunktionen werden erfolgreich vorgeführt
|
||||
- Ungefähr 5 Minuten Demo-Zeit
|
||||
|
||||
---
|
||||
|
||||
## 3. Accessibility & UX (25 Punkte insg.)
|
||||
## 3. Accessibility & UX (25 Punkte)
|
||||
|
||||
### Web Accessibility (15/25 Punkte)
|
||||
### Web Accessibility (15 Punkte)
|
||||
|
||||
#### Semantisches HTML (5 Punkte)
|
||||
|
||||
@@ -307,7 +248,7 @@ div.clickable:focus {
|
||||
<div class="clickable" tabindex="0" aria-label="Menü öffnen">🍔</div>
|
||||
```
|
||||
|
||||
### Responsive Design (10/25 Punkte)
|
||||
### Responsive Design (10 Punkte)
|
||||
|
||||
#### Mobile First Approach (5 Punkte - mindestens 1 Breakpoint)
|
||||
```css
|
||||
@@ -358,9 +299,9 @@ div.clickable:focus {
|
||||
|
||||
---
|
||||
|
||||
## 4. Erweiterte Technologien & Innovation (15 Punkte insg.)
|
||||
## 4. Technische Umsetzung (20 Punkte)
|
||||
|
||||
### Plattformunabhängigkeit (5/15 Punkte)
|
||||
### Plattformunabhängigkeit (5 Punkte)
|
||||
- Funktioniert auf macOS, Windows, GNU/Linux
|
||||
- Browser-Kompatibilität (Chrome, Firefox, Safari, Edge)
|
||||
|
||||
@@ -391,9 +332,7 @@ function copyToClipboard(text) {
|
||||
}
|
||||
```
|
||||
|
||||
### Entwicklungs-Tools (10/15 Punkte)
|
||||
|
||||
#### Package Management (4 Punkte)
|
||||
### Package Management (5 Punkte)
|
||||
|
||||
Sämtliche nodeJS/JavaScript Projekte sollten eine `package.json` beinhalten.
|
||||
`npm init` und ein Dialog öffnet sich.
|
||||
@@ -417,7 +356,7 @@ Sämtliche nodeJS/JavaScript Projekte sollten eine `package.json` beinhalten.
|
||||
}
|
||||
```
|
||||
|
||||
#### Build Tools & Optimierung (6 Punkte)
|
||||
### Build Tools & Optimierung (5 Punkte)
|
||||
- Vite, Webpack, oder ähnliche Tools
|
||||
- Optimierte Produktions-Builds
|
||||
- Debugger und unnötige console.log()'s entfernen
|
||||
@@ -442,10 +381,18 @@ import { debounce } from 'lodash';
|
||||
// Debug-Code entfernt in Production
|
||||
```
|
||||
|
||||
### Zusätzliche Features (Bonus: bis maximal 10 Punkte zusätzlich)
|
||||
**Wähle mindestens 2 Bereiche:**
|
||||
### Live-Demo (5 Punkte)
|
||||
- Anwendung läuft während der Präsentation stabil
|
||||
- Alle Kernfunktionen werden erfolgreich vorgeführt
|
||||
- Ungefähr 5 Minuten Demo-Zeit
|
||||
|
||||
#### API Integration (5 Punkte)
|
||||
---
|
||||
|
||||
## 5. Bonusfeatures (max. 15 Zusatzpunkte)
|
||||
|
||||
**Wähle mindestens 2 Bereiche für Bonuspunkte:**
|
||||
|
||||
### API Integration (5 Bonuspunkte)
|
||||
|
||||
**❌ Ohne Error Handling:**
|
||||
```javascript
|
||||
@@ -471,7 +418,7 @@ async function fetchUserData(userId) {
|
||||
}
|
||||
```
|
||||
|
||||
#### Local Storage / State Management (5 Punkte)
|
||||
### Local Storage / State Management (5 Bonuspunkte)
|
||||
|
||||
**❌ Ohne Error Handling:**
|
||||
```javascript
|
||||
@@ -506,7 +453,7 @@ function loadUserPreferences() {
|
||||
}
|
||||
```
|
||||
|
||||
#### Progressive Web App Features (5 Punkte)
|
||||
### Progressive Web App Features (5 Bonuspunkte)
|
||||
- Service Worker für Offline-Funktionalität
|
||||
- Manifest.json für App-Installation
|
||||
- Caching-Strategien
|
||||
@@ -528,7 +475,7 @@ if ('serviceWorker' in navigator) {
|
||||
</script>
|
||||
```
|
||||
|
||||
#### Testing (10 Punkte)
|
||||
### Testing (5 Bonuspunkte)
|
||||
|
||||
Von Vornherein mitgedachte Tests helfen beim Code-Splitting.
|
||||
Um beim Testen jene Funktionen eindeutig referenzieren zu können, hilft es sie in einzelne Dateien zu verteilen und Ordnern zu gruppieren.
|
||||
@@ -563,7 +510,7 @@ test('calculateTotal should throw error for invalid input', () => {
|
||||
});
|
||||
```
|
||||
|
||||
#### Responsive Design Erweitert (5 Punkte - 2 oder mehr Breakpoints)
|
||||
### Erweiterte Responsive Features (5 Bonuspunkte - 3+ Breakpoints)
|
||||
```css
|
||||
/* Mobile */
|
||||
.grid { display: block; }
|
||||
@@ -591,7 +538,7 @@ test('calculateTotal should throw error for invalid input', () => {
|
||||
}
|
||||
```
|
||||
|
||||
#### Security Features (5 Punkte)
|
||||
### Security Features (5 Bonuspunkte)
|
||||
|
||||
**❌ Unsicher:**
|
||||
```javascript
|
||||
@@ -622,6 +569,20 @@ function search(query) {
|
||||
|
||||
---
|
||||
|
||||
## Punkteverteilung im Überblick
|
||||
|
||||
**Basispunkte (100 Punkte):**
|
||||
- Grundanforderungen: 30 Punkte
|
||||
- Clean Code Prinzipien: 25 Punkte
|
||||
- Accessibility & UX: 25 Punkte
|
||||
- Technische Umsetzung: 20 Punkte
|
||||
|
||||
**Bonuspunkte (max. 15 Punkte):**
|
||||
- Bis zu 3 Bonusfeatures à 5 Punkte wählbar
|
||||
- Gesamtmögliche Punktzahl: 115 Punkte
|
||||
|
||||
---
|
||||
|
||||
## Abgabe
|
||||
|
||||
- **Deadline:** 27.07.2025
|
||||
@@ -635,4 +596,4 @@ function search(query) {
|
||||
3. **Fragt bei Unklarheiten** rechtzeitig nach
|
||||
4. **Fokussiert euch** auf Qualität statt Quantität
|
||||
5. **Behaltet Barrieren im Blick** und vermeidet sie rechtzeitig
|
||||
5. **Verwendet gute Struktur** um eure Code-Beispiele zu organisieren
|
||||
6. **Verwendet gute Struktur** um eure Code-Beispiele zu organisieren
|
||||
Reference in New Issue
Block a user