UNIT-I: Software Engineering & Process Models
Dual Role of Software
    • Both a product and a vehicle for delivering a product
            – Product
                     • Delivers computing potential
                     • Produces, manages, acquires, modifies, display, or transmits information
            – Vehicle
                     • Supports or directly provides system functionality
                     • Controls other programs (e.g., operating systems)
                     • Effects communications (e.g., networking software)
Helps build other software (e.g., software tools)
A Definition of Software
    • Instructions (computer programs) that when executed provide desired features, function,
        and performance
    • Data structures that enable the programs to adequately manipulate information
    • Documents that describe the operation and use of the programs
Differences between Software and Hardware
    • Software is developed or engineered; it is not manufactured in the classical sense
            – Impacts the management of software projects
    • Software doesn't wear out
            – Hardware bathtub curve compared to the software ascending spiked curve
    • Industry is moving toward component-based construction, most software continues to be
        custom built
            – it is still complex to build
            – Reusable components are created so that engineers can concentrate on innovative
                 elements of a design
            – User interfaces are built with reusable components
            – The data structures and processing details are kept in a library for interface
                 construction
Hardware Failure Curve
Software Failure Curve
Changing Nature of Software
    • System software
    • Application software
    • Engineering/scientific software
    • Embedded software
    • Product-line software (e.g., inventory control, word processing, multimedia)
    • Web applications
    • Artificial intelligence software
    • Ubiquitous computing (small, wireless devices)
    • Netsourcing (net-wide computing)
    • Open source (operating systems, databases, development environments)
    • The ".com" marketing applications
Legacy Software – Characteristics
    • Support core business functions
    • Have longevity and business criticality
    • Exhibit poor quality
            – Convoluted code, poor documentation, poor testing, poor change management
Reasons for Evolving the Legacy Software
    • (Adaptive) Must be adapted to meet the needs of new computing environments or more
        modern systems, databases, or networks
    • (Perfective) Must be enhanced to implement new business requirements
    • (Corrective) Must be changed because of errors found in the specification, design, or
        implementation
Software Myths – Management
    • "We already have a book that is full of standards and procedures for building software.
        Won't that provide my people with everything they need to know?"
            – Not used, not up to date, not complete, not focused on quality, time, and money
    • "If we get behind, we can add more programmers and catch up"
            – Adding people to a late software project makes it later
            – Training time, increased communication lines
    •  "If I decide to outsource the software project to a third party, I can just relax and let that
       firm build it"
             – Software projects need to be controlled and managed
Software Myths – customer
    • "A general statement of objectives is sufficient to begin writing programs – we can fill in the
       details later"
             – Ambiguous statement of objectives spells disaster
    • "Project requirements continually change, but change can be easily accommodated because
       software is flexible"
             – Impact of change depends on where and when it occurs in the software life cycle
                 (requirements analysis, design, code, test)
Software Myths - Practitioner
    • "Once we write the program and get it to work, our job is done"
             – 60% to 80% of all effort expended on software occurs after it is delivered
    • "Until I get the program running, I have no way of assessing its quality
             – Formal technical reviews of requirements analysis documents, design documents,
                 and source code (more effective than actual testing)
    • "The only deliverable work product for a successful project is the working program"
             – Software, documentation, test drivers, test results
    • "Software engineering will make us create voluminous and unnecessary documentation and
       will invariably slow us down"
             – Creates quality, not documents; quality reduces rework and provides software on
                 time and within the budget
Software Engineering is a Layered Technology
    •   A Quality Focus
            – Engineering approach must rely on quality
            – Total Quality Management (TQM), six sigma leads to continuous improvement in
                culture.
            – This culture ultimately helps to develop more effective approaches to SE.
    •   Process
            – Provides the glue that holds the layers together;
            – enables balanced and timely development;
           –   provides a framework for effective delivery of technology;
           –   forms the basis for management; provides the context for technical methods, work
               products, milestones, quality measures, and change management
   • Methods
           – Provide the technical "how to" for building software;
           – rely on a set of basic principles;
           – encompass a broad array of tasks; include modeling activities
   • Tools
           – Provide automated or semi-automated support for the process and methods (i.e.,
               CASE tools)
Generic Process Framework
   • Communication
           – Involves communication among the customer and other stake holders; encompasses
               requirements gathering
   • Planning
           – Establishes a plan for software engineering work; addresses technical tasks,
               resources, work products, and work schedule
   • Modeling (Analyze, Design)
           – Encompasses the creation of models to better understand the requirements and the
               design
   • Construction (Code, Test)
           – Combines code generation and testing to uncover errors
   • Deployment
           – Involves delivery of software to the customer for evaluation and feedback