Εισαγωγή στην Τεχνολογία Λογισμικού

useoreganoSecurity

Jun 16, 2012 (5 years and 2 months ago)

370 views

Εισαγωγή στην
ΤεχνολογίαΛογισμικού
Τεχνολογία

Λογισμικού
Γιάννης Σμαραγδάκης
ίάίύ
Γιατ
ί
μελετ
ά
με την Τεχνολογ
ί
α Λογισμικο
ύ

??? ?????1???????)?#?Œ???!?$?0???Œ?.???2? ?*

??? ?????1???????)

υπάρχει

παντού
–σε όλους τους τεχνικούς τομείς (π.χ. αεροδιαστημική)

σε όλε
ς
τι
ς
επιστ
ήμ
ε
ς

ςςήμς
–στον πολιτισμό και την τέχνη (π.χ. βιβλιοθήκες,
μουσική)

μεγάλο τμήμα της παγκόσμιας οικονομίας, σημαντικά
υποσχόμενος τομέας στην Ελλάδα

ΑΛΛΑείναιπολύδύσκολονααναπτυχθείσωστά
ΑΛΛΑ

είναι

πολύ

δύσκολο

να

αναπτυχθεί

σωστά
–5-10 LOC/ανθρωποημέρα;
–$100Ks/LOC ?
–προθεσμίες που δεν τηρούνται, bugsμε τεράστιο
κόστος (π.χ.;)
Ενδιαφέρουσες ερωτήσεις
• Τι σημαίνει ποιότητα στο λογισμικό;
Τιείναισφάλμα;

Τι

είναι

σφάλμα;
• Μπορεί να αποδειχθεί η απουσία σφαλμάτων;
• Πώς μπορεί να προσθέτουμε εργαζόμενους και το
αποτέλεσμα να χειροτερεύει;
• Τι είναι τελικά το λογισμικό; Με τι άλλο μοιάζει;

Βασίζεταιτολογισμικόσεκάποιαεπιστήμη;Έχει

Βασίζεται

το

λογισμικό

σε

κάποια

επιστήμη;

Έχει

νόμους;
Προσεγγίσεις στα προβλήματα
του λο
γ
ισ
μ
ικού
γμ
• Περισσότερο προσωπικό
--χάος, πιο πολλά προβλήματα
• «Καλύτερες» γλώσσες προγραμματισμού
--κακά προγράμματα μπορεί να γραφτούν σε
όλες τις γλώσσες
• Σχεδιασμός πριν τη συγγραφή κώδικα
--πώς εξασφαλίζεται η ποιότητα του σχεδιασμού;
• Α
ρχή

μ
ε π
ρ
οδια
γρ
α
φ
έ
ς
απαιτ
ή
σεων
ρχήμργρφςή
--αλλά πάντα αλλάζουν, και μετά;
• Πιο πλ
ήρ
ει
ς
δοκι
μ
ασίε
ς
ήρςμς
--αν η ποιότητα δεν υπάρχει, δεν προστίθεται
με περισσότερες δοκιμασίες
Άλλες προσεγγίσεις
• Καλύτερα εργαλεία
--... όπω
ς
και δοκι
μ
ασίε
ς
/
γ
λώσσε
ς
ςμςγς
• Καλύτερες διαδικασίες
--
πότεείναιμιαδιαδικασία
«
καλή
»
;
πότε

είναι

μια

διαδικασία

καλή;
• Καλύτερη εκπαίδευση
--
τιναδιδάξουμε;
τι

να

διδάξουμε;
“There is no Silver Bullet” --Fred Brooks
Με τι μοιάζει το λογισμικό;
• Φύση; Πολυπλοκότητα; Μέγεθος; Ευκολία αλλαγής;
Ανάγκη συντήρησης;
• Παρόμοια άλλα προϊόντα; Ομοιότητες/διαφορές;
–οικίσμα;
–νόμοι/συνθήκες;
–ταινίες;

συνταγές μαγειρικής;
Τι σημαίνει για ένα προϊόν να είναι «καλό»;
Ικανοποιείτιςανάγκεςόλωντωνσυμμετόχων
•Τύποι συμμετόχων (stakeholders):
–χρήστες

?Œ?!? ???!?.?????.?2???1?2???", δοκιμαστές
–πελάτες (τι διαφορά από το χρήστη;)
τελικοίπελάτεςκοινωνία

τελικοί

πελάτες

κοινωνία
–επενδυτές

?????Œ.
?????Œ.
ϊό
Προ
ϊό
ν
∆ιαφορετικές απαιτήσεις
•Χρήστης:
–Θέλει πολλές λειτουργίες
Θέλειναείναιεύκοληηδουλειάτου

?,?????0??

να

είναι

εύκολη

η

δουλειά

του
•Αρχιτέκτονας:
–Θέλει όλα τα κομμάτια να ταιριάζουν
Θέλίύλλλή

?,????
?0?? να ε
ί
ναι ε
ύ
κο
λ
η η α
λλ
αγ
ή
–Θέλει να είναι εύκολο να δείξει ότι κάνει αυτό που πρέπει
•Πελάτης:
Θέόό

Θέ
λει μικρ
ό
κ
ό
στος
–Θέλει ορατή και σταθερή πρόοδο
•Τελικοί πελάτες/κοινωνία:

Θέλουν να είναι βέβαιοι ότι δεν θα προκληθεί ζημιά
–Θέλουν να δουν ότι παρέχονται οι επιθυμητές υπηρεσίες
•Επενδυτής
–Θέλει απόδειξη ότι θα έχει κέρδος
∆ιαφορετικοί συμμετέχοντες έχουν
διαφορετικέςόψεις
διαφορετικές

όψεις
Εξωτερική όψη: πελάτες, επενδυτές,
κοινωνία
κοινωνία
Εσωτερικές όψεις: αρχιτέκτονες,
διοικητικοί
προγραμματιστές
διοικητικοί
,
προγραμματιστές
Ένα προϊόν λογισμικού έχει
πολλών τύπων εξαρτήματα/τμήματα
απαιτήσεις
δοκιμασίες
σχέδια
κώδικας
κώδικας
όίύ
Πρ
ό
κληση Τεχνολογ
ί
ας Λογισμικο
ύ
•Πώς να ικανοποιήσουμε όλες τις απαιτήσεις
•Με μικρό κόστος
•Σε αποδεκτό χρονικό διάστημα
•... και να είμαστε σίγουροι ότι το κάναμε
Τα κυριότερα παραδοτέα/προϊόντα
μιας διεργασίας ανάπτυξης λογισμικού
•Άρθρωση του προβλήματος, κατανόηση
(
π
ροδ
ι
αγραφές

α
π
α
ιτ
ήσεω
ν
)
(
?!? ?/?.???!?.?3???"?.?.???1?0?&
)
–Ποιο πρόβλημα λύνουμε;
•Μο
ρφ
οποί
η
σ
η
τ
ης
λύσ
ης

(
α
ρχ
ιτεκτονικ
ή
)
?!?3???????"???"
(
?!?$??
)
–Πώς ίσως λύνεται το πρόβλημα
•Ανα
γ
ω
γή
τ
ης
λύσ
ης
στ
η
ν π
ρ
ά
ξη

(
σ
χ
εδίασ
η
)
?????????"???"???!????
(
?$??
)
–Πώς θα λύσουμε πράγματι το πρόβλημα;
•Υλοποίηση της λύσης(συγγραφή κώδικα)
•Σχέσεις μεταξύ των παραπάνω
•Αποδεί
ξ
ει
ς
συνέπεια
ς
των πα
ρ
απάνω
ξςςρ
(ανάλυση/δοκιμασία -testing)
Σχέσεις μεταξύ τμημάτων/εξαρτημάτων
•Π.χ.
–Τα αποτελέσματα δοκιμασιών είναι αυτά που
περιμένουμε
περιμένουμε
–Ο κώδικας υλοποιεί το σχεδιασμό

?????/? ???????.?1???0?"???.???*?Œ?2? ?#???2???"?.?Œ?.???2???1?0???"?$?!???1???"
????

δοκιμασίες

καλύπτουν

τις

απαιτήσεις

χρήσης
•Αυτές οι σχέσεις ορίζονται νωρίς σε ένα έργο λογισμικού

?.?#?2??
?"
και
μ
όνο ο
ρ
ί
ζ
ουν πότε ένα π
ρ
οϊόν είναι
ςμρζρ
«σωστό»
•Οι συμμετέχοντες βλέπουν την επιβεβαίωση των
σχέσεωνμεταξύτμημάτωντουλογισμικού
σχέσεων

μεταξύ

τμημάτων

του

λογισμικού
Προδιαγραφή απαιτήσεων
Σχεδιασμός
Υψηλό επίπεδο
συνεπείς
σχέσεις
συνεπείς
σχέσεις
Χαμηλό
επίπεδο
σχέσεις
επίπεδο
συνεπείς
σχέσεις
Πλάνοδοκιμών
Κώδικας
Βασική έμφαση της τεχνολογίας λογισμικού
•Πώς να περιγράψουμε προϊόντα;
τασυστατικάτους

τα

συστατικά

τους
–τη σχέση και αλληλεπίδρασή τους

Ποιεςδιαδικασίεςπρέπειναακολουθηθούνγια
Ποιες

διαδικασίες

πρέπει

να

ακολουθηθούν

για

να αναπτύξουμε τέτοια προϊόντα;
–και να εξασφαλίσουμε την «ποιότητά» τους εν τέλει;
(δίδδί)

(
παρα
δ
ε
ί
γματα
δ
ια
δ
ικασ
ί
ας;
)
•Πώς να αναπτύξουμε και να εξελίξουμε προϊόντα
με:
με:
–αποδεκτό κόστος
–βελτιωμένη ποιότητα
Τεχνολογία λογισμικού = Προϊόντα + ∆ιαδικασίες
Ηδιαδικασία«καταράκτη»
Η

διαδικασία

«καταράκτη»
Απαιτ
ή
σει
ς
ής
Αρχιτεκτονική
Σχεδιασμός
Κώδικας
∆οκιμασία
∆οκιμασία
Συντήρηση
Πιοακριβήςδιαδικασίακαταράκτη
Πιο

ακριβής

διαδικασία

καταράκτη
Απαιτήσεις
Αρχιτεκτονική
Σχεδιασμός
Κώδικας
∆οκιμασία
∆οκιμασία
Συντήρηση
ήήθή
Βασικ
ή
αρχ
ή
του μα
θή
ματος
•Όλες οι στρατηγικές ανάπτυξης πρέπει να
επιλεγούν με γνώμονα
τηδοκιμασίακαιεπαλήθευση

?2??

δοκιμασία

και

επαλήθευση
–τη δυνατότητα συντήρησης του λογισμικού
Προδιαγραφές Απαιτήσεων
Γιατί π
ρ
οδια
γρ
ά
φ
ου
μ
ε απαιτ
ή
σει
ς;
•Αποσαφηνίζονται οι ανάγκες πριν αρχίσει η σχεδίαση
οπελάτηςξέρειτιθέλειαλλάσυνήθωςδενξέρειτιείναι
ργρφμής;

?

πελάτης

ξέρει

τι

θέλει

αλλά

συνήθως

δεν

ξέρει

τι

είναι

εφικτό
•Αποσα
φη
νί
ζ
εται
η
λειτου
ργ
ικότ
η
τα που θα πα
ρ
έ
χ
εται
φηζηργηρχ
•Αποσαφηνίζεται ο χειρισμός ανεπιθύμητων
περιστάσεων
Πδά
λίβλλί

Π
ρο
δ
ιαγρ
ά
φονται μη-
λ
ειτουργικο
ί
και περι
β
α
λλ
οντικο
ί

περιορισμοί που πρέπει να ικανοποιηθούν
•Οι π
ρ
οδια
γρ
α
φ
έ
ς
καθοδ
ηγ
ούν π
ρ
ο
γρ
α
μμ
ατιστέ
ς,

ργρφςηγργρμμς,
δοκιμαστές, συντηρητές, κλπ.
•Τεκμηριώνεται η πιθανή χρήση και οι χρήστες
•...
Μια επιτυχημένη π
ρ
οδια
γρ
α
φή
απαιτ
ή
σεων
είναι ένα
ργρφήή
ΣΥΜΒΟΛΑΙΟ που περιγράφει αποτελεσματικά ΤΙ
θέλουν όλοι οι
συμμέτοχοι του έργου λογισμικού
∆ιάφορα στοιχεία προδιαγραφών απαιτήσεων
Παράδειγμα:
•Εισαγωγή
•Λειτουργικές απαιτήσεις
•Περιβάλλον
•Επίδοση

?ù???!?????0???.

?ù???!?????0???.
•Χειρισμός λαθών

Εξωτερικήασφάλεια
Εξωτερική

ασφάλεια

⡳散畲楴礩
•Εσωτερική ασφάλεια
(safety)
(safety)