ΕΡΩΤΗΣΕΙΣ ΑΥΤΟΑΞΙΟΛΟΓΗΣΗΣ

Ερωτήσεις Ανάπτυξης

Πώς ορίζεται το «λογισμικό»;

Απάντηση
Λογισμικό ορίζεται μια διατεταγμένη ακολουθία οδηγιών για την αλλαγή της κατάστασης του υλικού του υπολογιστή σε συγκεκριμένη επιθυμητή κατάσταση. Ο όρος «λογισμικό» (Software) βρίσκεται σε αντιδιαστολή με τον όρο «υλικό» (Hardware) του υπολογιστή, ο οποίος περιγράφει τις φυσικές διατάξεις και διασυνδέσεις που απαιτούνται για να αποθηκευτεί και να εκτελεστεί το λογισμικό.

Τι είναι ο «κώδικας μηχανής»;

Απάντηση
Ο κώδικας μηχανής είναι μια δυαδική αναπαράσταση των οδηγιών που στέλνονται στον επεξεργαστή, έτσι ώστε να αλλάξει την κατάσταση του υπολογιστή από την προηγούμενη σε μια νέα, επιθυμητή κατάσταση. Είναι ειδικά προσαρμοσμένος για συγκεκριμένο τύπο επεξεργαστή.

Τι ονομάζεται «μεταφορά κώδικα»;

Απάντηση
Μεταφορά κώδικα (Porting) σε συγκεκριμένη πλατφόρμα ονομάζεται η διαδικασία μετατροπής του κώδικα ενός λογισμικού από την πλατφόρμα λογισμικού στην οποία σχεδιάστηκε, έτσι ώστε να παραχθεί κώδικας εκτελέσιμος, στη νέα πλατφόρμα.

Τι είναι η συμβολική γλώσσα (Assembly);

Απάντηση
Η συμβολική γλώσσα (Assembly) είναι μια χαμηλού επιπέδου γλώσσα προγραμματισμού, δηλαδή μια γλώσσα πολύ κοντά στον κώδικα μηχανής και στο υλικό του υπολογιστή. Κάθε οικογένεια επεξεργαστών έχει τη δική της συμβολική γλώσσα, η οποία δίνεται συνήθως από τον κατασκευαστή της. Η συμβολική γλώσσα μεταφράζεται σε κώδικα μηχανής μέσω ενός συμβολομεταφραστή (Αssembler).

Τι είναι το λειτουργικό σύστημα;

Απάντηση
Το λειτουργικό σύστημα είναι ένα σύνολο λογισμικών υπεύθυνων για τη διαχείριση και το συντονισμό των εργασιών, καθώς και την κατανομή των διαθέσιμων πόρων του υπολογιστή. Το λειτουργικό σύστημα αναλαμβάνει τη διαχείριση του υλικού του υπολογιστή και απαλλάσσει το λογισμικό εφαρμογών από τον επίπονο χειρισμό του υλικού.

Πώς ορίζεται η «γλώσσα προγραμματισμού»;

Απάντηση
Γλώσσα προγραμματισμού ορίζεται μια τεχνητή γλώσσα που χρησιμοποιείται για τον έλεγχο ενός υπολογιστή, επειδή προσφέρει τη δυνατότητα της ακριβούς διατύπωσης αλγόριθμων, καθώς και της οργάνωσης και της διαχείρισης πληροφοριών. Κάθε γλώσσα προγραμματισμού αποτελείται από ένα σύνολο συντακτικών και εννοιολογικών κανόνων, οι οποίοι ορίζουν τη δομή και το νόημα των προτάσεών της.

Πότε μια γλώσσα προγραμματισμού ονομάζεται «τυπική»;

Απάντηση
Μια γλώσσα προγραμματισμού ονομάζεται «τυπική» όταν ορίζεται από ακριβείς μαθηματικούς τύπους ή από τύπους που μπορεί να επεξεργαστεί μια μηχανή. Ως εκ τούτου, μια τυπική γλώσσα προγραμματισμού έχει τη δύναμη να εκφράσει όλους τους πιθανούς αλγόριθμους.

Αναφέρατε τις διαφορές ανάμεσα στο λειτουργικό σύστημα και στο λογισμικό εφαρμογών.

Απάντηση
Το λειτουργικό σύστημα είναι ένα σύνολο προγραμμάτων που ελέγχουν και συντονίζουν τις λειτουργίες του υπολογιστή. Παράλληλα λειτουργούν ως ένα είδος λογικής διαμεσολάβησης μεταξύ εφαρμογών και υλικού, και προσφέρουν στις εφαρμογές μια αφαιρετική αναπαράσταση του υλικού. Το λογισμικό εφαρμογών είναι ένα πρόγραμμα που καλύπτει συγκεκριμένες ανάγκες των χρηστών, αλλά για τη λειτουργία του απαιτείται η διαμεσολάβηση του λειτουργικού συστήματος.

Με ποιους τρόπους ο πηγαίος κώδικας μετατρέπεται σε εκτελέσιμο κώδικα;

Απάντηση
Η μετατροπή του πηγαίου κώδικα σε εκτελέσιμο γίνεται μέσω της μετάφρασης ή της διερμηνείας. Στην περίπτωση της μετάφρασης, ένα ειδικό πρόγραμμα, ο μεταφραστής (Compiler), ελέγχει ένα πρόγραμμα και, εάν αυτό δεν παρουσιάζει κάποιο συντακτικό λάθος, παράγει ένα αρχείο εντολών, το οποίο διασυνδέεται μέσω του συνδετή (Linker) με τις βιβλιοθήκες του λειτουργικού συστήματος. Έτσι παράγεται ο εκτελέσιμος κώδικας. Στην περίπτωση της διερμηνείας, χρησιμοποιείται ο διερμηνευτής (Interpreter), ο οποίος ελέγχει μια εντολή και, εάν αυτή είναι συντακτικά ορθή, την εκτελεί. Στη συνέχεια προχωρά στην επόμενη εντολή κ.ο.κ.

Αναφέρατε τις διαφορές μεταξύ των συμβολικών γλωσσών και των γλωσσών ανώτερου επιπέδου.

Απάντηση
Οι γλώσσες ανώτερου επιπέδου πλεονεκτούν σε σχέση με τις συμβολικές, γιατί προσφέρουν: (α) απλούστερο και πιο κοντά στον «ανθρώπινο» τρόπο διατύπωσης των προβλημάτων, (β) ανεξαρτησία από τον τύπο του υπολογιστή, άρα και δυνατότητα μεταφερσιμότητας, και (γ) ευκολία εκμάθησης και εκπαίδευσης. Επιπλέον, οι συμβολικές γλώσσες μειονεκτούν, γιατί: (α) παραμένουν συνδεδεμένες στενά με την αρχιτεκτονική του υπολογιστή, (β) δεν διαθέτουν εντολές πιο σύνθετων λειτουργιών, οδηγώντας έτσι σε μακροσκελή προγράμματα, που είναι δύσκολο να γραφούν και, κυρίως, να συντηρηθούν, και (γ) δεν μπορούν να μεταφερθούν σε διαφορετικό υπολογιστή, ακόμα και του ίδιου κατασκευαστή.

Ποια γλώσσα προγραμματισμού σχετίζεται άμεσα με τον υπολογιστή και είναι κατανοητή από αυτόν;

Απάντηση
Η μοναδική γλώσσα που γίνεται άμεσα κατανοητή από τον υπολογιστή είναι ο κώδικας (γλώσσα) μηχανής.

Αναφέρατε τις τέσσερις γενιές γλωσσών προγραμματισμού.

Απάντηση
    1η γενιά (περίπου το 1950): Γλώσσες χαμηλού επιπέδου, όπως η Assembly.
    2η γενιά (τέλη δεκαετίας του 1950-αρχές δεκαετίας του 1960): Θεμελιώδεις γλώσσες, όπως οι FORTRAN, ALGOL, COBOL.
    3η γενιά (δεκαετία του 1960-δεκαετία του 1980): Δομημένες γλώσσες, όπως οι ADA, C, PROLOG.
    4η γενιά (μετά τη δεκαετία του 1980): Γλώσσες πολύ υψηλού επιπέδου, όπως οι SQL, Java, Javascript, C, C++, C#, PHP, Ruby, Perl κ.ά.

Αναφέρατε τις τρεις βασικές κατηγορίες λογισμικού και δώστε σύντομο ορισμό της καθεμίας από αυτές.

Απάντηση
Το λογισμικό υποδιαιρείται σε λογισμικό συστήματος, λογισμικό προγραμματισμού και λογισμικό εφαρμογών. Συγκεκριμένα:
    Το λογισμικό συστήματος είναι ένα σύνολο από τμήματα λογισμικού που έχουν σχεδιαστεί ώστε να ελέγχουν το υλικό μέρος του υπολογιστή και να προσφέρουν μια πλατφόρμα στην οποία να εκτελούνται τα λογισμικά εφαρμογών.
    Η γλώσσα προγραμματισμού είναι μια τεχνητή γλώσσα, που χρησιμοποιείται για τον έλεγχο ενός υπολογιστή, επειδή προσφέρει δυνατότητα ακριβούς διατύπωσης αλγόριθμων, όπως επίσης οργάνωσης και διαχείρισης πληροφοριών.
    Το λογισμικό εφαρμογών είναι ένα σύνολο από προγράμματα υπολογιστών τα οποία έχουν σχεδιαστεί για να εκτελούν συγκεκριμένες λειτουργίες, ώστε να καλύπτουν συγκεκριμένες ανάγκες των χρηστών.

Εξηγήστε τη διαφορά μεταξύ των διαδικαστικών και των συναρτησιακών γλωσσών προγραμματισμού και αναφέρατε μερικές γλώσσες των κατηγοριών αυτών.

Απάντηση
Στις διαδικαστικές γλώσσες το πρόγραμμα είναι οργανωμένο σε διαδικασίες (Procedures), δηλαδή σύνολα εντολών που περιγράφουν αλγόριθμους, ενώ στις συναρτησιακές γλώσσες οι υπολογισμοί εκφράζονται ως εφαρμογές μαθηματικών συναρτήσεων. Παραδείγματα διαδικαστικών γλωσσών είναι οι Pascal, C, FORTRAN, BASIC, ALGOL κ.ά. Παραδείγματα συναρτησιακών γλωσσών είναι οι Lisp, OCaml, Haskell, ML, Miranda κ.ά.

Ποια είναι η κυριότερη διαφορά ανάμεσα στις διαδικτυακές εφαρμογές που βασίζονται σε φυλλομετρητή και σε αυτές που βασίζονται σε πρόγραμμα πελάτη;

Απάντηση
Η κυριότερη διαφορά ανάμεσα στις διαδικτυακές εφαρμογές που βασίζονται σε φυλλομετρητή και σε αυτές που βασίζονται σε πρόγραμμα πελάτη είναι ότι οι πρώτες εκτελούνται με την ύπαρξη ενός φυλλομετρητή (Browser). Ο φυλλομετρητής είναι ένα πρόγραμμα γενικού σκοπού, που βρίσκεται εγκατεστημένο σε κάθε υπολογιστή ή ανακτάται πολύ εύκολα από το διαδίκτυο. Αντίθετα, οι δεύτερες απαιτούν την εγκατάσταση και χρήση ειδικού προγράμματος πελάτη, το οποίο αλληλεπιδρά με τον server, μέσω προτυποποιημένων διαδικτυακών πρωτοκόλλων. Η πρώτη λύση προσφέρει καλύτερη γενίκευση και έχει μικρότερες απαιτήσεις υποστήριξης, ενώ η δεύτερη είναι καλύτερα προσαρμοσμένη στις ανάγκες της εφαρμογής.

Τι είναι οι «κινητές εφαρμογές» (Μobile Αpps);

Απάντηση
Οι κινητές εφαρμογές είναι ένα είδος λογισμικού που σχεδιάστηκε για να τρέξει σε μια φορητή συσκευή, όπως ένα smartphone ή ένα tablet. Είναι γενικά μικρές, ατομικές μονάδες λογισμικού, με περιορισμένη λειτουργία.

Αναφέρετε εν συντομία τις φάσεις της διαδικασίας ανάπτυξης λογισμικού.

Απάντηση
Οι φάσεις της διαδικασίας ανάπτυξης λογισμικού είναι:
    H καταγραφή απαιτήσεων (λειτουργικών και μη λειτουργικών).
    Η ανάλυση του λογισμικού με διάφορα μοντέλα παράστασης λογισμικού, λαμβάνοντας υπόψη τις απαιτήσεις.
    Ο σχεδιασμός του λογισμικού σύμφωνα με την προσέγγιση της δομημένης σχεδίασης.
    Η κωδικοποίηση, στην οποία παράγεται ο πηγαίος κώδικας του λογισμικού.
    Οι δοκιμές / έλεγχος, για την ύπαρξη τυχόν ατελειών στο παραχθέν λογισμικό και την τήρηση των προδιαγαφών κατά τη σχεδίασή του.
    Η αποδοχή / επικύρωση, στην οποία προσφέρονται υπηρεσίες υποστήριξης στον πελάτη.

Πώς ορίζονται τα «μοντέλα κύκλου ζωής λογισμικού»; Ποια είναι τα συνηθέστερα μοντέλα κύκλου ζωής λογισμικού;

Απάντηση
Τα μοντέλα κύκλου ζωής λογισμικού είναι εναλλακτικές μεθοδολογίες κατασκευής και συντήρησης λογισμικού. Με βάση αυτά τα μοντέλα, ο παραγωγός λογισμικού καταφέρνει να επιτύχει υψηλότερη παραγωγικότητα, μείωση των σφαλμάτων, μείωση του ρίσκου και κόστους. Τα συνηθέστερα μοντέλα κύκλου ζωής λογισμικού είναι:
    το Μοντέλο του Καταρράκτη,
    το Μοντέλο της Ανάπτυξης Πρωτοτύπου,
    το Μοντέλο της Λειτουργικής Επαύξησης,
    το Σπειροειδές Μοντέλο,
    το Μοντέλο του Πίδακα,
    το Ευέλικτο Μοντέλο.

Αναφέρατε τις διαφορές ανάμεσα στο Μοντέλο του Καταρράκτη και στο Μοντέλο της Ανάπτυξης Πρωτοτύπου.

Απάντηση
Στο Μοντέλο της Ανάπτυξης Πρωτοτύπου κατασκευάζονται διαδοχικά τμήματα του λογισμικού, τα οποία ονομάζονται πρωτότυπα, με ολοένα και περισσότερα χαρακτηριστικά. Αντίθετα, στο Μοντέλο του Καταρράκτη το σύστημα λογισμικού αναπτύσσεται ακολουθιακά, δηλαδή περνά ολόκληρο από διαδοχικές επιμέρους φάσεις ανάπτυξης.

Περιγράψτε τον τρόπο ανάπτυξης λογισμικού σύμφωνα με το μοντέλο ΕΛ / ΛΑΚ.

Απάντηση
Το μοντέλο ΕΛ / ΛΑΚ στηρίζεται απόλυτα στο διαδίκτυο. Συνήθως, μια μικρή ομάδα συντονιστών αναλαμβάνει να θέσει τις προτεραιότητες και τις κατευθύνσεις για τον αρχικό σχεδιασμό και την περαιτέρω εξέλιξη της εφαρμογής. Οι συντονιστές και οι προγραμματιστές χρησιμοποιούν το διαδίκτυο για να συνεργαστούν, καθώς μπορεί να βρίσκονται σε διαφορετικές τοποθεσίες. Κάθε προγραμματιστής έχει την ελευθερία να προσθέσει στην αρχική εφαρμογή λειτουργίες που αυτός θεωρεί χρήσιμες, είτε για τις ανάγκες του είτε γενικότερα. Αν οι συντονιστές θεωρήσουν χρήσιμες τις προσθήκες αυτές, τότε τις ενσωματώνουν στη βασική διανομή της εφαρμογής. Ο ποιοτικός έλεγχος μιας εφαρμογής ΕΛ / ΛΑΚ πραγματοποιείται συνήθως από εθελοντές, οι οποίοι αναφέρουν στους προγραμματιστές τα προβλήματα που διαπιστώνουν.

Τι προβλέπει η άδεια GPL;

Απάντηση
Στην GPL δεν επιβάλλεται κανένας περιορισμός όσον αφορά την αντιγραφή και τη διανομή του λογισμικού, αλλά τίθενται συγκεκριμένοι όροι που πρέπει να τηρούνται. Ειδικότερα:
    Ο πηγαίος κώδικας πρέπει να είναι εύκολα προσβάσιμος από το χρήστη.
    Η GPL πρέπει να διανέμεται μαζί με το λογισμικό.
    Οι τροποποιήσεις επιτρέπονται εφόσον δηλώνεται η αλλαγή που έχει γίνει, πότε και από ποιους.
    Οι παράγωγες εργασίες επιτρέπονται, αλλά πρέπει να δημοσιευθούν πάλι κάτω από την GPL.
Ο τελευταίος από τους παραπάνω όρους καθιστά έως ένα βαθμό την GPL μη φιλική στις επιχειρήσεις, καθώς μια επιχείρηση λογισμικού θα πρέπει να αποκαλύψει τον πηγαίο κώδικά της, εάν έχει χρησιμοποιήσει μέρη του λογισμικού GPL για να τον αναπτύξει.

Αναφέρατε τα πλεονεκτήματα του ΕΛ / ΛΑΚ.

Απάντηση
Το ΕΛ / ΛΑΚ παρουσιάζει τα εξής πλεονεκτήματα:
    Έχει αυξημένη ποιότητα και αξιοπιστία, καθώς ο κώδικας του λογισμικού ελέγχεται, διορθώνεται και επαληθεύεται από μεγάλο αριθμό προγραμματιστών.
    Έχει μικρές απαιτήσεις σε υλικό, επειδή προσαρμόζεται εύκολα από το χρήστη, ανάλογα με τις ανάγκες του και τις δυνατότητες του υπολογιστή του.
    Βασίζεται σε ανοιχτά πρότυπα, γεγονός που εξασφαλίζει τη διαλειτουργικότητα, δηλαδή τη δυνατότητα να λειτουργεί με άλλα συστήματα, χωρίς να απαιτείται κάποια ειδική ενέργεια από το χρήστη. Επίσης, ο χρήστης μπορεί να αντικαταστήσει το λογισμικό που χρησιμοποιεί με κάποιο άλλο, χωρίς να πρέπει να δημιουργήσει από την αρχή ή να μετατρέψει τα δεδομένα του.
    Έχει χαμηλότερο κόστος κτήσης, καθώς ο χρήστης δεν χρειάζεται να πληρώνει για την αγορά, την ανανέωση ή την επέκταση αδειών χρήσης λογισμικού.
    Παρουσιάζει αυξημένη ασφάλεια, επειδή ο κώδικάς του είναι ανοιχτός και ελεύθερα διαθέσιμος, γεγονός που επιτρέπει την ανίχνευση και τη διόρθωση λαθών από πολλούς προγραμματιστές.
    Υποστηρίζει πλήρως τη διαφάνεια, επειδή η ελεύθερη διάθεση του πηγαίου κώδικα δίνει τη δυνατότητα σε κάθε ενδιαφερόμενο πολίτη να μελετήσει τον τρόπο με τον οποίο γίνονται η επεξεργασία και η αποθήκευση των δεδομένων.

Αναφέρατε μερικές διανομές του Linux.

Απάντηση
Debian, RedHat, SuSE και Mandriva, Ubuntu, Knoppix, Slackware, Fedora, SuSe, Gentoo κ.ά.