Μετάβαση στο περιεχόμενο

Τεχνολογία Λογισμικού — Ιούνιος 2025 (23/6/2025)

Μεταγραφή από τις φωτογραφίες του γραπτού της 23/06/2025: εξώφυλλο με οδηγίες, Θέμα Α (εκφώνηση και πίνακες απαντήσεων), Θέμα Β και Θέμα Γ.

20250623_133949.jpg

Πολυτεχνική Σχολή
Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών & Πληροφορικής

Μάθημα Τεχνολογία Λογισμικού
Ημερομηνία- Ώρα Εξέτασης Δευτέρα 23/06/2025, 12:00- 13:15
Κωδικός Γραπτού C01JM0722
Διάρκεια Εξέτασης 1,25 ώρες

Οδηγίες:

  1. Οι μονάδες που λαμβάνει κάθε θέμα αναφέρονται σε παρένθεση δίπλα στο θέμα και, αντίστοιχα όπου χρειάζεται, στο κάθε υποερώτημα. Στα θέματα και στα ερωτήματα που δεν αναφέρεται η βαρύτητα τους, τα υποερωτήματα είναι ισοδύναμα.
  2. Πρέπει να απαντήσετε σε όλα τα θέματα. Όλες οι απαντήσεις θα δοθούν κάτω από τις εκφωνήσεις και μόνο στο χώρο που καθορίζεται από τα θέματα. Εφόσον χρειάζεστε πρόχειρο, θα πρέπει να χρησιμοποιήσετε τις σελίδες που προορίζονται μόνο για πρόχειρο. Παραπομπές ή απαντήσεις εκτός από την περιοχή που ορίζεται θα αγνοηθούν.
  3. Τα θέματα επιστρέφονται.
  4. Πρέπει να παραμείνετε υποχρεωτικά στην αίθουσα για ΟΛΗ ΤΗ ΔΙΑΡΚΕΙΑ της εξέτασης.
  5. Προφορικές διευκρινίσεις σε ατομική βάση δε θα δοθούν. Μπορείτε να υποβάλλετε ενδεχόμενες ερωτήσεις ώστε να αφορούν όλους και για όποιες από αυτές κριθεί σκόπιμο θα δοθούν διευκρινίσεις προς όλους τους εξεταζόμενους. Ερωτήσεις σχετικές με το περιεχόμενο του αντικειμένου της εξέτασης μετά την αποχώρηση του πρώτου εξεταζόμενου που θα ολοκληρώσει την εξέταση ή θα αποχωρήσει δεν επιτρέπονται.
  6. Η εξέταση αφορά κάθε εξεταζόμενο ατομικά. Δεν επιτρέπεται η συνεργασία μεταξύ των εξεταζομένων κατά τη διάρκεια της εξέτασης.
  7. Απαγορεύεται η χρήση κινητών τηλεφώνων, ηλεκτρονικών υπολογιστών ή άλλων συσκευών με παρόμοιες δυνατότητες.

Βεβαιώνω με την υπογραφή μου ότι έχω διαβάσει και κατανοήσει τις παραπάνω οδηγίες και κανόνες εξέτασης.

Υπογραφή

20250623_133958.jpg

ΘΕΜΑ Α (Μονάδες 3)

Σε μία συσκευή αυτόματης παραγγελίας τροφής για κατοικίδια, ο χρήστης εισάγει την επιθυμητή ποσότητα σε γραμμάρια (έως 4 ψηφία) μέσω αριθμητικού πληκτρολογίου (0–9, delete, enter). Το σύστημα αντιδρά ως εξής:

  • Αν η ποσότητα είναι 0 γραμμάρια, εμφανίζεται μήνυμα λάθους ("Δεν μπορεί να γίνει παραγγελία μηδενικής ποσότητας").
  • Από 1 έως 49 γραμμάρια, ενημερώνει ότι είναι ποσότητα δοκιμής και ζητά επιβεβαίωση.
  • Από 50 έως 1000 γραμμάρια, προχωράει με την παραγγελία χωρίς επιβεβαίωση.
  • Από 1001 έως 3000 γραμμάρια, ζητά επιβεβαίωση λόγω μεγάλου όγκου παραγγελίας.
  • Από 3001 έως 9999 γραμμάρια, αρνείται την παραγγελία και ζητά [δυσανάγνωστο] χωρίσει σε μικρότερες ποσότητες.

Ζητείται: Να σχεδιάσετε περιπτώσεις ελέγχου (test cases) χρησιμοποιώντας: α) Κλάσεις Ισοδυναμίας β) Οριακές Τιμές

Υπόδειγμα: Στην απάντηση σας, συμπληρώστε στους πίνακες όσες γραμμές χρειάζονται (όχι απαραίτητα 10) όπως το παράδειγμα (που είναι σωστό και μπορείτε να το αφήσετε ως έχει).

Απάντηση Θέματος Α

Test Case Είσοδος Αναμενόμενη Συμπεριφορά
1
2
3
4
5
6
7
8
9
10

20250623_134004.jpg

Πολυτεχνική Σχολή
Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών & Πληροφορικής

Τεχνική Κλάσεις Ισοδυναμίας

Test Case Είσοδος Αναμενόμενη Συμπεριφορά
1 -1 Τιμή εκτός ορίων (δεν είναι εφικτή λόγω του ειδικού πληκτρολογίου)
2
3
4
5
6
7
8
9
10

Πρόχειρο

20250623_134017.jpg

Πολυτεχνική Σχολή
Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών & Πληροφορικής

ΘΕΜΑ Β (Μονάδες 3,5)
Δίνεται η ακόλουθη περίπτωση χρήσης (use case) «Αξιολόγηση» για κάποιες εκδηλώσεις ενός οργανισμού:

Βασική ροή
1. Ο πελάτης επιλέγει «Αξιολόγηση» στην Οθόνη Αξιολόγησης
2. Το σύστημα αναζητά, ανακτά και παρουσιάζει λίστα με τις εκδηλώσεις που παρακολούθησε ο πελάτης
3. Ο πελάτης επιλέγει εκδήλωση και αξιολογεί την εκδήλωση επιλέγοντας βαθμό από το 1 έως το 5
4. Το σύστημα ελέγχει την ορθότητα της βαθμολογίας από το 1 έως το 5 και ζητάει επιβεβαίωση για την επιλογή του
5. Ο πελάτης επιβεβαιώνει
6. Το σύστημα αποθηκεύει την βαθμολογία του
7. Ο πελάτης επιλέγει να αναζητήσει εκδηλώσεις του ενδιαφέροντος του και μεταφέρεται στην περίπτωση χρήσης «Αναζήτηση»

Να κατασκευάσετε το διάγραμμα ευρωστίας (robustness diagram) για την παραπάνω περίπτωση χρήσης.

Απάντηση Θέματος Β

20250623_134028.jpg

Πολυτεχνική Σχολή
Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών & Πληροφορικής

ΘΕΜΑ Γ (Μονάδες 3,5)
Δίνεται το παρακάτω διάγραμμα κλάσεων (class diagram) και ζητείται να παράξετε τον αντίστοιχο κώδικα σε κάποια αντικειμενοστρεφή γλώσσα όπως, π.χ. Java, κ.λπ., με βάση όσα έχουμε καλύψει στο μάθημα.
Προσοχή στις σχέσεις μεταξύ των κλάσεων, ίσως χρειάζεται να προσθέσετε ιδιότητες ή μεθόδους για να τις υλοποιήσετε.
Δεν χρειάζεται να προσθέσετε κώδικα στα σώματα των μεθόδων, γι' αυτό και κάτι τέτοιο δεν θα βαθμολογηθεί!

[Σχήμα: Διάγραμμα κλάσεων UML: - Κλάση Customer: - #customerId: String - #name: String - Συσχέτιση (association) με κατεύθυνση προς ShoppingCart, με πολλαπλότητα 1 (από Customer) σε 1 (προς ShoppingCart). - Κλάση ShoppingCart: - -totalAmount: double - +removeItem(itemId:String) - +calculateTotal(): double - Σχέση σύνθεσης (composition, συμπαγής ρόμβος στο ShoppingCart) με πολλαπλότητα 1 σε 0..* προς CartItem. - Κλάση CartItem: - -itemId: String - -price: double - -quantity: int - +updateQuantity(quantity:int): void]

Απάντηση Θέματος Γ

Λύσεις (⚪ AI, μη επαληθευμένο)

Κατάσταση: ⚪ AI, μη επαληθευμένο Πηγή: λύσεις AI (gemini-3.7-flash, sonnet), ανεξάρτητη επανάληψη και αντιπαραβολή· καμία δεν έχει ελεγχθεί από άνθρωπο

Προσοχή

Λύση από AI — ελέγξτε την· δεν έχει επαληθευτεί από άνθρωπο. Η ένδειξη «δύο λύσεις συμφωνούν» δεν σημαίνει ότι η απάντηση είναι σωστή.

AI λύσεις — 2025-06-a

Οι λύσεις γράφτηκαν από μοντέλα AI και δεν έχουν ελεγχθεί από άνθρωπο. Η αρίθμηση ακολουθεί το αρχείο θεμάτων.

Θέμα Α

Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: υψηλή

Είσοδος: ακέραιος 0–9999 (έως 4 ψηφία, το πληκτρολόγιο δεν επιτρέπει αρνητικά). Κλάσεις: {0}, [1,49], [50,1000], [1001,3000], [3001,9999]. Το τελευταίο μήνυμα της εκφώνησης είναι δυσανάγνωστο· υποθέτω «ζητά να χωριστεί σε μικρότερες ποσότητες».

α) Κλάσεις ισοδυναμίας (μία τιμή ανά κλάση):

Test Case Είσοδος Αναμενόμενη συμπεριφορά
1 -1 Εκτός ορίων (δεν είναι εφικτό λόγω πληκτρολογίου)
2 0 Μήνυμα λάθους: μηδενική ποσότητα
3 25 Ποσότητα δοκιμής, ζητά επιβεβαίωση
4 500 Προχωρά η παραγγελία χωρίς επιβεβαίωση
5 2000 Ζητά επιβεβαίωση λόγω μεγάλου όγκου
6 6000 Αρνείται, ζητά διαχωρισμό σε μικρότερες ποσότητες

β) Οριακές τιμές (σε κάθε σύνορο, τιμή εκατέρωθεν):

Test Case Είσοδος Αναμενόμενη συμπεριφορά
1 -1 Εκτός ορίων (μη εφικτό)
2 0 Μήνυμα λάθους
3 1 Ποσότητα δοκιμής, επιβεβαίωση
4 49 Ποσότητα δοκιμής, επιβεβαίωση
5 50 Προχωρά χωρίς επιβεβαίωση
6 1000 Προχωρά χωρίς επιβεβαίωση
7 1001 Ζητά επιβεβαίωση (μεγάλος όγκος)
8 3000 Ζητά επιβεβαίωση (μεγάλος όγκος)
9 3001 Αρνείται, ζητά διαχωρισμό
10 9999 Αρνείται, ζητά διαχωρισμό

Η τιμή 10000 δεν μπορεί να εισαχθεί (4 ψηφία), άρα δεν ελέγχεται.

Θέμα Β

Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: μέτρια

Κανόνες ICONIX: ο actor μιλά μόνο με boundary· boundary↔control· control↔control· control↔entity· όχι boundary↔boundary ή entity↔entity. Υπάρχουν πολλές αποδεκτές λύσεις· μία ενδεικτική (η σειρά των βημάτων 1–7 της ροής σημειώνεται):

Objects:  Actor: Πελάτης
          Boundary: [Οθόνη Αξιολόγησης], [Οθόνη Επιβεβαίωσης]
          Control: (Ανάκτηση Εκδηλώσεων), (Έλεγχος Βαθμολογίας), (Αποθήκευση Βαθμολογίας)
          Entity: <Εκδήλωση>, <Βαθμολογία>
          Use case: Αναζήτηση

1  Πελάτης --> [Οθόνη Αξιολόγησης]
2  [Οθόνη Αξιολόγησης] --> (Ανάκτηση Εκδηλώσεων) --> <Εκδήλωση>
   (Ανάκτηση Εκδηλώσεων) --> [Οθόνη Αξιολόγησης]      (εμφάνιση λίστας)
3  Πελάτης --> [Οθόνη Αξιολόγησης]                   (επιλογή εκδήλωσης και βαθμού 1-5)
4  [Οθόνη Αξιολόγησης] --> (Έλεγχος Βαθμολογίας) --> [Οθόνη Επιβεβαίωσης]
5  Πελάτης --> [Οθόνη Επιβεβαίωσης]
6  [Οθόνη Επιβεβαίωσης] --> (Αποθήκευση Βαθμολογίας) --> <Βαθμολογία>
7  Πελάτης --> [Οθόνη Αξιολόγησης] ---> (use case «Αναζήτηση»)

Θέμα Γ

Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: μέτρια

Μετατροπή σχέσεων: το «#» γίνεται protected, το «−» private, το «+» public. Η κατευθυνόμενη συσχέτιση 1–1 Customer→ShoppingCart δίνει στον Customer ένα πεδίο τύπου ShoppingCart. Η σύνθεση 1–0..* ShoppingCart◆→CartItem δίνει στο ShoppingCart συλλογή CartItem (τα μέρη δημιουργούνται και καταστρέφονται μαζί με το σύνολο), άρα προσθέτω και μέθοδο addItem.

import java.util.ArrayList;
import java.util.List;

public class Customer {
    protected String customerId;
    protected String name;
    private ShoppingCart cart;          // association 1 -> 1

    public Customer(String customerId, String name) {
        this.customerId = customerId;
        this.name = name;
        this.cart = new ShoppingCart();
    }
    public ShoppingCart getCart() { return cart; }
}

public class ShoppingCart {
    private double totalAmount;
    private List<CartItem> items = new ArrayList<>();   // composition 1 -> 0..*

    public void addItem(CartItem item) { }
    public void removeItem(String itemId) { }
    public double calculateTotal() { return 0; }
}

public class CartItem {
    private String itemId;
    private double price;
    private int quantity;

    public void updateQuantity(int quantity) { }
}

✔ Επιβεβαίωσε · ✖ Βρήκα λάθος


✖ Βρήκα λάθος στη μεταγραφή