CISSP tanfolyam 2017 november-december.
- MarkDown
- GitHub
- Visual Studio Code nyílt forráskódú multiplatform (Windows, linux, OsX) fejlesztőkörnyezet.
- Computing Systems
- Databases
- Software Development
-
Moore törvénye (Gordon Moore)
- 1965: ezt követően tíz évig a tranzisztorok sűrűsége meg fog duplázódni az integrált áramkörökön
- 1975: újraértékelt, és további 10 évre kiterjeszti
- David House (Intel): 18 havonta a teljesítmény duplázódik (a mennyiség mellett a sebességgel is számol)
Példa: Lotus 1-2-3 (DOS, 640k)/Excel párharca (Windows)
-
Multitasking Több feladat egyidejű végrehajtására képes a rendszer. A legtöbb rendszer nem képes erre, az operációs rendszer szimulálja a CPU idejének a felosztásával.
-
Multiprocessing Párhuzamos végrehajtásra képes rendszerek. Egynél több processzorral egyszerre több feladat végrehajtása zajlik.
- SMP (Simmetric Multiprocessing): egy számítógép több processzort tartalmaz, ugyanaz az OS kezeli őket, általában nem csak az OS közös, hanem az adathozzáférés és a memóriahasználat is. Több processzor, általában 2-16 db.
- MPP (Massive Parallel processing): több száz processzor vagy több ezer processzor, minden processzorhoz saját adathozzáférés és operációs rendszer. Például particionált adatok (facebook ország szerinti adatai, google keresés)
-
Multiprogramming A multitaskinghoz hasonlóan több feladat egyidejű végrehajtására képes programozást jelent.
+--------------+
| Adatbázis |
+----------------+ |--------------|
| Böngésző | +-------------------+ +--->| |
|----------------| | Alkalmazásszerver | ^ | |
| | |-------------------| | | |
| +----------------------->|Kérés végrehajtása |+---+ +--------------+
| | |Vár az adatbázisra | (miközben az adatbéázisra vár, közben a többi
| | |Kérés végrehajtás | feladatot végrehajtja)
| | | folytatása |
+----------------+ +-------------------+
-
inkább a régi nagy mainframe-ek sajátja, a multitask pedig a PC-kre jellemző
-
a multitaskot az OS kezeli, a multiprogramminghoz speciálisan megírt programra van szükség
-
Multithreading (többszálú végrehajtás) Lehetővé teszi az operációs rendszer szolgáltatásával, hogy egy alkalmazáson belül párhuzamos feladatvégrehajtás történjen úgy, hogy különleges programozásra nincs szükség. Azért hatékony, mert a szálak közti váltások sokkal gyorsabbak (50 utasítás) mint a processzek közti váltások (1000 utasítás)
-
Process (folyamat) Egy alkalmazás és a futtatásához szükséges környezet.
-
Thread (szál) A folyamaton (alkalmazáson) belül végrehajtási szál, saját call stack-kel. Az OS biztosítja.
A magas biztonságú rendszerek úgy felügyelik az információfeldolgozás folyamatát, hogy különböző biztonsági szintekhez rendelik őket.
- besorolás nélküli
- érzékeny
- bizalmas
- titkos
- szigorúan titkos
Egyszerre csak egyféle biztonsági szintet kezel a rendszer. A biztonsági adminisztrátor kezeli, nem a számítógép, vagy az OS.
Egyszerre több biztonsági hozzáférést képes nyújtani. Ehhez tartalmaz védelmi mechanizmust, hogy a biztonsági szintek átlépését kivédje. Ez a mechanizmus nagyon költséges, és az ilyen rendszerek nagyon ritkák. Egyes drága MPP rendszerekhez ritkán van olyan indok, ami értelmessé teszi ezt a fajta kialakítást.
Az operációs rendszerek tervezésénél védelmi körökbe szervezik a feladatokat.
+----------------------------------------------------------------+
| User-level programs and applications |
|----------------------------------------------------------------|
| |
| |
| +----------------------------------------------+ |
| | Drivers, protocols | |
| |----------------------------------------------| |
| | | |
| | | |
| | +--------------------------+ | |
| | | Other OS component | | |
| | |--------------------------| | |
| | | +------------------+ | | |
| | | | OS kernel/memory | | | |
| | | |------------------| | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | +------------------+ | | |
| | | | | |
| | +--------------------------+ | |
| | | |
| | | |
| +----------------------------------------------+ |
| |
+----------------------------------------------------------------+
- ring 0 (legbelsőbb kör)
- ring 1
- ring 2
- ring 3 (felhasználói rendszerek)
Process needs another time slice
New process <--------------------------------------+^ Stopped
+ + | ^
| | | When process |
| | | finished or |
| v If CPU is available + terminated +
+-----> Ready +------------------------------> Running +----------------->
^ +
+------------+ |
| |
| | block for I/O,
| | resources
|unblocked |
| |
| |
| |
+ |
|
Waiting <-----------+
- Ready A folyamat kész arra, hogy elkezdje a végrehajtást. Ha lesz szabad processzor, akkor ezt a folyamatot végre is hajthatja. A hozzárendelt erőforrások ki vannak neki osztva.
- Waiting A folyamatunk külső erőforrásra vár. A futása addig, amíg az erőforráshozzáférés meg nem történik, blokkolva van.
- Running A folyamat CPU végrehajtás közben van. Addig tart, amíg (a) nem végez, (b) le nem jár az időszelete (c) egy erőforráshozzáférés miatt blokkolt állapotba kerül.
- Supervisory Amikor magasabb jogok szükségesek (egy körrel beljebb kellene kerülni), driver telepítés, stb.
- Stopped Amikor a folyamat végzett, vagy meg kell szakítani (hiba, nem elérhető erőforrás, stb.) A hozzárendelt erőforrások elvonhatók, újraoszthatók.
- ROM: Read-Only Memory
- PROM: Programmable Read-Only Memory
- EPROM: Erasable Programmable Read-Only Memory
- EEPROM: Electronically Erasable Programmable Read-Only Memory
- Flash: blokkonként törölhető EEPROM
- RAM: Random Access Memory
- dinamic: kapacitásokból áll, a CPU-nak időnként frissítenie kell.
- static: flip-flop áramkörök, nem kell a CPU-nak frissíteni. Amíg áram alatt van nem felejt. Gyorsabb és dágább. Cache RAM: Level1: a processzoron, Level2: static RAM
Speciális memóriák, szinkron sebességgel dolgoznak, mint a processzor végrehajtási egysége (ALU: Arithmetic-logical unit)
- Register addressing: amikor a porcesszor a regisztert címzi, hivatkozza (register 1)
- Inmediate addressing: közvetlen műveletvégzés a regiszter segítségével (add 2 to register 1)
- Direct addressing: a registerben a memóriahely címe van, amivel dolgozni kell, ahol az adat van. (a cím egy lapon van a paranccsal)
- Indirect addressing: a registerben lévő memóriahelyen újabb cím vár minket: az a cím, ahol az adat van, amivel dolgozni kell. (a cím egy lapon van a paranccsal)
- Base + Offset addressing: ha nem azonos lapon van az adat, akkor a lapcím + a lapon belüli cím jelenti az adat címét, amivel dolgozunk.
- Primary memory: "valódi memória", amit a processzor a regiszter műveletekkel eléri (gyors és drága)
- Secondary storage: először be kell tölteni a primary memóriába, hogy használni tudjuk. (lassú és olcsó)
Olyan másodlagos memóriák, amiket az operációs rendszer használ, segítségével elsődlegesnek látszik. Hátránya a sebessége.
- Monitor
- Printer
- Keyboard/Mouse
- Modems
- I/O structures
- Memory-Mapped I/O
- IRQ
- DMA
- Firmware
- BIOS
- Device Firmware
dotnet new console
a program
class Program
{
private static void Tennivalo(object state)
{
System.Console.WriteLine("elindult a szálon a feladat");
Thread.Sleep(4000);
System.Console.WriteLine("megállt a szálon a feladat");
}
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(Tennivalo);
ThreadPool.QueueUserWorkItem(Tennivalo);
ThreadPool.QueueUserWorkItem(Tennivalo);
ThreadPool.QueueUserWorkItem(Tennivalo);
ThreadPool.QueueUserWorkItem(Tennivalo);
ThreadPool.QueueUserWorkItem(Tennivalo);
ThreadPool.QueueUserWorkItem(Tennivalo);
Console.ReadLine();
}
}
eredmény
elindult a folyamat
elindult a folyamat
elindult a folyamat
elindult a folyamat
elindult a folyamat
elindult a folyamat
elindult a folyamat
megállt a folyamat
megállt a folyamat
megállt a folyamat
megállt a folyamat
megállt a folyamat
megállt a folyamat
megállt a folyamat
Megjegyzések:
- semmilyen különleges kód nem kell a párhozamos programozáshoz
- az első négy thread azonnal elindult, mivel a gép amin futtattam 4 processzormagot tartalmaz
- majd lassabban, de elindult a többi szál is, mielőtt végrehajtotta volna az összes futó feladatot
-
Mi is az az adatbázis? Adatok gyűjteménye, felhasználók által hozzáférhető módon kialakítva, lehetséges mind az adatok megtekintése, mind létrehozás és módosítás. Vagyis, az adatok, kiegészítve a hozzáférés módjával (DBMS)
- DBMS: DataBase Magement System
- program, ami az adathozzáférést vezérli (létrehozás, módosítás, törlés, lekérdezés)
- adatmentések és a mentések visszatöltése (Backup and recovery)
- lekérdező nyelv biztosítása (SQL)
- SQL/DQL: Data Query Language - a SELECT utasítás
- SQL/DML: Data Manipulation Language: INSERT, UPDATE, DELETE
- adatbázis struktúra karbantartása (SQL/DDL: Data Definition language)
- az adathozzáférések szabályozása (SQL/DCL: Data Control language)
- DBMS: DataBase Magement System
-
Relational: A túlnyomó része relációs adatbázis (1970 IBM E.F Codd)
-
Hierarchical:
+<----------------++------------->+
v v
<-----------+ com +-----------> hu
+ +
| |
| |
| |
| |
| |
| |
v |
v
+<----+ microsoft.com+----> cisco.com
| +
| |
| |
| |
v v
app.microsoft.com www.microsoft.com
-
object oriented
-
distributed network
-
SQL: (SEQUEL: Structured English Query Language)
- adatok táblázatban (két dimenziós struktúra: table=relation)
-
vízszintesen: sorok, rekordok (row=record=tuple)
-
függőlegesen: oszlopok, mezők (column=field=attribute)
-
vizszintesen ritkán változnak, függőlegesen állandóan. Az idejének nagy részét sorok létrehozása, módosítása, törlése és lekérdezése tölti ki.
-
Kulcs | Név | Cím | Befizetés/Kifizetés | Partner | Partner címe |
---|---|---|---|---|---|
1 | Kiss József | 1000 Budapest, Fő utca 1 | +5000 | Nagy Zoltán | 2000 Szentendre Al utca 1. |
2 | Kiss József | 1000 Budapest, Fő utca 1 | +2000 | Gipsz Jakab | |
3 | Kiss József | 1000 Budapest, Fő utca 1 | -4000 | Fő Kálmán | |
4 | Nagy Zoltán | 2000 Szentendre Al utca 1. | -5000 | Kiss József | 1000 Budapest, Fő utca 1 |
5 | Nagy Zoltán | 2000 Szentendre Al utca 1. | +5000 | Pofá Zoltán | |
6 | Nagy Zoltán | 2000 Szentendre Al utca 1. | +5000 | Tüdő Pál |
-
Kulcs (KEY): Elsődleges kulcs (Primary key: PK) A tábla kulcsa olyan adat, ami egyértelműen azonosítja a sort. Vagyis kétszer nem szerepelhet a táblázatban. Például (de nem kizárólagosan):
- identity: egy szám, ami minden sor hozzáadásával nő
- guid: globális egyedi azonosító, lokálisan generált (kliens program is generálhatja), de a világon egyedi érték
- ez biztosítja az Entity integrity service-t
-
normalizálás (optimális tárolási és visszakeresési forma eléréséhez)
- 1NF, 2NF, 3NF Példa
Kulcs | Partner1 | Befizetés/Kifizetés | Partner 2 |
---|---|---|---|
1 | 4 | +5000 | 2 |
4 | 1 | +2000 | 3 |
5 | 1 | -4000 | 4 |
6 | 2 | -5000 | 1 |
7 | 2 | +5000 | 5 |
8 | 2 | +5000 | 6 |
Kulcs | Név | Cím |
---|---|---|
1 | Kiss József | 1000 Budapest, Fő utca 1 |
4 | Nagy Zoltán | 2000 Szentendre Al utca 1. |
5 | Gipsz Jakab | |
6 | Fő Kálmán | |
7 | Pofá Zoltán | |
8 | Tüdő Pál |
- Távoli kulcs (Foreign key: FK) egy másik tábla PK-jára mutató mező Ez az alapja a referential integrity védelmi képességnek. Nem tartalmaz az adatbázis árvénytelen hivatkozást.
select
p1.Nev
,p2.Nev
,Osszeg
from
Penzmozgas penz
inner join Partnerek p1 on p1.Kulcs = penz.Partner1
inner join Partnerek p2 on p2.Kulcs = penz.Partner2
és az eredmény:
Kiss Zoltán Nagy Zoltán 5000
Nagy Zoltán Kiss Zoltán -5000
update
Partnerek
set
Nev='Kiss Lajos'
where
Kulcs=1
insert
Partnerek
(Nev, Cim)
values
('Gipsz Jakab', '3000 Nem tudom hol')
delete
Partnerek
where
Kulcs=5
- Tables
- Relationships (táblák közti kapcsolatok, FK-k)
- Business rules
- Domains
a lényeg, hogy ne kerülhessen be az adatbázisba érvénytelen információ
- Entity integrity garantálja, hogy minden sornak van egyedi azonosítója (PK)
- Referential integrity biztosítja, hogy az FK mezőben lévő információ létezó PK-ra m utat. (felvitelkor, módosításkor és törléskor )
- Semantic integrity
Biztosítja, hogy a strukturalis és szemantikus szabályok ki legyenek kényszerítve
- not null
- check constraint
Az adatbázis elé egy olyan felületet (virtuális táblázatot) generálhatunk, amihez saját jogosultságokat lehet rendelni.
példa (egyben DDL példák): létrehozás
drop view PezmozgasokNezet
create view
PenzmozgasokNezet
as
select
p1.Nev Partner1Nev
,p2.Nev Partner2Nev
,Osszeg
from
Penzmozgas penz
inner join Partnerek p1 on p1.Kulcs = penz.Partner1
inner join Partnerek p2 on p2.Kulcs = penz.Partner2
törlés
drop view PezmozgasokNezet
a tranzakciók jellemzői
- Atomic: nem részekre bontható, a benne foglalt utasítások összetartoznak, vagy együtt hajtódnak végre, vagy nem hajtódnak végre.
- Consistency: konzisztencia megtartása, a tranzakció az adatbázist a korábbi konzisztens (az integritási szabályoknak megfelelő) állapotból konzisztens (az integritási szabályoknak megfelelő) állapotba viszi
- Isolation: elszigetelt végrehajtás, amit a tranzakcióban végzünk, azt mások addig, amíg nem véglegesítettük nem láthatják.
- Durable: tartós, ha a tranzakciót lezártuk (COMMIT paranccsal) akkor annak az eredménye tartósan megmarad.
begin transaction
insert
Partnerek
(Nev, Cim)
values
('Gipsz Jakab', '3000 Nem tudom hol')
select * from Partnerek
insert
Penzmozgas
(Partner1, Partner2, Osszeg)
values
(1,8,-5000)
--rollback --ezzel visszavonnánk, nem csinálna semmit
commit transaction --ezzel lezárjuk, minden módosítás végleges
- központosítottan tárolt adat definíciók, schemák és hivatkozási kulcsok
- leíró adatok (Metadata)
- szabályok (Rulas)
- ODBC (Open Database Connectivity)
- OLE DB (Object Linking and Embedding)
- ADO (ActiveX Data Object)
- (EF Entity Framework)
- JDBC (Java Database Connectivity)
- XML - Extensible Markup Language
<Parner>
<Nev Value="Gipsz Jakab" />
<Cim>3000 Nem tudom hol</Cim>
</Partner>
- (JSON - JavaScript Object Notation)
{
"Nev": "Gipsz Jakab",
"Cim": "3000 Nem tudom hol"
}
- Különböző adatok különböző forrásokból és/vagy adatbázisból
- Az adatok denormalizáltak (például előre felösszegezett részösszegek)
- Adatbányászat (Data mining)
- Concurrency/LOCK konkurrens módosítás ellen a lock mechanizmusok
- database partitioning: a rész adatbázisokon lehet jogosultságot osztani
- Polyinstantiating: azonos kulccsal több rekord létrehozása, hogy különböző jogosultsági szinteken állók ne tudjanak következtetni az összegzésekből például.
- Database contamination: adatszennyezés, ugyanebből a célból
figyelem: ezek implementálása nagyon komoly kihívás
- az adatbázis perzisztens tárolásánál figyelni kell arra, hogy ne csak az OS biztonsági képességeiben bízzunk. (titkosított mentések, titkosított partíció az adatbázisfile-oknak)
- többszintű biztonsági rendszer esetén szükséges az adatokat (memóriában és perzisztens tárolón is) fail safe. Azaz, ha valamilyen hiba történik, akkor a rendszer olyan állapotba kerül, hogy emberi beavatkozás nélkül nem használható.
Összetett és rengeteg kihívással teli feledatot tartalmazó problémakör. Gyakran
- hozzáférnek érzékeny adatokhoz
- nagyobb közönség számára hozzáférhetőek
- sok esetben saját szoftver készül
- a szoftver lehet "túl erős"
- közvetlen írányítés hardware és szoftvert elemek felett
- közvetlen írányítás az állományok felett
- közvetlenül hozzáférhet szerverekhez
- közvetlenül hozzáférhet I/O eszközökhöz
- közvetlen hozzáférés rendszer segédprogramokhoz
- közvetlen hozzáférés feladatok futtatásához/leállításához
- beállíthat dátumot, időt, jelszót
- képes indokolatlan lekérdezésekhez (DDoS)
- hozzáférés naplóhoz/audit loghoz
- hozzáférés erőforrásokhoz.
Amennyiben saját szoftvert gyártunk fontos, hogy a biztonsági kérdések megfelelő súlyt kapjanak a kezdés pillanatától kezdve. Utólag biztonságot adni egy rendszernek nem lehet.
Célja: A igenyeknek megfelelően bonyolult, egyszerű összeadással/logikai műveletekkel (amit a CPU támogat) nem egyszerűen leírható vagy leírhatatlan feladatok megoldása magasabb szinten.
- 1GL: Gépi kód (a processzor számára közvetlenül értelmezhető utasítássorozat számokból)
- 2GL: Assembly
- 3GL: Fordított (Interpretált) nyelvek (Fortran, Algol)
- 4GL: Olyan nyelv, ami megpróbálja a természetes emberi nyelvet utánozni + használja az SQL-t adathozzáférésre.
- 5GL: Grafikus felületen keresztüli kód létrehozás
Forráskód ---(fordítás)---> Köztes nyelv ---------(interpreter/virtualis gép)-----------> Gépi kód - Byte code - IL (MSIL MS Intermediate Language)
- Objektumorientált nyelvek (Bankszámla nyilvántartáson keresztül)
class Program
{
static void Main(string[] args)
{
var cegesBankszmla = new Bankszamla("Kerékgyártás KFT");
System.Console.WriteLine(cegesBankszmla.Nev);
cegesBankszmla.Jovairas(5000);
cegesBankszmla.Terheles(2000);
cegesBankszmla.Terheles(4000);
}
}
public class Bankszamla
{
private string nev;
public Bankszamla(string nev)
{
this.nev = nev;
}
public string Nev { get {return this.nev;} }
private int egyenleg;
public int Egyenleg { get {return this.egyenleg;} }
public void Terheles(int osszeg)
{
if (osszeg < 0)
{
throw new Exception("terhelni csak pozitív számot lehet");
}
if (Egyenleg<osszeg)
{
throw new Exception($"a terhelendő összeg {osszeg} nagyobb, mint a rendelkezésre álló összeg {egyenleg}");
}
egyenleg = egyenleg - osszeg;
System.Console.WriteLine($"{osszeg} terhelése megtörtént, új egyenleg: {egyenleg}");
}
public void Jovairas(int osszeg)
{
if (osszeg < 0)
{
throw new Exception("jovairni csak pozitív számot lehet");
}
egyenleg = egyenleg + osszeg;
System.Console.WriteLine($"{osszeg} jóváírása megtörtént, új egyenleg: {egyenleg}");
}
}
Eredmény
PS D:\Repos\CISSP201711\OOPDemo> dotnet run
Kerékgyártás KFT
5000 jóváírása megtörtént, új egyenleg: 5000
2000 terhelése megtörtént, új egyenleg: 3000
Unhandled Exception: System.Exception: a terhelendő összeg 4000 nagyobb, mint a rendelkezésre álló összeg 3000
at OOPDemo.Bankszamla.Terheles(Int32 osszeg) in D:\Repos\CISSP201711\OOPDemo\Program.cs:line 46
at OOPDemo.Program.Main(String[] args) in D:\Repos\CISSP201711\OOPDemo\Program.cs:line 14
- Encapsulation (Egységbezárás) Osztályon kívülről csak az látszik, amit engedünk
- Abstraction (Absztrakció) Csak azzal foglalkozunk, ami fontos.
- Inheritance (Leszármaztatás)
public class KamatozoBankszamla : Bankszamla
{ //csak a kamatozással kell foglalkoznom, a Bankszamla osztály már hozza az egyenleg/jóváírás/terhelés tulajdonságokat
}
- Polimorphism (többféle változat kialakítható, az ősosztály tulajdonságai felülírhatók)
- Modularity
- Reusable (két fontos feltétel)
- High Cohesion (Erős kohézió) Egy osztályhoz a feladatok mennyire hasonló vagy azonos felelősségi körhöz tartoznak.
- Low Coupling (Gyenge csatolás) (Erős) Csatolás akkor van két osztály között, ha az egyik változása esetén nem kizárható a másik változása. Gyenge csatolás esetén a változás kizárható.
+------------------+
| Űrlap 1 |
|------------------|
| |
| |+------------>
| | +
+------------------+ v
+---------------------+ +---------------------+
| Repository | | Adatbázis |
|---------------------| |---------------------|
| | | |
+------------------+ | Minden adatbázis- | | |
| Űrlap 2 | | hozzáféréssel | | |
|------------------| | kapcsolatos kód | | |
| | | |+------>| |
| |+---->| | | |
| | | | | |
| | | | | |
+------------------+ +---------------------+ | |
^ +---------------------+
|
+------------------+ |
| Űrlap 3 | |
|------------------| +
| | +----------->
| |
| |
+------------------+
<-------------+Erős kohézió-gyenge csatolás+------------>
- Class/Object
- Class: a létrehozandó objektum tervrajza
- Object: a tervrajz alapján létrejövő konkrét építmény
- Biztonsági szempontból ez a megoldás fekete doboz.
- Az osztály/objektum másik definíciója: olyan dolog, aminek van:
- Állapota (state) (Egyenleg és név)
- Viselkedése (behaviour) (Terhelés és jóváírás) és
- Azonosítható (identity) (például a rá hivatkozó referencia azonosítja)
Az objektumorientált programozás előnye, hogy felületet definiál, amit a felhasználó kód hívni tud, és a felület alatt a megvalósítás lecserélhető.
static void Main(string[] args)
{
// var cegesBankszmla = new Bankszamla("Kerékgyártás KFT");
// System.Console.WriteLine(cegesBankszmla.Nev);
// cegesBankszmla.Jovairas(5000);
// cegesBankszmla.Terheles(2000);
// cegesBankszmla.Terheles(4000);
var kamatozoBankszmla = new KamatozoBankszamla("Kerékgyártás KFT");
System.Console.WriteLine(kamatozoBankszmla.Nev);
kamatozoBankszmla.Jovairas(5000);
kamatozoBankszmla.Terheles(2000);
kamatozoBankszmla.Terheles(4000);
}
Példának tekintsük mondjuk
- a tv távirányítóját
- rádió hangerőszabályozóját
- feladat: hangerőszabályzás
- felület: forgatni kell, hogy a hangerőt állítsuk
- megvalósítás: lehet elektronikus potenciométer vagy optikai szenzor. Teljesen mindegy, amíg a hangerőt állítja.
A szoftverfejlesztés nem valódi mérnöki folyamat, hanem sokak szerint egy kaotikus tevékenység, ami időről időre mégis eredményt hoz.
-
A módszertan használata növeli az elkészült rendszer minőségét. A nem megfelelő, vagy nem nem megfelelően használt módszertan azonban nem garantál semmit. (Nem biztosítja a projekt üzleti és/vagy felhasználói elégedettségi sikerét)
-
Minden szoftver fejlesztést (előállítást) végző szervezet sorban ugyanazokon a fázisokon megy keresztül. Az elkészül szoftver minősége a szoftver (előállítási) folyamat minőségén múlik. (CMM Capability Maturity Model)
[wikipédia cikk] https://en.wikipedia.org/wiki/Waterfall_model
- Amíg el nem készül egy fázis, addig nem lépünk tovább
- Ha egy fázisról elléptünk, visszafelé sosem lépünk
- Rendszer követelmények
- Szoftver követelmények
- Előzetes tervek
- Részletes tervek készítése
- Fejlesztés és hibajavítás
- Tesztelés
- Üzemeltetés
Továbbfejlesztés: egyet vissza lehet lépni Módosított:
- továbblépés előtt ellenőrzés
- Verification: a követelményekkel szemben
- Validation: a való világgal szemben
Nem lett túl sikeres, mire elkészült, addigra elterjedt a
Négy terület
- Célok, alternatívák és keretek meghatározása
- Alternatívák elemzése, kockázatok azonosítása és megszüntetése
- Fejlesztés és ellenőrzés
- Következő fázis tervezés
Iteratív fejlesztési módszertan, felkészül a szervezet arra a lehetőségre, hogy az első alkalommal nem sikerül tökéletes végeredményt előállítani.
A jobb oldalon szereplő fogalmak értékesek, de a baloldalon szereplők még értékesebbek.
- Egyének és együttműködésük a folyamatok és eszközök helyett
- Működő szoftver az átfogó dokumentáció helyett
- Együttműködés az ügyféllel a szerződés érvényesítése helyett
- Reagálás a változásokra a terv követése helyett.
Az Agilis Kiáltványt alkotó elvek
- Legfontosabbnak azt tartjuk, hogy az ügyfél elégedettségét a működő szoftver mielőbbi és folyamatos szállításával vívjuk ki.
- Elfogadjuk, hogy a követelmények változhatnak akár a fejlesztés vége felé is. Az agilis eljárások a változásból versenyelőnyt kovácsolnak az ügyfél számára.
- Szállíts működő szoftvert gyakran, azaz néhány hetenként vagy havonként, lehetőség szerint a gyakoribb szállítást választva.
- Az üzleti szakértők és a szoftverfejlesztők dolgozzanak együtt minden nap, a projekt teljes időtartamában.
- Építsd a projektet sikerorientált egyénekre. Biztosítsd számukra a szükséges környezetet és támogatást, és bízz meg bennük, hogy elvégzik a munkát.
- A leghatásosabb és leghatékonyabb módszer az információ átadásának a fejlesztési csapaton belül, a személyes beszélgetés.
- A működő szoftver az elsődleges mércéje az előrehaladásnak.
- Az agilis eljárások a fenntartható fejlesztést pártolják. Fontos, hogy a szponzorok, a fejlesztők és a felhasználók folytonosan képesek legyenek tartani egy állandó ütemet.
- A műszaki kiválóság és a jó terv folyamatos szem előtt tartása fokozza az agilitást.
- Elengedhetetlen az egyszerűség, azaz az elvégezetlen munkamennyiség maximalizálásának művészete.
- A legjobb architektúrák, követelmények és rendszertervek az önszerveződő csapatoktól származnak.
- A csapat rendszeresen mérlegeli, hogy miképpen lehet emelni a hatékonyságot, és ehhez hangolja és igazítja az működését.
- Initial
- Diagnosing
- Establishing
- Acting
- Learning
A szoftver előállítási képesség érettségi modellje Minden szoftver fejlesztést (előállítást) végző szervezet sorban ugyanazokon a fázisokon megy keresztül. Az elkészül szoftver minősége a szoftver (előállítási) folyamat minőségén múlik. (CMM Capability Maturity Model)
Fekete doboz, az eredmény előrejelezhetetlen, a siker pedig egyéni odafigyelés és erőfeszítés eredménye.
Fekete dobozok sorozata. Van kód újrafelhasználás, hasonló projektek esetén megismétlődik az eredmény, az alpfető fejlesztési folyamat felismerhető.
Szabványos: nincs fekete doboz, a folyamat áttekinthető. A folyamat dokumentált, szabványosított, és szoftver előállításhoz minden projekt a szervezet szabványos folyamatait használja.
Előrejelezhető: A folyamat és a termék mennyiségi mérőszámokkal ellenőrzött. A folyamat méréséhez és megítéléséhez részletes adatok állnak rendelkezésre.
Folyamatosan fejlődő: A folyamat részei cserélődnek, a rossz kikerül.
A biztonsági szempontokat a rendszer teljes életciklusa során érvényesíteni kell.
Egyszerű definíció, amit minden érdekelt fél elfogad. (Pl. Fejlesztők, ügyfelek, vezetők)
- Tisztázza a rendszer célját és az alapvető követelményeket.
- Nem kell, hogy hosszabb legyen néhány bekezdésnél.
Egy lista a fejlesztendő rendszer képességeiről. Fontos, hogy minden érdekelt fél elfogadja. Ez adja az alapot a fejlesztéshez, és a fejlesztés végén jó eszköz, az eredmény ellenőrzéséhez.
- Tervezni kell, hogy csak a jogosult felhasználók érhessék el a rendszert, és ők se léphessék túl a jogosultságukat.
- A bizalmas adatokat biztosítani kell megfelelő titkosítással.
- A számonkérhetőség és nyomozhatóság érdekében a rendszernek megfelelő naplót kell vezetnie.
- A rendszer rendelkezésreállását a fontosságának megfelelően kell biztosítani.
Ez a tevékenység nem egyszeri alkalom, ha változik a terv újra kell végezni.
A működési struktúra (pl. üzemeltetési környezet) elemei közti kommunikáció meghatározása, kezdeti ütemtervek kidolgozása.
Ha a terv kész, akkor az összes résztvevővel felül kell vizsgáltatni, hogy a tervek jók-e?
A fejlesztés során érdemes a fejlesztett kódot több szemmel megvizsgálni.
A fejlesztők és a felhasználók ellenőrzik, hogy a rendszer az általános, és a szokatlan/ritka feltételek mellett is az elvárt eredményt adja. A forgatókönyveket előre rögzítik.
A rendszer üzembehelyezésétől kezdve folyamatosan biztosítani kell a működőképességet változó környezetben. Fontos, hogy minden változás formális változás felügyeleti programban történik.
Ki kérheti, költség/előny analízis, prioritás meghatározása.
A fejlesztő elemzi, teszteli, dokumentálja és a telepítéshez eszközt ad.
Ha a fejlesztés elkészült, akkor ez befogadja.
- Fontos lépés annak ellenőrzése, hogy a fejlesztés során használt debug kapcsolók és egyéb hibakezeléshez használt eszközök kikerültek az eredményből.
- Acceptance testing: a változás a felhasználók számára érthető és használható
- Configuration identification
- Configuration control
- Configuration status accounting
- Configuration audit
- Black-box nem ismerjük a belső felépítést (forráskódot)
- White-box birtokában vagyunk a forráskódnak.
- Gray-box
- Dynamic a rendszert működés közben teszteljük
- Static a rendszer forráskódját elemzőprogramokkal vizsgáljuk
- Unit test Egyszerre egy meghatározott részt tesztelünk, rögzített körülményekkel
- Integration test Az együttműködő részek mőködését vizsgáljuk a követelmények szerint.
- Acceptance Vizsgáljuk, hogy a rendszer megfelel-e a felhasználó/ügyfél kéréseinek.
- Regression Egy-egy változás után a rendszerünk még mindig megfelel-e képességekben (kiszolgált funkciókban, működésben), teljesítményben és biztonsági kérdésekben az elvártaknak.
Szolgáltatás használatához ad egy felületet, amit nem egy felhasználó (ember) hanem egy alkalmazás ér el (pl.: email szolgáltató/adatbázis/felhőszolgáltatás). A külső szolgáltatóknál azonosítani kell magunkat, hogy jogosultak legyünk használni a szolgáltatást. Az azonosításhoz pedig titkot kell használni (név+jelszó, api kulcs, stb.)
+---------------------+ +------------------+
| Szolgáltatás | | Alkalmazás |
|---------------------| |------------------|
| | | |
| | | |
| | | |
| | | |
| +---------+ | |
| | API |<--------HTTP/HTTPS-----------------------+| |
| |---------| | |
| | |+----XML/JSON----------------------------->| |
| | | | |
+-----------+---------+ +------------------+
A titkokra nagyon kell vigyázni! A titkokat
pl:
- fejlesztés közben a fejlesztőnek az eléréshez használnia kell
- a tesztrendszeren teszteléshez használni kell
- az éles rendszeren használni kell
DE
- a fejlesztőnek nem feltétlenül kell tudnia
- a tesztelőnek nem feltétlenül kell tudnia
- a felhasználónak nem feltétlenül kell tudnia
Első lépés: a forráskódtól/telepítéstől függetleníteni kell!
A felhőszolgáltatók lehetőséget adnak az alkalmazásbeállítások felülírására, így nem kell a telepítésnek a kulcsokat/titkokat tartalmaznia.
De használhatjuk a Docker secret megoldását, vagy az Azure-ban a key vault.
A lényeg: sem a forráskód, sem a telepítő csomag ne tartalmazzon titkokat!
- A hozzáférési jogosultságok kialakítása és ellenőrzése. A lekérdezési és módosítási jogosultságok megfelelő kezelése.
- Titok nem kerülhet be a kódtárba!!!!!
12 tényezős alkalmazásfejlesztés 12 Factor App
+----------------------------------+
+----------------------+ |
| | | |
| | | |
| Quality | | |
| Assurance | | |
| | | Software Development |
| | | |
+---|----------------|--+ | |
| | |XX| | |
| | |XX| | |
| +----------------------+ |
| | | |
| | | |
| +----------------------------------+
| Operations |
| |
| |
+-----------------------+
Nincs külön fejlesztés, üzemeltetés és minőségbiztosítás, hanem a feladat az, hogy minőségileg biztosított kockázatmentes és nagyon sűrű telepítés és biztonságos üzemeltetés jöjjön létre.
A rendszer üzemeltetőjével szemben támasztott elvárások gyűjteménye.
- System Uptime (Rendszer rendelkezésreállása -a teljes működési idő százalékában) Példa: 1 nap 24 óra, 2460=1440 perc, 144060=86400 másodperc. Ennek 1%-a: 864 másodperc=14 perc 24 másodperc. 99%: napi 14 perc 24 másodperc maximális kiesés 99.9%: napi 1 perc 26,4 másodperc 99.99%: napi max 8,64 másodperc
- Maximum consecutive downtime (Maximális egybefüggő állásidő - másodpercben, percben, stb.)
- Peak load (legnagyobb terhelés)
- Average load (átlagos terhelés)
- Responsibility for diagnostics (A diagnosztikáért felelős)
- Failover time (áthidalási idő, amennyiben redundancia van a rendszerben)
Beviteli adatok ellenőrzése. Cél: a nem használható adatok, be se kerüljenek a rendszerbe.
dotnet template segítségével webalkalmazást készítettünk
dotnet new mvc --auth Individual --use-local-db
A kapott adat típusa megfelelő. (pl.: Szám, szöveg, dátum, stb.)
A kapott adat a megadott határokon belül van
A kapott adat megfelel formai szabályoknak (pl. email cím)
Azonosító, telefonszám, stb. adatok bevitelénél
Mindig csak azokat az erőforrásokat kell elindítani, megnyitni, stb., amik valóban szükségesek. Ne futtassuk az alkalmazásunkat admin-ként.
Nem szabad a titkokat napvilágra engedni. Titkos adatokat nem szabad nem titkosított módon tárolni.
Nincs egyetlen megoldás, használjunk olyan sok egymást támogató megoldást, amennyit csak lehet.
Részegységenként kezeljük a biztonsági rendszert, az egyes függőségeket külön-külön. Az összetett rendszer olyan biztonságos, mint a leggyengébb részegysége.
Több tanulmány kimutatta, egy jól beállított szakértői rendszer jobb döntéseket képes hozni, mint egy emberi szakértő.
- nem terheli emóció
- mindig rendelkezésre áll
Két részből állnak
- ha a hurrikán 4-es vagy annál magasabb kategóriájú vihar, akkor az árvíz eléri a tengerszint feletti 20 láb magasságot
- Ha a hurrikánnal járó szél meghaladja a 120 mérföldet, akkor a favázas épületek megsemmisülnek
- Ha a hurrikán szezon később kezdődik, akkor a vihar erősebb lesz, ha megközelíti a partot.
4-es kategóriájú vihar érkezik + a szél sebessége 140 mérföld => evakuálás
megadjuk a megfelelő adatokat, majd a rendszer levonja a következtetéseket
Egy elméletet képes ellenőrizni: megadjuk a végeredményt, és visszaadja, hogy ehhez milyen bemeneti adatok esetén következik a végeredmény.
Fuzzy logic (elmosódott halmazok logikája)
példa:
^
Igaz +---+--+
| |
| |
| +-----+
| |
| |
| |
| +------+
| |
| |
| +------+
| |
| |
| |
| |
| |
| |
| +----+
| |
| |
| |
| |
Hamis +----5----10---15---20----25---30---35----40------------------------------------>
- Nem csak igaz és hamis létezik, hanem átmenet: egy igazságért, annak a bizonyosságnak a foka, hogy az adott állítás igaz vagy nem.
- Fuzzyfication Egy függvény, ami minden bemeneti elemhez és állításhoz az igazságértéket rendeli.
- Inference Hozzárendeli az igazságértéket az adott állításokból összeállított következtetéshez.
- Composition Minden lehetséges szabálycsomagot összeállít.
- Defuzzication Az adott szabálycsomag igazságértékét számolja ki.
Sikerek:
- Japán gyorsvasút fékezőrendszere (1985 Hitachi)
- Altatási mélység szabályozás
lásd: Philips kapitány (Captain Phillips, 2013, Tom Hanks) Isty: eredeti pilóta neve: Chesley B. Sullenbergert
Lineáris számítási igényű, eredménnyel tanítható
+---+ +--+
| 1 | + +---+ +--------->| 1| 1 <- ezen nem kell sokat változtatni
+---+ | | | +-----------------+ +--+
++----0.7---->--> | |
| +---+
+---+ | +--+
| 0 |+-> | 1| 0 <- Az ide vezető útvonalak súlyát növelni kell
+---+ | +-------------->| |
| ^ +--+
| |
+---+ | +----+ |
| 0 |+>+----0.1-------> | |+------------+
+---+ ^ | | | +--+
| +----+ | | 0| 1 <- az ide vezető útvonalak súlyát pedig csökkenteni kell
| +-------------> | |
+---+ | +--+
| 1 | +
| |+-------->+
+---+ | +-----+ +--+
+------->| |+-------------------------->| 1| 1 <-ezen nem kell sokat változtatni
+---+ ^ | | +--+
| 0 | | +-----+
| |+-------->+
+---+
Input réteg Számítási réteg Output réteg
Három réteg
-
Input
-
Számítási
-
Output
-
A számítási réteg több rétegből állhat.
-
Az egyes "neuronok" értékeit a kapcsolatok súlyával megszorozva (lineáris kombinációt véve) adja a cél neuron állapotát
-
Az eredmény és az elvárt eredmény különbségét felhasználva
- hangfelismerés
- kézírás felismerés
- arcfelismerés
- időjárás előrejelzés
- összefüggések/következmények feltárása
Nem műveletet végez hanem információt szolgáltat. Gyakran szakértői rendszer van mögötte. Biztonsági alkalmazásokban is használják.