Software Engineering Fundamentals Svetlin Nakov774

download Software Engineering Fundamentals Svetlin Nakov774

of 49

Transcript of Software Engineering Fundamentals Svetlin Nakov774

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    1/49

    Software Engineering

    Fundamentals

    Svetlin NakovNational Academy for

    Software Development

    academy.devbg.org

    http://academy.devbg.org/http://academy.devbg.org/http://academy.devbg.org/http://academy.devbg.org/
  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    2/49

    Agenda

    1. Software engineering overview Requirements

    Design

    Construction Testing

    Project management

    2. Development methodologies overview The Waterfall development process

    Heavyweight methodologies

    Agile methodologies and XP

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    3/49

    About The Speaker

    Svetlin Nakov Founder and Chairman of BASD

    Director training and consulting

    activities, National Academy forSoftware Development (NASD)

    15 years of developer experience

    8 year as a professional software

    engineer, trainer and consultant

    Author of 4 books, 20 articles, and50 seminar lectures

    Lecturer in Sofia University and NBU

    http://www.devbg.org/http://www.nakov.com/books/signatures/http://www.devbg.org/dotnetbook/http://www.nakov.com/books/inetjava/
  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    4/49

    Software Engineering

    Requirements, Design,

    Construction, Testing

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    5/49

    What is SoftwareEngineering?

    Software engineeringis the

    application of a systematic,

    disciplined, quantifiable approachto the development, operation,

    and maintenance of software

    Defini t ion by IEEE

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    6/49

    Software Engineering

    Software engineering is: An engineering discipline that provides

    knowledge, tools, and methods for:

    Defining software requirements

    Performing software design

    Software construction

    Software testing

    Software maintenance tasks

    Software project management

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    7/49

    Software DevelopmentActivities

    Software development always includesthe following activities (to some extent):

    Requirements analysis

    Design

    Construction

    Testing (sometimes)

    These activities do not follow strictly oneafter another!

    Often overlap and interact

    SoftwareProject

    Management

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    8/49

    Software Requirements

    Functional, Non-functional

    Requirements, SRS

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    9/49

    Software Requirements

    Software requ irementsdefine thefunctionality of the system

    Answer the question "what?", not

    "how?"

    Define constraints on the system

    Two kinds of requirements

    Funct ionalrequirements

    Non-funct ionalrequirements

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    10/49

    Requirements Analysis

    Requ irements analysisstarts from avision about the system

    Customers don't know what they need!

    Requirements come roughly and arespecified and extended iteratively

    Prototypingis often used, especially for

    the user interface

    The outcome is the Software

    Requirements Specification (SRS)

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    11/49

    Software RequirementsSpecification (SRS)

    The Software Requ irementsSpecif icat ion (SRS)is a formalrequirements document

    It describes in details: Functional requirements

    Business processes

    Actors and use-cases

    Non-functional requirements

    E.g. performance, scalability, etc.

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    12/49

    Software Requirements

    It is always hard to describe anddocument the requirements incomprehensive and not ambiguous way

    Good requirements save time and money

    Requirements always change during theproject!

    Good software requirementsspecification reduces the changes

    Prototypes significantly reduce changes

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    13/49

    Software Requirements

    Specification and UIPrototype Examples

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    14/49

    Software Architectureand Software Design

    S ft A hit t d

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    15/49

    Software Architecture andSoftware Design

    Software designis a technicaldescription about how the system willimplement the requirements

    The sys tem archi tecturedescribes: How the system will be decomposed

    into subsystems (modules)

    Responsibilities of each module

    Interaction between modules

    Platforms and technologies

    S t A hit t

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    16/49

    System ArchitectureDiagram Example

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    17/49

    Software Design

    Detailed Design

    Describes the internal module structure

    Interfaces, data design, process design

    Object-Oriented Design Describes the classes, their

    responsibilities, relationships,dependencies, and interactions

    Internal Class Design

    Methods, responsibilities, algorithms and

    interactions between them

    S ft D i D t

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    18/49

    Software Design Document(SDD)

    The Software Design Document (SDD)isa formal description of the architectureand design of the system

    It contains:

    Architecture design

    Modules and their interaction (diagram)

    For each module

    Process design (diagrams)

    Data design (E/R diagram)

    Interfaces design (class diagram)

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    19/49

    Software Design

    Document Example

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    20/49

    Software Construction

    Implementation, Unit Testing,

    Debugging, Integration

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    21/49

    Software Construction

    During the so f tware construct ionphasedevelopers create the software

    Sometimes called implementat ionphase

    It includes: Internal method design

    Writing code

    Writing unit tests (sometimes)

    Testing and debugging

    Integration

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    22/49

    Writing the Code

    Codingis the process of writing theprogramming code (the source code)

    The code strictly follows the design

    Developers perform in ternal methoddesignas part of coding

    The sou rce codeis the output of the

    software construction process Written by developers

    Can include unit tests

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    23/49

    Testing the Code

    Test ingchecks whether the developedsoftware conforms to the requirements

    Aims to identify defects (bugs)

    Developers test the code after write it At least run it to see the results

    Unit test ingis even better

    Units tests can be repeated many times

    System testing is done by QA engineers

    Unit testing is done by developers

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    24/49

    Debugging

    Debuggingaims to find the source ofalready identified defect and to fix it

    Performed by developers

    Steps in debugging: Find the defect in the code

    Identify the source of the problem

    Identify the exact place in code causing it

    Fix the defect

    Test to check if the fix is correct

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    25/49

    Integration

    Integrationis putting all pieces together Compile, run and deploy the modules as

    single system

    Test to identify defects

    Integration strategies

    Big bang, top-down and bottom-up

    Continuous integration

    Coding != Software

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    26/49

    Coding != SoftwareEngineering

    Inexperienced developers considercoding the core of development

    In most projects coding is only 20% ofthe project activities!

    The important decisions are taken duringthe requirements analysis and design

    Documentation, testing, integration,maintenance, etc. are often disparaged

    Software engineering is not just coding!

    Programmer!= so ftware engineer

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    27/49

    Software Verification

    and Testing

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    28/49

    Software Verification

    What is so ftware veri f icat ion? It checks whether the developed software

    conforms to the requirements

    Performed by the Software QualityAssurance Engineers (QA)

    Two approaches:

    Formal reviewsand inspect ions

    Different kinds oftest ing

    Cannot certify absence of defects!

    Can only decrease their rates

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    29/49

    Software Testing

    Test ingchecks whether the developedsoftware conforms to the requirements

    Testing aims to find defects (bugs)

    Black-box and white-box tests

    Unit tests, integration tests, system tests,acceptance tests

    Stress tests, load tests, regression tests

    Tester engineers can use automated testtools to record and execute tests

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    30/49

    Software Testing Process

    Test planning Establish test strategy and test plan

    During requirements and design phases

    Test development

    Test procedures, test scenarios, testcases, test scripts

    Test execution

    Test reporting

    Retesting the defects

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    31/49

    Test Plan and Test Cases

    The test p lanis a formal document thatdescribes how tests will be performed

    List of test activities to be performed to

    ensure meeting the requirements Features to be tested, testing approach,

    schedule, acceptance criteria

    Test scenarios and test cases Test scenarios stories to be tested

    Test cases tests of single function

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    32/49

    Test Plans and Test

    Cases Example

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    33/49

    Software Project

    Management

    What is Project

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    34/49

    What is ProjectManagement?

    Project managementis the discipline oforganizing and managing resources inorder to successfully complete a project

    Successfully means within definedscope, quality, time and cost constraints

    Project constraints:Scope

    Quality

    Project Success

    What is Software Project

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    35/49

    What is Software ProjectManagement?

    Software pro ject management Management discipline about planning,

    monitoring and controlling softwareprojects

    Project p lann ing

    Identify the scope, estimate the workinvolved, and create a project schedule

    Project mon i tor ing and con t ro l

    Keep the team up to date on the project'sprogress and handle problems

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    36/49

    What is Project Plan?

    The pro ject p lanis a document thatdescribes how the work on the projectwill be organized

    Contains tasks, resources, schedule,milestones, etc.

    Tasks have start, end, assignedresources (team members), % complete,dependencies, nested tasks, etc.

    Project management tools simplifycreating and monitoring project plans

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    37/49

    Project Plan Example

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    38/49

    Development

    Methodologies

    What is a Development

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    39/49

    What is a DevelopmentMethodology?

    A development methodo logyis a set ofpractices and procedures for creating

    software

    A set of rules that developers have tofollow

    A set of conventions the organization

    decides to follow

    A systematical, engineering approach for

    organizing software projects

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    40/49

    Development Methodologies

    The "Waterfall" Process Old-fashioned, not used today

    Rational Unified Process (RUP)

    Very formal, lots of documentation

    Microsoft Solutions Framework (MSF)

    Formal heavyweight approach Agile Development Processes

    E.g. Extreme Programming

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    41/49

    The Waterfall DevelopmentProcess

    Th W t f ll P

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    42/49

    The Waterfall Process

    The waterfall development process:

    Software

    Requirements

    SoftwareDesign

    Implementation

    (Coding)

    Verification

    (Testing)

    Operation

    (Maintenance)

    F l M th d l i

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    43/49

    Requirements

    System

    Requirements

    Formal Methodologies

    Formal methodologies are heavyweight!

    Software

    Requirements

    Analysis

    Coding

    Testing

    Operations

    Design

    Analysis

    Detailed

    Design

    PreliminaryDesign

    Document

    UI Design

    Document Test

    Plan

    Preliminary

    DesignSoftware

    Requirements

    SpecificationPrelim.

    Revie

    w

    Program

    Design

    Design Review

    OperatingInstructions

    Coding

    Integration

    Testing

    Usage

    Code

    Review

    Lots of documents,diagrams, etc.

    Final

    Design

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    44/49

    Agile Development

    Th A il M if t

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    45/49

    The Agile Manifesto

    Our highest priority is to satisfy the

    customer through early and continuous

    delivery of valuable software

    Manifesto for Agi le

    Th A il S i it

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    46/49

    Incremental Working sof twareover comprehensive

    documentation

    Cooperation

    Customer col laborat ionover contractnegotiation

    Straightforward

    Ind iv iduals and interact ion sover processesand tools

    Adaptive

    Responding to changeover following a plan

    The Agile Spirit

    A il M th d l i

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    47/49

    Agile Methodologies

    eXtreme Programming (XP) Scrum

    Crystal family of methodologies

    Feature-Driven Development (FDD)

    Adaptive Software Development (ASD)

    Dynamic System Development Model(DSDM)

    Agile Unified Process (AUP)

    Extreme Programming:

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    48/49

    Extreme Programming:The 12 Key Practices

    The Planning Game

    Small Releases

    Metaphor

    Simple Design

    Test-Driven Development Refactoring

    Pair Programming

    Collective Ownership

    Continuous Integration

    40-Hour Workweek

    On-site Customer

    Coding Standards

    Software Engineering

  • 7/28/2019 Software Engineering Fundamentals Svetlin Nakov774

    49/49

    Software EngineeringFundamentals

    Questions?