Unit I
Introduction: - Professional Software Development, Software Engineering Ethics
Headings and subheadings : -
       Professional Software Development
            o Software engineering
            o Software engineering diversity
            o Software engineering and the web
       Software engineering ethics
Professional Software Development
Software is not just the programs themselves but also all associated documentation and configuration
data that is required to make these programs operate correctly. A professionally developed software
system is often more than a single program. The system usually consists of a number of separate
programs and configuration files that are used to set up these programs. It may include system
documentation which describes the structure of the system; user documentation, which explains how
to use the system, and web sites for users to download recent product information.
Fig 1.1 frequently asked questions about software (Refer Textbook)
Two kinds of software products:-
       Generic products: these are standalone systems that are produced by a development
        organisation and sold on the open market to any customer who is able to buy them. Eg., word
        processors, databases, drawing packages
       Customised (or bespoke) products: These are systems that are commissioned by a particular
        customer. A software contractor develops the software especially for that customer.
        Examples of this type of software include control systems for electronic devices, systems
        written to support a particular business process and air traffic control systems.
Software Engineering: -
Fig 1.2 Essential attributes of good software (Refer Textbook)
A software process is a sequence of activities that leads to the production of a software product. There
are four fundamental activities that are common to all software processes.
       Software specification, where customers and engineers define the software that is to be
        produced and the constraints on its operation.
       Software development, where the software is designed and programmed.
       Software validation, where the software is checked to ensure that it is what the customer
        requires
       Software evolution, where the software is modified to reflect changing customer and market
        requirements.
Software Engineering Diversity: -
Software engineering is a systematic approach to the production of software that takes into account
practical costs, schedule, and dependability issues, as well as the needs of software customers and
producers.
The various types of applications include: -
    1.   Stand-alone applications
    2.   Interactive transaction based applications
    3.   Embedded control systems
    4.   Batch processing systems
    5.   Entertainment systems
    6.   Systems for modelling and simulation
    7.   Data collection systems
    8.   Systems of systems
Software Engineering and the Web: -
With the advent of the internet, any software product is put on the internet to widen its number of
users. Two types of software’s started being developed ever since.
        Web services
        Web applications
Web services are software components that deliver specific, useful functionality and which are
accessed over the Web.
Web applications are constructed by integrating these web services, which may be provided by
different companies.
Software Engineering Ethics: -
Ethics of a Software Engineer: -
        Confidentiality
        Competence
        Intellectual property rights
        Computer misuse
  Socio Technical Systems: -Complex systems, system engineering, system procurement, system
                               development, system operation.
Headings and sub headings: -
        Introduction
             o Complex systems
                      Emergent system properties
                      Non determinism
                      Success criteria
             o Systems engineering
            o     Stages of systems engineering
                       System procurement
                       System development
                       System operation
                               Human error
                               System evolution
Introduction: -
Socio technical systems include non-technical elements like people, processes, regulations, etc., as
well as technical components such as computers, software and other equipment. They are very hard
to understand as a whole and are divided into layers. These layers are: -
    1. The equipment layer: This layer is composed of hardware devices, some of which may be
       computers
    2. The operating system layer: - this layer interats with the hardware and provides a set of
       common facilities for higher software layers in the system.
    3. The communications and data management layer: - this layer extends the operating system
       facilities and provides an interface that allows interaction with more extensive functionality,
       such as access to remote systems, access to a system database, etc,. this is sometimes called
       middleware, as it is in between the application and the operating system.
    4. The application layer: this layer delivers the application specific functionality that is required.
       There may be many different application programs in this layer.
    5. The business process layer: at this level, the organisation business processes, which make use
       of the software system are defined and enacted.
    6. The organisational layer: this layer includes higher level strategic processes as well as business
       rules, policies, and norms that should be followed when using the system.
    7. The social layer: at this layer, the law and regulations of society that govern the operation of
       the system defined.
Complex systems: -
A system is a purposeful collection of interrelated components, of different kinds, which work
together to achieve some objective.
A complex system, consists of many diverse and autonomous but interrelated and interdependent
components or parts linked through many (dense) interconnections. Complex systems cannot be
described by a single rule and their characteristics are not reducible to one level of description. They
exhibit properties that emerge from the interaction of their parts and which cannot be predicted from
the properties of the parts.
Two types of complex systems
       Technical computer – based systems
       Sociotechnical systems
Characteristics of sociotechnical systems:
       They have emergent properties that are properties of the system as a whole, rather than
        associated with individual parts of the system. Emergent properties depends on both the
        system components and the relationships between them. Given this complexity, the
       emergent properties can only be evaluated once the system has been assembled. Security and
       dependability are emergent system properties.
      They are often nondeterministic. This means that when presented with a specific input, they
       may not always produce the same output. The systems behaviour depends on the human
       operators and people do not always react in the same way. Furthermore, use of the system
       may create new relationships between the system components and hence change its
       emergent behaviour. System faults and failures may therefore be transient, and people may
       disagree about whether or not a failure has actually occurred.
      The extent to which the system supports organizational objectives does not just depend on
       the system itself. It also depends on the stability of these objectives, the relationships, and
       conflicts between organisational objectives and how people in the organisation interpret
       these objectives. New management may reinterpret the organisational objectives that a
       system was designed to support so that a successful system may then be seen as a failure.
Emergent system properties:
Examples of emergent properties: -
 Property       Description
 Volume         The volume of a system (the total space occupied) varies depending on how
                the component assemblies are arranged and connected.
 Reliability    System reliability depends on component reliability but unexpected
                interactions can cause new types of failures and therefore affect the
                reliability of the system.
 Security       The security of the system (its ability to resist attack) is a complex property
                that cannot be easily measured. Attacks may be devised that were not
                anticipated by the system designers and so may defeat built-in safeguards.
 Repairability This property reflects how easy it is to fix a problem with the system once it
               has been discovered. It depends on being able to diagnose the problem,
               access the components that are faulty, and modify or replace these
               components.
 Usability      This property reflects how easy it is to use the system. It depends on the
                technical system components, its operators, and its operating environment.
Two types of emergent systems: -
      Functional emergent properties when the purpose of a system only emerges after its
       components are integrated. For example: a bicycle has the functional properties of being a
       transportation device once it has been assembled from its components
      Non – functional emergent properties which relate to the behaviour of the system in its
       operational environment. Reliability, performance, safety and security are examples of
       emergent properties. These are critical for computer – based systems, as failure to achieve a
       minimum defined level in these properties usually makes the system unusable.
Three perspectives of reliability in a socio technical systems:
       Hardware reliability
            o What is the probability of a hardware component failing and how long does it take to
               repair that component?
       Software reliability
            o How likely is it that a software component will produce an incorrect output? Software
               failure is usually distinct from hardware failure in that software does not wear out.
       Operator reliability
            o How likely is it that the operator of a system will make an error?
Non –deterministic: -
       A deterministic system is one where a given sequence of inputs will always produce the same
        sequence of outputs.
       Software systems are deterministic; systems that include humans are non-deterministic
            o A socio-technical system will not always produce the same sequence of outputs from
               the same input sequence
            o Human elements
                    People do not always behave in the same way
            o System changes
                    System behaviour is unpredictable because of frequent changes to hardware,
                        software and data.
Success criteria: -
       Complex systems are developed to address ‘wicked problems’ – problems where there cannot
        be a complete specification.
       Different stakeholders see the problem in different ways and each has a partial understanding
        of the issues affecting the system.
       Consequently, different stakeholders have their own views about whether or not a system is
        ‘successful’
            o Success is a judgment and cannot be objectively measured.
            o Success is judged using the effectiveness of the system when deployed rather than
                 judged against the original reasons for procurement.
Systems engineering
       Procuring, specifying, designing, implementing, validating, deploying and maintaining socio-
        technical systems.
       Concerned with the services provided by the system, constraints on its construction and
        operation and the ways in which it is used to fulfil its purpose or purposes
Stages of systems engineering
      Systems engineering stages
Procurement (acquisition)
           o   The purpose of the system is established, high-level system requirements are defined,
               decisions are made on how functionality is distributed and the system components
               are purchased.
Development
           o   The system is developed – requirements are defined in detail, the system is
               implemented and tested and operational processes are defined.
Operation
            o   The system is deployed and put into use. Changes are made as new requirements
                emerge. Eventually, the system is decommissioned
Human error
            o   Human errors occur in operational processes that influence the overall dependability
                of the system.
            o   Viewing human errors:
                     The person approach makes errors the responsibility of the individual and
                         places the blame for error on the operator concerned. Actions to reduce error
                         include threats of punishment, better training, more stringent procedures,
                         etc.
                     The systems approach assumes that people are fallible and will make
                         mistakes. The system is designed to detect these mistakes before they lead
                         to system failure. When a failure occurs, the aim is not to blame an individual
                         but to understand why the system defences did not trap the error.
System evolution
            o   Large systems have a long lifetime. They must evolve to meet changing requirements.
            o   Evolution is inherently costly
                     Changes must be analysed from a technical and business perspective;
                     Sub-systems interact so unanticipated problems can arise;
                     There is rarely a rationale for original design decisions;
                     System structure is corrupted as changes are made to it.
            o   Existing systems which must be maintained are sometimes called legacy systems.
                     Changes to a system are often a source of problems and vulnerabilities.
                     Changes may be made without knowledge of previous design decisions made
                         for security and dependability reasons.
                               Built-in safeguards may stop working.
                     New faults may be introduced or latent faults exposed by changes.
                               These may not be discovered because complete system retesting is
                                 too expensive.
  Software process: software process model, process activities, coping with change, the rational
                                       unified process.
Headings and sub headings: -
      Software process models
           o Waterfall model
           o Incremental development
           o Reuse oriented software engineering
      Process activities
           o Software specification
           o Software design and implementation
           o Software validation
      Coping with change
           o Prototyping
           o Incremental delivery
           o Boehm’s spiral model
      The Rational Unified Process
           o An example of a modern software process.
Software process models
      A structured set of activities required to develop a software system.
      Many different software processes but all involve:
           o Specification – defining what the system should do;
           o Design and implementation – defining the organization of the system and
               implementing the system;
           o Validation – checking that it does what the customer wants;
           o Evolution – changing the system in response to changing customer needs.
      A software process model is an abstract representation of a process. It presents a description
       of a process from some particular perspective.
Software process descriptions
      When we describe and discuss processes, we usually talk about the activities in these
       processes such as specifying a data model, designing a user interface, etc. and the ordering of
       these activities.
      Process descriptions may also include:
           o Products, which are the outcomes of a process activity;
           o Roles, which reflect the responsibilities of the people involved in the process;
           o Pre- and post-conditions, which are statements that are true before and after a
               process activity has been enacted or a product produced.
Plan-driven and agile processes
      Plan-driven processes are processes where all of the process activities are planned in advance
       and progress is measured against this plan.
      In agile processes, planning is incremental and it is easier to change the process to reflect
       changing customer requirements.
      In practice, most practical processes include elements of both plan-driven and agile
       approaches.
      There are no right or wrong software processes.
Software process models
      The waterfall model
           o Plan-driven model. Separate and distinct phases of specification and development.
Waterfall model phases
      There are separate identified phases in the waterfall model:
          o Requirements analysis and definition
          o System and software design
          o Implementation and unit testing
          o Integration and system testing
          o Operation and maintenance
Waterfall model drawbacks
      Inflexible partitioning of the project into distinct stages makes it difficult to respond to
       changing customer requirements.
            o Therefore, this model is only appropriate when the requirements are well-understood
                and changes will be fairly limited during the design process.
            o Few business systems have stable requirements.
      The waterfall model is mostly used for large systems engineering projects where a system is
       developed at several sites.
            o In those circumstances, the plan-driven nature of the waterfall model helps
                coordinate the work.
      The main drawback of the waterfall model is the difficulty of accommodating change after the
       process is underway. In principle, a phase has to be complete before moving onto the next
       phase.
      Incremental development
           o Specification, development and validation are interleaved. May be plan-driven or
              agile.
Incremental development benefits
      The cost of accommodating changing customer requirements is reduced.
             o The amount of analysis and documentation that has to be redone is much less than is
                 required with the waterfall model.
      It is easier to get customer feedback on the development work that has been done.
             o Customers can comment on demonstrations of the software and see how much has
                 been implemented.
      More rapid delivery and deployment of useful software to the customer is possible.
             o Customers are able to use and gain value from the software earlier than is possible
                 with a waterfall process.
Incremental model problems
      The process is not visible.
           o Managers need regular deliverables to measure progress. If systems are developed
              quickly, it is not cost-effective to produce documents that reflect every version of the
              system.
      System structure tends to degrade as new increments are added.
           o Unless time and money is spent on refactoring to improve the software, regular
              change tends to corrupt its structure. Incorporating further software changes
              becomes increasingly difficult and costly.
      Reuse-oriented software engineering
          o The system is assembled from existing components. May be plan-driven or agile.
          o In practice, most large systems are developed using a process that incorporates
              elements from all of these models.
          o Based on systematic reuse where systems are integrated from existing components
              or COTS (Commercial-off-the-shelf) systems.
          o Process stages
                   Component analysis;
                   Requirements modification;
                   System design with reuse;
                   Development and integration.
          o Reuse is now the standard approach for building many types of business system
Process activities
       Real software processes are inter-leaved sequences of technical, collaborative and managerial
        activities with the overall goal of specifying, designing, implementing and testing a software
        system.
       The four basic process activities of specification, development, validation and evolution are
        organized differently in different development processes. In the waterfall model, they are
        organized in sequence, whereas in incremental development they are inter-leaved.
Software specification
       The process of establishing what services are required and the constraints on the system’s
        operation and development.
       Requirements engineering process
           o Feasibility study
                    Is it technically and financially feasible to build the system?
           o Requirements elicitation and analysis
                    What do the system stakeholders require or expect from the system?
           o Requirements specification
                    Defining the requirements in detail
           o Requirements validation
                    Checking the validity of the requirements
Software design and implementation
       The process of converting the system specification into an executable system.
       Software design
            o Design a software structure that realises the specification;
       Implementation
            o Translate this structure into an executable program;
       The activities of design and implementation are closely related and may be inter-leaved.
Design activities
       Architectural design, where you identify the overall structure of the system, the principal
        components (sometimes called sub-systems or modules), and their relationships and how
        they are distributed.
       Interface design, where you define the interfaces between system components.
       Component design, where you take each system component and design how it will operate.
       Database design, where you design the system data structures and how these are to be
        represented in a database.
Software validation
       Verification and validation (V & V) is intended to show that a system conforms to its
        specification and meets the requirements of the system customer.
       Involves checking and review processes and system testing.
       System testing involves executing the system with test cases that are derived from the
        specification of the real data to be processed by the system.
       Testing is the most commonly used V & V activity
Coping with change
       Change is inevitable in all large software projects.
          o Business changes lead to new and changed system requirements
          o New technologies open up new possibilities for improving implementations
          o Changing platforms require application changes
      Change leads to rework so the costs of change include both rework (e.g. re-analysing
       requirements) as well as the costs of implementing new functionality
Reducing the costs of rework
      Change avoidance, where the software process includes activities that can anticipate possible
       changes before significant rework is required.
           o For example, a prototype system may be developed to show some key features of the
                system to customers.
      Change tolerance, where the process is designed so that changes can be accommodated at
       relatively low cost.
           o This normally involves some form of incremental development. Proposed changes
                may be implemented in increments that have not yet been developed. If this is
                impossible, then only a single increment (a small part of the system) may have be
                altered to incorporate the change.
Software Prototyping
      A prototype is an initial version of a system used to demonstrate concepts and try out design
       options.
      A prototype can be used in:
           o The requirements engineering process to help with requirements elicitation and
               validation;
           o In design processes to explore options and develop a UI design;
           o In the testing process to run back-to-back tests.
Benefits of prototyping
      Improved system usability.
      A closer match to users’ real needs.
      Improved design quality.
      Improved maintainability.
      Reduced development effort.
The process of prototype development
Prototype development
      May be based on rapid prototyping languages or tools
      May involve leaving out functionality
          o Prototype should focus on areas of the product that are not well-understood;
          o Error checking and recovery may not be included in the prototype;
          o Focus on functional rather than non-functional requirements such as reliability and
              security
Throw-away prototypes
      Prototypes should be discarded after development as they are not a good basis for a
       production system:
           o It may be impossible to tune the system to meet non-functional requirements;
           o Prototypes are normally undocumented;
           o The prototype structure is usually degraded through rapid change;
           o The prototype probably will not meet normal organisational quality standards.
Incremental delivery
      Rather than deliver the system as a single delivery, the development and delivery is broken
       down into increments with each increment delivering part of the required functionality.
      User requirements are prioritised and the highest priority requirements are included in early
       increments.
      Once the development of an increment is started, the requirements are frozen though
       requirements for later increments can continue to evolve.
Incremental development and delivery
      Incremental development
           o Develop the system in increments and evaluate each increment before proceeding
              to the development of the next increment;
           o Normal approach used in agile methods;
           o Evaluation done by user/customer proxy.
      Incremental delivery
           o Deploy an increment for use by end-users;
           o More realistic evaluation about practical use of software;
           o Difficult to implement for replacement systems as increments have less functionality
              than the system being replaced.
Incremental delivery advantages
      Customer value can be delivered with each increment so system functionality is available
       earlier.
      Early increments act as a prototype to help elicit requirements for later increments.
      Lower risk of overall project failure.
      The highest priority system services tend to receive the most testing.
Incremental delivery problems
      Most systems require a set of basic facilities that are used by different parts of the system.
           o As requirements are not defined in detail until an increment is to be implemented, it
               can be hard to identify common facilities that are needed by all increments.
      The essence of iterative processes is that the specification is developed in conjunction with
       the software.
           o However, this conflicts with the procurement model of many organizations, where
               the complete system specification is part of the system development contract.
Boehm’s spiral model
      Process is represented as a spiral rather than as a sequence of activities with backtracking.
      Each loop in the spiral represents a phase in the process.
      No fixed phases such as specification or design - loops in the spiral are chosen depending on
       what is required.
      Risks are explicitly assessed and resolved throughout the process.
Spiral model sectors
       Objective setting
            o Specific objectives for the phase are identified.
       Risk assessment and reduction
            o Risks are assessed and activities put in place to reduce the key risks.
       Development and validation
            o A development model for the system is chosen which can be any of the generic
                models.
       Planning
            o The project is reviewed and the next phase of the spiral is planned.
Spiral model usage
       Spiral model has been very influential in helping people think about iteration in software
        processes and introducing the risk-driven approach to development.
       In practice, however, the model is rarely used as published for practical software
        development.
The Rational Unified Process
       A modern generic process derived from the work on the UML and associated process.
       Brings together aspects of the 3 generic process models discussed previously.
       Normally described from 3 perspectives
            o A dynamic perspective that shows phases over time;
            o A static perspective that shows process activities;
            o A practive perspective that suggests good practice.
Phases in the Rational Unified Process
       Inception
            o Establish the business case for the system.
       Elaboration
            o Develop an understanding of the problem domain and the system architecture.
       Construction
            o System design, programming and testing.
       Transition
            o Deploy the system in its operating environment.
RUP iteration
       In-phase iteration
            o Each phase is iterative with results developed incrementally.
       Cross-phase iteration
            o As shown by the loop in the RUP model, the whole set of phases may be enacted
               incrementally.
            o An example of a modern software process.
Static workflows in the Rational Unified Process
 Workflow                    Description
 Business modelling          The business processes are modelled using business use cases.
 Requirements                Actors who interact with the system are identified and use cases
                             are developed to model the system requirements.
 Analysis and design         A design model is created and documented using architectural
                             models, component models, object models and sequence
                             models.
 Implementation              The components in the system are implemented and structured
                             into implementation sub-systems. Automatic code generation
                             from design models helps accelerate this process.
 Testing                     Testing is an iterative process that is carried out in conjunction
                             with implementation. System testing follows the completion of
                             the implementation.
 Deployment                  A product release is created, distributed to users and installed in
                             their workplace.
 Configuration and           This supporting workflow managed changes to the system
 change management
 Project management          This supporting workflow manages the system development
 Environment                 This workflow is concerned with making appropriate software
                             tools available to the software development team
RUP good practice
       Develop software iteratively
           o Plan increments based on customer priorities and deliver highest priority increments
               first.
       Manage requirements
           o Explicitly document customer requirements and keep track of changes to these
               requirements.
       Use component-based architectures
           o Organize the system architecture as a set of reusable components.
   Visually model software
        o Use graphical UML models to present static and dynamic views of the software.
   Verify software quality
        o Ensure that the software meet’s organizational quality standards.
   Control changes to software
        o Manage software changes using a change management system and configuration
             management tools.