0 Lab 05
0 Lab 05
1
Retele de calculatoare – Informatica anul 3 (2019-2020)
2.3. CRC-32 (2_CRC_Error [Link]; 3_CRC_exercises.pdf)
Valorile CRC-32 reprezinta o modalitate foarte eficienta de verificare a integritatii datelor.
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
Exemplu (Anexa 3 – pag.33): Verificarea integritatii unui fisier. Pentru a detecta daca un fisier a fost
corupt in cadrul procesului de transmisie, emitatorul calculeaza o semnatura digitala pe care o trimite
impreuna cu fisierul. Destinatarul calculeaza si el semnatura fisierului, si daca aceasta se potriveste cu
valoarea calculata de emitator, atunci fisierul nu a suferit modificari. CRC inseamna Cyclic
Redundancy Check iar 32 indica faptul ca suma de verificare este pe 32 de biti. Probabilitatea ca doua
fisiere sa aiba aceiasi suma de verificare este de 1 la 232 = 4.294967E+09. Din acest motiv CRC-32
poate fi folosit si pentru a identifica fisiere duplicat. CRC-ul se bazeaza pe operatia de impartire intr-un
inel comutativ, numit inelul polinoamelor peste intregii modulo 2, adica polioamele care au coeficientii
doar de un bit. Orice sir de biti poate fi vazut ca fiind coeficientii unui astfel de polinom , iar pentru a
afla codul CRC asociat se imparte polinomul cu un alt polinom, iar coeficentii polinomului rest sunt
chiar bitii ce reprezinta codul CRC.
Exercitiu (recapitulare):
Algoritm:
1. Se genereaza tabela CRC-32 folosind un polinom specific.
2. Se foloseste o functie de calcul CRC care executa un XOR intre un octet din datele care trebuie
verificate si valoarea curenta CRC, obtinandu-se astfel o noua valoare CRC.
3. Algoritmul CRC citeste primul octet din datele ce urmeaza sa fie verificate si apeleaza functia CRC
care intoarce valoarea CRC pentru octetul respectiv. Se apeleaza apoi functia CRC cu urmatorul octet
si valoarea CRC calculata anterior. Dupa al doilea apel, valoarea CRC reprezinta suma de verificare
pentru primii doi octeti. Se apeleaza functia CRC pana cand toti octetii din fisier au fost procesati.
Ultima valoare pentru CRC este suma de verificare pentru datele initiale.
2
Retele de calculatoare – Informatica anul 3 (2019-2020)
Metoda “hardware” de calcul pentru CRC foloseste operatii pe biti. Ca o alternativa la calculul
sumei de verificare bit cu bit, se poate utiliza o tabela cu valori precalculate care permite efectuarea a 8
operatii pe biti simultan. Pentru CRC-32, tabela este constituita din 256 de elemente de tip Double
Word (4 octeti). Un DWORD poate fi reprezentat ca un intreg pe 32 de biti cu sau fara semn (in
implementarea Java se poate folosi tipul int).
Un anumit CRC este definit prin polinomul folosit pentru calcularea lui. Pentru a calcula un
CRC pe n biti este necesar un polinom de gradul n de forma xn + ... + 1. Acesta este reprezentat
pe n+1 biti, dar cum termenul xn este implicit se iau in considerare doar ultimii n biti. De obicei
coeficientii polinomului se reprezinta hexazecimal, astfel pentru standardul CRC-16,
x16+x15+x2+1, va fi reprezentat in hexazecimal ca 0x8005.
Cel mai intalnit CRC este CRC-32, fiind folosit printre altele de Ethernet, FDDI (Fiber
Distributed Data Interface), PKZIP, WinZip si PNG (Portable Network Graphics). Polinomul
lui poate fi scris ca fiind 0x04C11DB7. Mai jos este lista cu cele mai folosite CRC-uri si
polinomele lor asociate:
CRC-ul este util in detectarea erorilor, dar nu si pentru verificarea integritatii datelor deoarece
cunoscandu-se polinomul folosit datele pot fi intentionat modifcate astfel incat CRC-ul sa
ramana neschimbat !!!!!!!!!!!. Pentru integritate: MD5...MD6; SHA
CRC-32 - Implementare
1. XOR intre primul octet de date si octetul mai putin semnificativ al valorii CRC pentru a obtine un
index.
2. Deplasare la dreapta fara semn cu 8 biti a valorii CRC.
3. XOR intre valoarea CRC si valoarea TabelaCRC[index]
4. Se repeta pasii de la 1 la 3 pentru toti octetii
2.4. Clase de adrese IPv4
2.4.1. Adresa IP este exprimata pe 32 biţi (în versiunea IPv4) / 128 biti in versiunea IpV6 si conţine
suficiente informaţii pentru a identifica în mod unic o reţea sau o gazdă aparţinând unei reţele. Toate
dispozitivele si protocoalele de pe nivelul retea - modelul OSI. / nivelul Internet – modelul TCP/IP
folosesc adrese IP. Formatul adresei corespunde notatiei cu punct zecimal. Aceasta notatie imparte o
adresa IP in 4 campuri de cate 8 biti fiecare, si specifica valoarea fiecarui camp ca un numar zecimal.
Campurile sunt separate prin puncte. Formate: in zecimal (cu punct zecimal); binar.
Orice adresã al cãrei prim octet este 127 este o adresã de buclã, folositã la diagnosticare si testare. Un
mesaj transmis unei adrese IP al cãrei prim octet are valoarea 127 este returnat expeditorului. 255 este
un octet ce indicã o difuzare în reteaua localã (broadcast) – expedierea multiplã a unui mesaj. Primul
octet nu poate avea o valoare mai mare decât 223. Celelalte adrese sunt rezervate pentru anunturi în
retele si pentru scopuri [Link] octet al unui identificator de gazdã nu poate fi 0 sau 255.
Adrese private: [Link]–[Link] [Link] /8
[Link]–[Link] [Link] /12
[Link]–[Link] [Link] /16
Obs: [Link] to [Link]* (65,536 possible IP addresses) [Link] /16
* The range, 169.254.x.x, is a special IP address range that is reserved for devices to self-assign an
address. You generally do not manually assign addresses in this range.
2.4.3. Masca de subretea
Este o machetã de biti ce defineste portiunea din adresa IP ce reprezintã NetID. În plus, masca de
subretea permite subalocarea adresei de retea (subnetting). Subalocarea înseamnã împãrtirea unei
adrese IP în sensul folosirii acesteia în mai multe retele mai mici. Formatul mãstii de subretea
corespunde unei zone continue de 1 (NetID) si unei zone continue de 0 (HostID), cu reprezentarea in
zecimal, pe campuri de 8 biti. Exemplu: [Link] scrisa si /19. Posibile valori ale unui octet al
mastii de subretea:
4
Retele de calculatoare – Informatica anul 3 (2019-2020)
Binar Zecimal
0000.0000 0
1000.0000 128
1100.0000 192
1110.0000 224
1111.0000 240
1111.1000 248
1111.1100 252
1111.1110 254
1111.1111 255
Concluzie: Folosind formatul 224 pentru masca de subretea, practic, împrumutãm 3 biti din câmpul
hostid în scopul realizãrii subalocãrii adresei IP (de clasã C) pentru un numãr de 8 subretele cerute.
Pentru fiecare din subretelele prezentate, avem un numar de 25-2 = 30 de adrese IP pentru hosturi.
IP ANDbit SM => Network Address; IP Orbit Not(SM) => Broadcast Address
6
Retele de calculatoare – Informatica anul 3 (2019-2020)
Operatorii de deplasare ( << , >> si >>>) se definesc astfel:
a << b = a * 2b
a >> b = a / 2b.
a >>> b este egala cu valoarea lui a deplasata la dreapta cu b pozitii prin completarea la stanga
cu zerouri
2.5. Riverbed Modeler Academic Edition
Ovservatie: (Lab_1 + Lab_2 + Lab_3 + Lab_4 si toate celelalte materiale, prezente la
[Link] …[Link])
Riverbed Modeler Academic Edition (versiune actuala a Opnet-ului - Optimized Network
Application and Network Performance) – mediu de simulare a retelelor de calculatoare - furnizează
software de management pentru aplicaţii şi reţele, care oferă soluţii pentru:
o Planificarea capacităţii reţelelor,
o Modelare şi simulare pentru reţele şi aplicaţii
o Managementul configurării reţelelor
o Managementul performanţelor aplicaţiilor
Varianta “programare” C++: OMNeT++ Network Simulation Framework, [Link]
Riverbed oferă o versiune academică (Modeler Academic Edition) - include modele standard pentru
protocoale şi echipamentele disponibile în tehnologia IT (disponibile, dupa instalare, în subdirectoare).
Etapele de lucru avute în vedere:
Etapele de lucru pentru Modeler Academic Edition pentru simularea şi analiza unei reţele
Obs: O statistica este o caracteristica numerica a unui esantion (Anexa 3, Lab_03)
Statistica este stiinta colectarii, clasificarii, prezentarii, interpretarii datelor numerice si a folosirii
acestora pentru a formula concluzii si a lua decizii.
Statistica descriptiva (Descriptive Statistics) se ocupa cu colectarea, clasificarea si prezentarea
datelor numerice.
Statistica inferentiala (Inferential Statistics) se ocupa cu interpretarea datelor oferite de statistica
descriptiva si cu folosirea acestora pentru a formula concluzii si lua decizii.
Configure/Run DES Dialog Box (Simple) The Configure/Run DES dialog box lets you
configure and run a discrete event simulation for the current scenario. The simple version of the
dialog box, (shown in the following figure), which appears when the DES configuration mode is
set to “simple”, presents a reduced set of controls to simplify configuration and execution of
discrete event simulations. Only single simulation runs are supported.
7
Retele de calculatoare – Informatica anul 3 (2019-2020)
The simple Configure/Run DES dialog box has two pages of controls. These controls are
organized by type and can be selected by clicking the corresponding tab. The following table lists
the controls in this dialog box.
Element Description
Duration field—Sets the duration of the simulation. Specify units with the pull-down
menu following this field. This value sets the “duration” simulation preference.
Basic controls
Values per statistic field—Sets the maximum number of values collected for each
statistic. This value sets the “num_collect_values” simulation preference.
Use this page to define the values of global simulation attributes.
Global
This page is similar to the Global Attributes page—Used to define the values of
Attributes
global simulation attributes for the simulation. seen in Detailed mode, except that you
page
cannot set multiple values for an attribute or automatically reset the default value.
Use this page to select Statistic reports and Service Level Agreement (SLA) reports
for the simulation. Reports are predefined sets of statistic probes.
Reports page
This page is identical to the Configure/Run DES Dialog Box (Detailed)—Report
Controls seen in Detailed mode.
Detailed… button—Switches temporarily to detailed mode and the detailed
Configure/Run DES dialog box, as described in Configure/Run DES Dialog Box
(Detailed). (This button does not change the des.configuration_mode preference.)
Run button—Saves the current settings, closes the dialog box, and runs the
Dialog box
simulation. Running a simulation from here opens the Simulation Execution Dialog
controls
Box.
Cancel button—Closes the dialog box without saving any changed settings.
Apply button—Saves the current settings and keeps the dialog box open.
Help button—Opens a help file for the dialog box.
8
Retele de calculatoare – Informatica anul 3 (2019-2020)
3. Partea practica (tema – pag.22 !!!!!)
RECAPITULARE: 2_CRC_Error [Link]; 3_CRC_exercises.pdf
3.1. Program Java ce permite calculul CRC-32 pentru un sir de caractere introdus de la tastatura
(se poate folosi fisierul 6_Lab_05_CRC_table.pdf). Challenge: Aplicatie Python
Indicatii:
9
Retele de calculatoare – Informatica anul 3 (2019-2020)
10
Retele de calculatoare – Informatica anul 3 (2019-2020)
3.2. Program pentru calculul sumei de verificare pentru un fisier. Se utilizeaza clasa
[Link].CRC32; Challenge: Aplicatie Python
Indicatii:
11
Retele de calculatoare – Informatica anul 3 (2019-2020)
3.3. Realizati un program care sa ofere utilizatorului urmatoarale optiuni:
salvarea unui text intr-un fisier impreuna cu suma de verificare CRC-32 corespunzatoare,
verificarea integritatii unui fisier pe baza valorii CRC-32. Challenge: Aplicatie Python
Anexa 4: The Programming Process!
Indicatii:
12
Retele de calculatoare – Informatica anul 3 (2019-2020)
3.4. Exercitii Subnetting (Subalocarea unei adrese IP)
3.4.1. O organizatie a primit adresa de retea [Link]/24 si are nevoie de sase subretele. Cea mai
mare dintre aceste subretele trebuie sa contina 25 de host-uri. Definiti masca de subretea
corespunzatoare si completati Tabelul de adrese IP (determinati adresele subretelelor, adresele
hosturilor, adresele de broadcast pentru toate subretelele obtinute) si Tabelul de adresare IP
(adresele interfetelor ruterelor (alocate descrescator, incepand cu ultima valoare!), adresele
gateway-urilor retelelor conectate la rutere, a (n+3)-a adresa a hostului corespunzatoare
apartenentei la reteaua n)
13
Retele de calculatoare – Informatica anul 3 (2019-2020)
3.4.2. O organizatie a primit adresa de retea [Link]/18 si are nevoie de 12 subretele. Cea mai mare
dintre aceste subretele trebuie sa contina 102 host-uri. Definiti masca de subretea corespunzatoare
ramanerii in rezerva a unor subretele cu un numar cat mai mare de hosturi si determinati adresele
subretelelor precum si adresele gazdelor din subreteaua 2. Calculati adresele de broadcast pentru
fiecare din subretelele obtinute.
3.4.3. O organizatie a primit adresa de retea [Link]/16 si trebuie sa defineasca subretele care sa
suporte fiecare maxim 60 de gazde. Definiti masca de subretea corespunzatoare si determinati adresele
subretelelor precum si adresele gazdelor din subreteaua 3. Calculati adresele de broadcast pentru
fiecare subretea.
3.4.4. Se da adresa de retea [Link]/24. Cati biti trebuie imprumutati din campul hostid pentru a
permite definirea unor subretele care sa suporte minim 20 de gazde? Care este numarul maxim de
gazde care poate fi suportat de fiecare subretea? Care este numarul maxim de subretele care poate fi
definit? Determinati subretelele si exprimati adresele IP in format binar si in formatul cu punct
zecimal. Care este domeniul de adrese IP folosit de subreteaua 6? Care este adresa de broadcast pentru
subreteaua 6?
3.5. Realizati o aplicatie Java pentru subnetting. Adresa IP si masca de subretea sunt preluate de
la tastatura. Programul trebuie sa afiseze:
Indicatii:
Aplicatie care testeaza validitatea unei adresa IP si afiseaza clasa din care face parte si adresa in format
binar.
14
Retele de calculatoare – Informatica anul 3 (2019-2020)
15
Retele de calculatoare – Informatica anul 3 (2019-2020)
Cursantii sunt incurajati sa foloseasca materialul de mai jos intr-un mod constructiv,
astfel incat sa evalueze caracteristicile legaturilor fizice si a dispozitivelor de retea folosite
(click dreapta, view link/node description), a modelelor de retea precum si elementele de
baza privind simularea sistemelor cu evenimente discrete analizate; rezultatele obtinute
grafic vor fi analizate si interpretate in contextul cerintelor prezentate in sectiunea Lab
Report.
Obiectiv: Parcurgerea etapelor de baza privind planificarea unei retele, tinand cont de utilizatori,
servicii, hosturi, localizarea hosturilor. Indicatie: Network_Design_Modeler.pdf
ATENTIE:
Cursantii sunt incurajati sa foloseasca materialul de mai sus intr-un mod constructiv,
astfel incat sa evalueze caracteristicile legaturilor fizice si a dispozitivelor de retea folosite
(click dreapta, view link/node description), a modelelor de retea precum si elementele de
baza privind simularea sistemelor cu evenimente discrete analizate; rezultatele obtinute
grafic vor fi analizate si interpretate in contextul cerintelor prezentate in sectiunea Lab
Report.
Exemplu: 4_Intro_Modeler.pdf, pag.7
16
Retele de calculatoare – Informatica anul 3 (2019-2020)
Se vor identifica meniurile si sub-meniurile de mai jos, in contextul utilizarii ulterioare a acestor
informatii.
17
Retele de calculatoare – Informatica anul 3 (2019-2020)
18
Retele de calculatoare – Informatica anul 3 (2019-2020)
3.7. Aplicatii de retea in Pyton
3.7.1. Recapitulare (Lab_02, Lab_03)
Python_intro
Programare_Python
Byte-of-python
pyshark – pachet Python care permite analiza PDU-urilor folosind decodarea Wireshark
[Link]: Afisarea adreselor IP sursa si destinatie corespunzatoare
pachetelor din fisierul wireshark [Link]
Indicatii:
print_ip.py
print_ip:
Output:
19
Retele de calculatoare – Informatica anul 3 (2019-2020)
3.7.3 Aplicatie python:Afisarea adreselor IP sursa / destinatie filtrate cu
ip ca data de intrare, corespunzatoare pachetelor din fisierul wireshark
[Link]
Exemple:
Input: ip sursa = [Link] Input: ip destinatie = [Link]
Output: Output:
Observatii TEMA!!!!!
Observatii
1. Atentie (Modeler) – Proiectul creat se salveaza implicit in:
C:\Users\student(NUME user)\op_model\NUME_PROIECT
NUME_PROIECT contine proiectul modeler propriu-zis
VARIANTA
se arhiveaza intreg folderul Folder creat mai jos…el contine proiectul opnet propriu-zis
In directorul ....\Studenti\Info3\Nume_Prenume se creează directorul (pentru punctul
3.5) \L5_3.6_Nume_Prenume folosind:
o File → New → Folder
Se lansează în execuţie Modeler
20
Retele de calculatoare – Informatica anul 3 (2019-2020)
Se selectează directorul în care vor fi plasate fişierele proiectului.
o File → Model Files →Add Model Directory
o Se selectează directorul în care se va lucra (în acest director vor fi salvate fişierele
proiectului curent)
o Se arhiveaza L5_3.6_Nume_Prenume
21
Retele de calculatoare – Informatica anul 3 (2019-2020)
description (obs.2 anterioara), exercitiile rezolvate, raspunsuri la intrebari, rezultate
finale, observatii finale)
L5_nume+prenume_java : folder cu fisierele Java pentru fiecare aplicatie (fisierul sursa
.java, fisierul .bat, insotite de un [Link] pentru particularitati de rulare + snipping
tool) - 3.1, 3.2, 3.3, 3.5 (Challenge: Versiuni Python).
L5_nume+prenume_IP: folder cu rezolvarile (.doc/ .png) ale exercitiilor 3.4.
L5_nume+prenume_Python (folder) – cu subfloderele 3.7.2 si 3.7.3 (fiecare din acestea
contine scripturile .py si document .doc (snipping tool) pentru aplicatiile Python, conform
temelor indicate la aplicatiile de la punctul 3.7).
Obs:
Punctaj maxim (Data trimiterii temei)
<= 07.11. 2019 11.11. 2019 15.11.2019 19.11.2019
100 pct 80 pct 60 pct 50 pct
Sursa: [Link]
22
Retele de calculatoare – Informatica anul 3 (2019-2020)
How to send an e-mail
[Link]
[Link] “As a security measure to prevent potential
viruses, Gmail doesn't allow you to send or receive executable files (such as files ending in .exe).”
[Link]
[Link]
[Link]
Bibliografie
Lab_01, Lab_02, Lab_03, Lab_04, TL_01 ....
[Link]
efg’ Mathematics, [Link]
Java API, [Link]
Java Tutorial, Writing Your Own Filtered Streams [Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
Modeler Tutorials
[Link]
[Link]
[Link]
[Link]
Install Riverved Modeler 17 5 Windows 10, 8 1, 8 and 7
([Link] )
Install Riverbed Modeler ([Link]
How to activate riverbed modeler 17.5 ([Link]
How to solve invalid activation of Opnet Modeler 17.5
([Link] )
Riverbed Modeler 17.5 Tutorial - Switched Lan
([Link] )
6-Virtual LAN (VLAN) configuration in OPNET Riverbed
([Link]
Riverbed Modeler Configuracion VLAN
([Link]
Ethernet (lab_04)
Riverbed Opnet 17.5 Tutorial - The Ethernet network
([Link] )
6-Virtual LAN (VLAN) configuration in OPNET Riverbed
([Link]
Riverbed Modeler Tutorial 3 Configuracion VLAN
([Link]
[Link]
23
Retele de calculatoare – Informatica anul 3 (2019-2020)
Anexa 1 :
Atentie ! Pentru aplicatiile Java, la fiecare laborator (n) va fi creat un proiect in NetBeans
(ex: Ln_info3) , care va fi salvat in directorul personal – F:\info3\<nume student>.
1. Crearea unui proiect nou
Pentru a crea un proiect nou selectam File -> New Project. Se va deschide o fereastra cu
tipurile de proiecte pentru care se ofera suport. Se va alege General -> Java Application
si se apasa Next.
Se va deschide o fereastra in care trebuie introduse numele si locatia noului proiect. Se deselecteaza
caseta CreateMainClass, si se apasa Finish. Se va oberva in fereastra Projects noul
proiect creat, care contine: un director pentru fisierele sursa, un director pentru fisierele test si doua
directoare cu alte informatii utilizate in proiect.
2. Crearea claselor
Pentru a crea o noua clasa, se va selecta New -> New File. Se va deschide o fereastra cu mai
multe tipuri de aplicatii.
Functie de tipul de clasa necesar, se alege optiunea si se apasa Next. Se introduce numele noii
clase create, se selecteaza proiectul in cadrul caruia se creaza clasa (din lista Projects) si se
apasa Finish. Se va observa faptul ca numele clasei este adaugat in directorul cu fisiere sursa din
fereastra Projects.
In ultimul caz, se va selecta Run -> Run Main Projects (daca se doreste lansarea in
executie a intregului proiect) sau Run File (daca se doreste doar rularea clasei respective).
Rularea clasei se face si prin comanda Run File din meniul pop-up afisat la executarea de click
dreapta pe clasa selectata.
4. Rularea unui program Java impreuna cu o lista de argumente pentru metoda main()
Se selecteaza din fereastra Projects proiectul care contine clasa ce trebuie rulata. Se face
click dreapta, si se alege optiunea Properties.
Se alege categoria Run, si apoi numele clasei principale din proiect (clasa se poate selecta
utilizand butonul Browse). Se introduc argumentele metodei principale in campul Arguments. Se
apasa Finish.
24
Retele de calculatoare – Informatica anul 3 (2019-2020)
How do I run a Java program using a .bat file in Windows?
[Link]
Step 1: Create java file what you want to execute and place that file in some location. For example I am
creating [Link] in my desktop.
Step 2: Create batch file and write following snippet and then save the file with some name. Here I am
using [Link] and saved in my desktop.
1. @ECHO OFF
2. set CLASSPATH=.
3. javac [Link]
4. java Test
5. pause
Step 3 : Run the [Link] file then your java program automatically compiled and run. Batch file
automatically opens the command prompt.
Anexa 2
2.1. Checksums (Sursa: [Link]
Several network protocols use checksums to ensure data integrity.
Tip!
Applying checksums as described here is also known as redundancy checking.
What are checksums for?
25
Retele de calculatoare – Informatica anul 3 (2019-2020)
Checksums are used to ensure the integrity of data portions for data transmission or storage. A checksum is basically a
calculated summary of such a data portion. Network data transmissions often produce errors, such as toggled, missing or
duplicated bits. As a result, the data received might not be identical to the data transmitted, which is obviously a bad
thing.
Because of these transmission errors, network protocols very often use checksums to detect such errors. The transmitter will
calculate a checksum of the data and transmits the data together with the checksum. The receiver will calculate the
checksum of the received data with the same algorithm as the transmitter. If the received and calculated checksums don't
match a transmission error has occurred.
Some checksum algorithms are able to recover (simple) errors by calculating where the expected error must be and
repairing it. If there are errors that cannot be recovered, the receiving side throws away the packet. Depending on the
network protocol, this data loss is simply ignored or the sending side needs to detect this loss somehow and retransmits the
required packet(s).
Using a checksum drastically reduces the number of undetected transmission errors. However, the usual checksum
algorithms cannot guarantee an error detection of 100%, so a very small number of transmission errors may remain
undetected.
There are several different kinds of checksum algorithms; an example of an often used checksum algorithm is CRC32. The
checksum algorithm actually chosen for a specific network protocol will depend on the expected error rate of the network
medium, the importance of error detection, the processor load to perform the calculation, the performance needed and many
other things. Further information about checksums can be found at: [Link]
26
Retele de calculatoare – Informatica anul 3 (2019-2020)
Anexa 4: The Programming Process
1. Identify the Problem - What Are You Trying To Do?
o Requirements
o Specification
2. Design a Solution - How Is It Going To Be Done?
3. Write the Program - Teaching the Computer
o Code
o Compile
o Debug
4. Check the Solution - Testing it Understands You
27