Wykład 7. Projektowanie kodu oprogramowania



Podobne dokumenty
Możliwe strategie tworzenia niezawodnego oprogramowania:

Dlaczego testowanie jest ważne?

Maciej Oleksy Zenon Matuszyk

Zasady organizacji projektów informatycznych

Historia modeli programowania

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką?

Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz

Etapy życia oprogramowania

INFORMATYKA Pytania ogólne na egzamin dyplomowy

Faza strategiczna. Synteza. Analiza. Instalacja. Faza strategiczna. Dokumentacja. kodowanie implementacja. produkt konserwacja

Testowanie oprogramowania

Modelowanie i Programowanie Obiektowe

Testowanie i walidacja oprogramowania

Etapy życia oprogramowania. Modele cyklu życia projektu. Etapy życia oprogramowania. Etapy życia oprogramowania

Inżynieria oprogramowania. Faza implmentacji. wykład 7

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

MODELE CYKLU ŻYCIA OPROGRAMOWANIA (1) Model kaskadowy (często stosowany w praktyce do projektów o niewielkiej złożonoś

Wykład I. Wprowadzenie do baz danych

Tematy seminariów wg Roger S. Pressman, Praktyczne podejście do oprogramowania, WNT, Zofia Kruczkiewicz

Tematy seminariów wg Roger S. Pressman, Praktyczne podejście do oprogramowania, WNT, Zofia Kruczkiewicz

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>

Podstawy modelowania programów Kod przedmiotu

poziom: Core wersja: 2.6 moduł: B : Wytwarzanie SYLLABUS

Wykład 1 Inżynieria Oprogramowania

PRZEWODNIK PO PRZEDMIOCIE

Egzamin / zaliczenie na ocenę*

Uniwersytet w Białymstoku Wydział Ekonomiczno-Informatyczny w Wilnie SYLLABUS na rok akademicki 2012/2013

Jakość w procesie wytwarzania oprogramowania

Cele przedsięwzięcia

Czujniki obiektowe Sterowniki przemysłowe

Zaawansowane programowanie w języku C++

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Faza Określania Wymagań

Oceny z prezentacji INKU011S. Zofia Kruczkiewicz

Metodyka projektowania komputerowych systemów sterowania

Pojęcie bazy danych. Funkcje i możliwości.

Szczególne problemy projektowania aplikacji internetowych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) stacjonarne (stacjonarne / niestacjonarne)

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Język programowania. Andrzej Bobyk

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Porównanie metod i technik testowania oprogramowania. Damian Ryś Maja Wojnarowska

Inżynieria Programowania Zarządzanie projektem. Plan wykładu. Motto. Motto 2. Notatki. Notatki. Notatki. Notatki.

Usługa: Testowanie wydajności oprogramowania

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Inżynieria Programowania Zarządzanie projektem

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Przedsięwzięcia Informatyczne w Zarządzaniu

NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD

Spis treści Wstęp 1. Wprowadzenie 2. Zarządzanie ryzykiem systemów informacyjnych

Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH. Modeling and analysis of computer systems Forma studiów: Stacjonarne

INŻYNIERIA OPROGRAMOWANIA

Błędy procesu tworzenia oprogramowania (Badania firmy Rational Software Corporation)

INKS105 ( INK9117 ) Podstawy inżynierii oprogramowania

Lokalizacja Oprogramowania

Zarządzanie i realizacja projektów systemu Microsoft SharePoint 2010

Projekt dotyczy stworzenia zintegrowanego, modularnego systemu informatycznego wspomagającego zarządzanie pracownikami i projektami w firmie

Zagadnienia egzaminacyjne INFORMATYKA. stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

Inżynieria oprogramowania - opis przedmiotu

PRZEWODNIK PO PRZEDMIOCIE

Ogólne zasady projektowania algorytmów i programowania

Wytwórstwo oprogramowania. michał możdżonek

Programowanie obiektowe - 1.

2.11. Monitorowanie i przegląd ryzyka Kluczowe role w procesie zarządzania ryzykiem

Zapisywanie algorytmów w języku programowania

Bazy danych 2. Wykład 1

WPROWADZENIE DO UML-a

Inżynieria Oprogramowania. Inżynieria Oprogramowania 1/36

SVN. 10 października Instalacja. Wchodzimy na stronę i pobieramy aplikację. Rysunek 1: Instalacja - krok 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Usługa: Audyt kodu źródłowego

Certified IT Manager Training (CITM ) Dni: 3. Opis:

Tematy seminariów wg Roger S. Pressman, Praktyczne podejście do oprogramowania, WNT, Zofia Kruczkiewicz

Podstawy Programowania Obiektowego

Wstęp. Inżynieria wymagań. Plan wykładu. Wstęp. Wstęp. Wstęp. Schemat procesu pozyskiwania wymagań

PRZEWODNIK PO PRZEDMIOCIE

Galileo - encyklopedia internetowa Plan testów

Modelowanie procesów współbieżnych

Podstawy programowania III WYKŁAD 4

PROJEKTOWANIE. kodowanie implementacja. PROJEKT most pomiędzy specyfikowaniem a kodowaniem

Testowanie oprogramowania. Piotr Ciskowski

Inżynieria Programowania - Projektowanie architektoniczne

Mariusz Trzaska Modelowanie i implementacja systemów informatycznych

Dokument Detaliczny Projektu

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Załącznik Nr 1. Istotne warunki zamówienia do przetargu nieograniczonego na wykonanie pakietu usług programistycznych

PRZEWODNIK PO PRZEDMIOCIE

Przesłanki powstania książki... xvi Dla kogo przeznaczona jest ta książka?... xvi Co znajdziemy wewnątrz książki?... xvii

Projektowanie oprogramowania. Wykład Weryfikacja i Zatwierdzanie Inżynieria Oprogramowania Kazimierz Michalik

Cykle życia systemu informatycznego

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

MODELOWANIE SYSTEMU INFORMATYCZNEGO WSPOMAGAJĄCEGO DZIAŁALNOŚĆ USŁUGOWĄ W ŚRODOWISKU OBIEKTOWO ZORIENTOWANYM.

Studia podyplomowe PROGRAM NAUCZANIA PLAN STUDIÓW

Określanie wymagań. Cele przedsięwzięcia. Kontekst przedsięwzięcia. Rodzaje wymagań. Diagramy przypadków użycia use case diagrams

PRZEWODNIK PO PRZEDMIOCIE

PROGRAM PRAKTYKI ZAWODOWEJ. Technikum Zawód: technik informatyk

Transkrypt:

Wykład 7 Projektowanie kodu oprogramowania

Treść wykładu cykl życiowy oprogramowania zagadnienia inżynierii oprogramowania tworzenie oprogramowania z gotowych elementów tworzenie niezawodnego oprogramowania unikanie błędów niebezpieczne techniki kontrola typów sposoby aktywnej weryfikacji oprogramowania rodzaje testów wykrywanie błędów

Cykl życiowy oprogramowania Wymagania Tekst Analiza/Projekt Implementacja Testowanie Pielęgnacja Zarządzanie projektem - Prototypowanie Malarz menu Wydajność Model danych Malarz ekranu Śledzenie Zarządzanie modyfikacjami Model procesu Języki programowania Repozytorium Biblioteka funkcji Śledzenie SQL Testowani e Zarządzanie dystrybucją Zarządzanie wersjami

Przejrzysta struktura programu testowanie przenoszenie pielęgnacja rozszerzenie reorganizacja zrozumienie

Programiści vs. Projektanci istnieje podejście, że programiści nie powinni podejmować decyzji projektowych a projektanci nie powinni interesować się szczegółami kodowania cechy podejścia niewystarczająca komunikacja między implementatorami a projektantami prowadzi do opóźnień, nieefektywności i wielokrotnie powracających problemów niewystarczające pole do inicjatywy wśród implementatorów prowadzi do braku rozwoju profesjonalnego, braku inicjatywy

Kryzys oprogramowania stosowanie technik i i narzędzi ułatwiających pracę nad złożonymi projektami usystematyzowanie procesu wytwarzania oprogramowania planowanie i monitorowanie tworzenie oprogramowania wymaga profesjonalnego podejścia dekompozycja problemu na mniejsze komponenty ponowne użycie gotowych komponentów dostosowanie metod tworzenia oprogramowania do naturalnej ludzkiej percepcji

Zagadnienia inżynierii oprogramowania sposoby prowadzenia przedsięwzięć informatycznych techniki zwiększania niezawodności oprogramowania sposoby testowania oprogramowania sposoby przygotowania dokumentacji technicznej i użytkowej procedury kontroli jakości metody redukcji kosztów konserwacji, usuwania błędów, dodawania rozszerzeń techniki pracy zespołowej

Tworzenie oprogramowania z gotowych elementów możliwość redukcji nakładów związanych z oprogramowaniem poprzez wykorzystanie podobieństwa gotowego oprogramowania wykorzystywane są biblioteki języki czwartej generacji pełne aplikacje ponowne użycie zakup elementów ponownego użycia od dostawców przygotowanie elementów do ponownego użycia wysoka niezawodność zmniejszenie ryzyka efektywne wykorzystanie zasobów stosowanie standardów koszty związane z przygotowaniem elementów do ponownego użycia uzależnienie się od dostawcy

Szacowanie kosztu oprogramowania szacowanie rozwiązania dla każdego alternatywnego rozwiązania koszt oprogramowania koszt sprzętu koszt wyjazdów i szkoleń koszt zakupu narzędzi koszt związany z nakładami pracy

Techniki szacowania nakładów pracy modele algorytmiczne atrybuty liczbowe oraz opisowe, przypisywanie różnych wag rozmiar systemu liczony w liniach kodu źródłowego ekspert/eksperci ocena przez analogię dostęp do przedsięwzięć poprzednio realizowanych prawo Parkinsona zaplanowane nakłady zawsze zostaną wyczerpane wycena zgodnie z oczekiwaniami klienta koszty szacowane na podstawie oczekiwań klienta oraz konkurencji szacowanie wstępujące podział na mniejsze zadania

Tworzenie niezawodnego oprogramowania niezawodność wzrastające znaczenie niezawodności oprogramowania duże koszty związane z błędnie działającymi funkcjami oprogramowania kompromis między efektywnością a niezawodnością zwiększenie niezawodności unikanie błędów tolerowanie błędów

Unikanie błędów unikanie niebezpiecznych technik programowania stosowanie zasady ograniczonego dostępu hermetyzacja, reguły zakresu, podział pamięci stosowanie języków z kontrolą typów i kompilatorów sprawdzających zgodność typów stosowanie języków o wyższej klasie abstrakcji stosowanie standardów dla interfejsów wymiany danych pomiędzy modułami śledzenie warunków brzegowych - pętle z zerową ilością przebiegów, niezainicjowane zmienne, wartości zerowe wykorzystywanie gotowych komponentów minimalizacja różnic pomiędzy modelem pojęciowym a modelem implementacyjnym

Niebezpieczne techniki stosowanie liczb ze zmiennym przecinkiem arytmetyka na wskaźnikach obliczenia równoległe bazujące na zależnościach czasowych - synchronizacja przerwania i wyjątki rekursja przydzielanie oraz zwalnianie pamięci różne działanie tych samych procedur oraz funkcji w zależności od zmiennych parametrów wejściowych brak specyfikacji efektów ubocznych funkcji złożone wyrażenia bez stosowania operatorów priorytetu brak synchronizacji i blokowania transakcji, funkcji działających na wspólnych zasobach

Kontrola typów typ jest przypisany do zmiennej, wyrażenia, danej, funkcji, procedury, operacji, metody, parametru, procedury, wyjątku, zdarzenia typ specyfikuje rodzaj przyjmowanej wartości typ narzuca strukturę bytu programistycznego, specyfikuje parametr oraz wynik typ wspomaga kontrolę poprawności programu programista poprzez typ wyraża rolę jak byt programistyczny przyjmuje w programie kontrola typów okazała się skutecznym mechanizmem usuwania błędów programistycznych

System statycznej kontroli typów specyfikacje wszystkich typów oraz zmiennych specyfikacje w postaci sygnatur wszystkich parametrów oraz funkcji specyfikacja interfejsów, modułów, klas specyfikacja parametrów wejściowych oraz wyjściowych przekazywanych poprzez wartość lub referencję specyfikacja reguł wnioskowania o typie

Tolerowanie błędów program działa nawet wtedy kiedy zawiera błędy tolerowanie błędów oznacza wykrycie przez program błędu wyjścia z błędu poprzez poprawne zakończenie pracy modułu w którym nastąpił błąd naprawa programu poprzez jego zmianę sposoby automatycznego wykrywania błędów asercje sprawdzające poprawność badanych danych w postaci dodatkowych elementów kodu porównywanie wyników różnych wersji modułów: programowanie n-wersyjne przez niezależne zespoły programistów

Transakcje transakcja umożliwia powrót do stanu systemu przed rozpoczęciem jej działania po wystąpieniu dowolnego błędu podstawowa technika zwiększenia niezawodności oprogramowania działającego na bazie danych cechy transakcji atomowość - w ramach jednej transakcji wykonują się albo wszystkie operacje albo żadna spójność - transakcja nie narusza spójności bazy danych z przed wykonania transakcji izolacja - wykonywana transakcja nie wie o działaniu innych transakcji i nie musi uwzględniać ich działania, czynności wykonywane przez daną transakcję są niewidoczne dla innych transakcji aż do jej zakończenia trwałość - po zakończeniu transakcji jej skutki działania są trwale zapamiętane w bazie danych i nie mogą być odwrócone przez zdarzenia losowe

Języki proceduralne jako środowisko implementacyjne procesy i moduły wysokiego poziomu mogą odpowiadać całym aplikacjom grupy procedur i funkcji odpowiadają poszczególnym funkcjom systemu dają niewielkie możliwości ograniczenia dostępu do danych składnice danych odpowiadają strukturom danych

Języki obiektowe jako środowisko implementacyjne proste odwzorowanie modelu konceptualnego do poziomu implementacji wymagają współpracy z bazą danych większość języków obiektowych to języki hybrydowe powstałe w wyniku wzbogacenia języków proceduralnych o cechy obiektowe

Relacyjne bazy danych wielodostęp automatyczna weryfikacja więzów integralności autoryzacja dostępu użytkowników niezawodność skalowalność praca w środowisku rozproszonym dostęp do danych z wykorzystaniem SQL, ODBC, JDBC brak hermetyzacji i innych cech obiektowości

Obiektowe bazy danych implementacja modelu obiektowego z wykorzystaniem narzędzi o wyższej klasie abstrakcji uproszczenie i usystematyzowanie procesu projektowania i implementacji zmniejszenie dystansu pomiędzy fazami analizy, projektowania i programowania model obiektowy wprowadza wiele pojęć obiektowości wspomagających proces projektowania oraz implementacji pojęcia obiektowe złożone obiekty, tożsamość, powiązania, klasy, hierarchia dziedziczenia, metody, hermetyzacja, późne wiązania, polimorfizm, trwałość

Obiektowo-relacyjne bazy danych aspekty obiektowości wprowadzane są do systemów relacyjnych baz danych podejście hybrydowe lub obiektowo-relacyjne zachowanie sprawdzonych technologii relacyjnych wraz z językiem SQL

Sposoby aktywnej weryfikacji oprogramowania przeglądy techniczne sprawdzenie czy oprogramowanie jest zgodne z wymaganiami użytkownika sprawdzenie czy komponenty oprogramowania są weryfikowalne z punktu widzenia użytkownika testowanie modułów oprogramowania testowanie integracyjne modułów oprogramowania testowanie oprogramowania przez twórców oprogramowania testowanie oprogramowania przez użytkowników oprogramowania kontrola jakości oprogramowania pod względem przyjętych norm

Audyt oprogramowania niezależny przegląd i ocena jakości oprogramowania zapewnienie zgodności z wymaganiami na oprogramowanie oraz ze specyfikacją, założeniami, standardami osoby niezależne od zespołu projektowego

Rodzaje testów wykrycie jak największej liczby błędów wykrycie najczęściej powtarzających się błędów wykonywanie programów oraz porównywanie wyników z wynikami poprawnymi analiza kodu źródłowego

Fazy w testowaniu oprogramowania testy modułów wykonywane bezpośrednio po zakończeniu kodowania modułu testy systemu integracja modułów wraz z testowaniem poszczególnych podsystemów oraz systemu jako całości testy akceptacyjne przez użytkownika oprogramowanie jest przekazywane użytkownikowi do przetestowania

Elementy oprogramowania podlegające testowaniu wydajność systemu oraz jego poszczególnych funkcji zgodność interfejsu z wymaganiami użytkowników własności operacyjne systemu testy zużycia zasobów zabezpieczenie systemu przenośność oprogramowania niezawodność oprogramowania na błędy odtwarzalność oprogramowania po zaistniałych błędach wpływ błędów oprogramowania na inne składniki

Elementy oprogramowania podlegające testowaniu c.d. kompletność i jakość funkcji systemu zachowanie zasobów łatwość modyfikacji oprogramowania funkcjonowanie oprogramowania przy dużych obciążeniach skalowalność systemu akceptowalność oprogramowania kompletność i jakość dokumentacji

Testy statystyczne losowa konstrukcja danych wejściowych zgodna z prawdopodobieństwem pojawienia się tych danych określenie prawidłowego działania oprogramowania na tych danych porównanie wyników działania systemu z wynikami założonymi

Wykrywanie błędów - rodzaje testów testy funkcjonalne znajomość wymagań wobec testowanej funkcji testy powinny wykonywać osoby niezaangażowane w realizowanie funkcji testy strukturalne zakładają znajomość sposobu implementacji testowanych funkcji

Testy systemu testowanie wstępujące początkowo testowane są pojedyncze moduły następnie testowane są moduły wyższego poziomu testowanie odbywa się aż do osiągnięcia najwyższego poziomu trudności wynikające z zależności modułów od siebie, wprowadzanie implementacji szkieletowych testowanie zstępujące początkowo testowane są moduły wyższego poziomu moduły niższego poziomu zastępuje się implementacjami szkieletowymi po przetestowaniu modułów niższego poziomu do testowania dołączane są moduły niższego poziomu proces kończy się w momencie zintegrowania oraz przetestowania całego systemu

Testy wydajnościowe testy obciążeniowe zbadanie wydajności oraz niezawodności systemu podczas pracy z pełnym lub nadmiernym obciążeniem systemy wielodostępne oraz sieciowe - liczba użytkowników oraz transakcji testy odpornościowe sprawdzenie działania systemu w przypadku wystąpienia niepożądanych zakłóceń - brak zasilania, awaria sprzętowa, wprowadzenie niepoprawnych danych, sekwencja niepoprawnych poleceń