Friday, March 21, 2014

Formal Specification

  • Formal software specifications are mathematical entities and may be analyzed using mathematical methods. Specification consistency and completeness can be proved mathematically.
  • Formal specifications may be automatically processed. Software tools can be used to build programs from formal specifications.
  • The development of a formal specification provides insights into and an understanding of the software requirements and the software design.

problems with formal development methods

  • Many software engineers have not been trained in the techniques required to develop formal specifications.
  • Customers may be unwilling to fund development activities that they cannot easily monitor.
  • Software management is inherently conservative and is unwilling to adopt new techniques for which payoff is not obvious.
  • Most of the effort in specification research has been concerned with the development of languages and their theoretical aspectsrather than tools and methods.


     Rapid Application Development (RAD) is an incremental software development process model that emphasizes an extremely short development cycle.If requirements are well understood and project scope is constrained, the RAD process enables a development team to create a ‘fully functional system’ within very short time periods (eg. 60 to 90 days).

  • Business modelling - The information flow in a business system considering its functionality.
  • Data Modelling - The information flow defined as part of the business modelling phase is refined into a set of data objects that are needed to support the business
  • Process Modelling - The data objects defined in the data modelling phase are transformed to achieve the information flow necessary to implement business functions.
  • Application generation - RAD assumes the use of 4GL or visual tools to generate the system using reusable components.
  • Testing and turnover - New components must be tested and all interfaces must be fully exercised.

Problems with the RAD model

  • RAD requires sufficient human resources to create right number of RAD teams.
  • RAD requires developers and customers who are committed to the rapid-fire activities necessary to get a system completed in a much abbreviated time frame.
  • If a system cannot be properly modularized, building the components necessary for RAD will be problematic.
  • RAD is not applicable when technical risks are high. This occurs when a new application makes heavy use of new technology or when the new software requires a high degree of interoperability with existing computer programs.
   Extreme Programming (XP) is the most widely used Agile Process model. XP uses an object oriented approach as its development paradigm. XP encompasses a set of rules and practices that occur within the context of four framework activities : planning, design , coding and testing.


Planning

  • Begins with a set of stories (scenarios).
  • Each story written by the customer is assigned a value depending on its priority.
  • The members of the XP team assess each story and assigned a cost measured in development weeks.
  • If a story has more that three weeks to develop the customer is asked to split it.
  • New stories can add any time.
  • Customers and XP team work together to decide how to group stories for next increment.
  • AS development work proceeds, the customers can add stories, split stories and eliminate them.
  • The XP team then reconsiders all remaining releases and modify its plan accordingly.
Design

  • A simple design is preferred.
  • Design only consider the given stories.
  • Extra functionality discouraged.
  • Identify the object oriented classes that are relavant to the current system.
  • The output of the design process is a set of CRC ( Class Responsibility Collaborator) cards.
Coding

  • XP recommends developing a series of unit tests for each of the story.
  • Once the code is complete, units should be unit tested.
  • Pair programming – two people work together at one computer.
Testing

  • The unit tests that has been created in the coding stage should be implemented using a framework that can be implemented.
  • This enables regression testing.
  • Integration and validation can occur on a daily basis.
  • This provides the XP team with a continual indication of the progress and also raise flags early if things are going wrong.
  • Acceptance tests are derived from user stories that have been implemented as parts of the software release.




      Agile software engineering combines a philosophy and a set of development guidelines. The philosophy encourages the customer satisfaction and early incremental delivery of software; small and highly motivated software teams, informal methods, minimal software engineering work products, and overall development simplicity. The development guidelines stress delivery and active and continuous communication between developers and customers.

       An agile process adapt incrementally. To accomplish incremental adaptation, an agile team requires customer feedback. An effective tool to get customer feedback is an operational prototype or a portion of an operational system. Software increments must be delivered in short time periods so that the adaptation keep pace with the change This iterative approach enables the customer to evaluate the software increment regularly and provide necessary feedback to the software team.

This model is an evolutionary software process model that couples the iterative nature of prototyping with the controlled and systematic aspects of the linear sequential model. Using the spiral model software is developed in a series of incremental releases. During early iterations, the incremental release might be a paper model or prototype.

The spiral model is divided into four main task regions

  • Determine goals, alternatives,constraints
  • Evaluate alternatives and risks
  • Develop and test
  • Plan

The Unified Process or Rational Unified Process (RUP) is a framework for object oriented software engineering using UML. This is a use-case driven, architecture centric, iterative and incremental software development model.


Inception Phase

The Inception Phase of UP includes both customer communication and planning activities. By collaborating with the customer and end-users, business requirements for the software are identified, a rough architecture for the system is proposed, and a plan for the iterative, incremental nature of the project is developed.

Elaboration Phase

The Elaboration Phase encompasses the planning and modeling activities of the generic process model. Elaboration refines and expands the primary use-cases that were developed as part of the inception phase and expands the architectural representation to include five different views of the software – the use-case model, the analysis model, the design model, the implementation model and the deployment model.

Construction Phase

The construction phase of the UP is identical to the construction activity defined in the generic software process. Using the architectural model as input, the construction phase develops or acquires the software components that will make each usecase operational for end-users. As components are developed unit tests are designed and executed for each component. Integration testing and acceptance testing are carried out using use-cases to derive required test cases.

Transition Phase

The Transition Phase of the UP encompasses the later stages of the generic construction activity and the first part of the generic deployment activity. Software is given to end-users for beta testing. The software team creates necessary support information (user manual, installation manual etc.). At the end of transition phase, the software increment becomes a usable software release.

Production Phase

The production phase of the UP coincides with the deployment activity of the generic process. During this phase, the on going use of the software is monitored, support for operating environment is provided, and defect reports and requests for change are submitted and evaluated.

It is likely that at the same time the construction, transition and production phases are being conducted, work may have already begun on the next software increment. This means that the unified process do not occur in a sequence, but rather with staggered concurrency.
  • Emphasizes the design and construction of computer based systems using software “components”.
  • The process relies on reusable software components.
  • Similar to the characteristics of the spiral model.

  • Requirement specification and validation steps are similar to the other processes.

    Component Analysis

    During this stage try to find the software components need for the implementation once the requirements are specified.

    Requirements Modification

    Analyze the discovered software components to find out whether it is able to achieve the specified requirements.

    System Design with Reuse

    The frame work of the system is designed to get the maximum use of discovered components. New software may have to design if the reusable components are not available.

    Development and integration

    Software that cannot be discovered is developed, and the reusable components are integrated to create the new system. The integration process, may be part of the development process rather than a separate activity.


    Advantages


    • Effort of prototype is not wasted.
    • Faster than the Waterfall model.
    • High level of user involvement from the start.
    • Technical or other problems discovered early – risk reduced.
    • A working system is available early in the process.
    • Misunderstandings between software users and developers are exposed.
    • Mainly suitable for projects with vague and unstable requirements.


    Disadvantages


    • Prototype usually evolve so quickly that it is not cost- effective to produce great deal of documentation.
    • Continual change tends to corrupt the structure of the prototype system. Maintenance is therefore likely to be difficult and costly.
    • It is not clear how the range of skills which is normal in software engineering teams can be used effectively for this mode of development.
    • Languages which are good for prototyping not always best for final product.


    The objective is to understand the system requirements clearly.Starts with poorly understood requirements. Once the requirements are cleared, the system will be developed from the beginning.This model is suitable if the requirements are vague but stable.


    1. Important features may have been left out of the prototype to simplify rapid implementation. In fact, it may not be possible to prototype some of the most important parts of the system such as safety-critical functions.
    2. An implementation has no legal standing as a contract between customer and contractor.
    3. Non-functional requirements such as those concerning reliability, robustness and safety cannot be adequately tested in a prototype implementation.


    1. Real projects rarely follow the sequential flow that the model proposes. Although the Waterfall model can accommodate iteration, it does so indirectly.
    2. It is often very difficult for the customer to state all requirements explicitly. The Waterfall model has the difficulty of accommodating the natural uncertainty that exists at the beginning of many projects.
    3. The customers must have patience. A working version of the program(s) will not be available until late in the project time-span. A major blunder, if undetected until the working program is reviewed, can be disastrous.
    4. The difficulty of accommodating change after the process is underway.
    5. One phase has to be complete before moving onto the next phase.
    6. Few business systems have stable requirements.
            Software Requirement Analysis and Specification

            The system’s services, constraints and goals are established with the consultation with the users. This would include the understanding of the information domain for the software, functionality, behaviour, performance, interface, security and exceptional requirements. This requirements are then specified in a manner which is understandable by both users and the development staff.

            Software design

            The design process translates requirements into a representation of the software that can be implemented using software tools. The major objectives of the design process are the identification of the software components, the software architecture, interfaces, data structures and algorithms.

            Coding (implementation)

            The design must be translated to a machine readable form.During this stage the software design is realized as a set of programs or program units. Programming languages or CASE tools can be used to develop software.

            Testing

            The testing process must ensure that the system works correctly and satisfies the requirements specified. After testing, the software system is delivered to the customer.

            Maintenance

            Software will undoubtedly undergo changes after it is delivered to the customer. Errors in the system should corrected and the system should be modified and updated to suit new user requirements.



            The Incremental development model involves developing the system in an incremental fashion. The most important part of the system is fist delivered and the other parts of the system are then delivered according to their importance.Incremental development avoids the problems of constant change which characterize evolutionary prototyping. An overall system architecture is established early in the process to act as a framework.Incremental development is more manageable than evolutionary prototyping as the normal software process standards are followed. Plans and documentation must be produced.




          1. Large software is usually designed to solve 'wicked' problems.
          2. Software engineering requires a great deal of coordination across disciplines.
          3.      -Almost infinite possibilities for design trade-offs across components.
                 -Mutual distrust and lack of understanding across engineering disciplines



          4. Systems must be designed to last many years in a changing environment.
          5. The process of efficiently and effectively developing requirements.
          6. Tooling required to create the solutions, may change as quick as the clients mind.
          7. User expectations.
          8.      - User expectations increase as the technology becomes more and more sophisticated.
          9. The mythical man-month factor.

          10.      -Adding personnel to a project may not increase productivity.
                 -Adding personnel to a late project will just make it later.


          11. Communications.
          12.      -Communications among the various constituencies is a difficult problem. Sometimes different constituencies speak completely different languages. For example, developers may not have the domain knowledge of clients and / or users. The larger the project, the more difficult the communications problems become.
          13. Project characteristics.
          14.     -size / complexity
                -novelty of the application
                -response-time characteristics
                -security requirements
                -user interface requirements
                -reliability / criticality requirements
                                           Distribution of costs across the different activities in the software process depends on the process used and the type of software that is being developed.Software Engineering Costs Eg: Real-time software usually requires more extensive validation and testing than web-based systems.In the waterfall approach, the cost of specification, design, implementation and integration are measured separately. System integration and testing is the most expensive development activity.Normally this is about 40% of the total development costs.



          15. The economies of ALL developed nations are dependent on software.
          16. More and more systems are software controlled.
          17. Expenditure on software represents a significant fraction of GNP in all developed countries.
          18. Software engineering is concerned with theories, methods and tools for professional software development.
          19. Software is found in products and situations where very high reliability is expected.
          20. E.g. Monitoring and controlling Nuclear power plants

          21. Contain millions of lines of code
          22. Comparably more complex.

            • Intangibility - Cannot touch software.
            • Increase use will not introduce any defects.
            • Software is configurable-able to build software by combining a basic set of software components in different ways.
            • One can change the product easily by re-implementing it without changing the design.
            • Custom built- Most software are made upon order.
















            We can categorized software to several types.


            • System Software 
            System software is a collection of programs is written to service the other programs.
            Eg: Operating system component, drivers, telecommunication process.

            • Business software

            System have evolved into management information system software that access one or more large database containing business information.

            • Embedded software

            Embedded software resides in read-only memory and is used to control product and system for the customer and industrial markets.

            • Engineering and scientific software

            They have been characterized by number crunching algorithms.

            • Personal computer software

            Personal computer software market has burgeoned over the past two decades.Word processing, spreadsheets, computer graphic, multimedia and db management.

            • Web-based software

            The network becomes a massive computer providing an almost unlimited software resources that can be accessed by anyone with a modem.

            • Artificial intelligence software

            AI software makes use of nonnumerical algorithms to solve the complex problems that are not amenable to computing or straightforward analysis.
                              Instructions given to a computer (computer programs).Software is a general term for the various kinds of programs used to operate computers and related devices.Software is the set of instructions that makes the computer work.

            Example - When you type in words via the keyboard, the software is responsible for displaying the correct letters, in the correct place on the screen.

            Software is held either on your computer’s hard disk, CDROM, DVD or on a diskette (floppy disk) and is loaded (i.e.copied) into the computer’s RAM (Random Access Memory), as and when required.

            Copyright © Software Engineering Fundamentals | Powered by Blogger
            Design by N.Design Studio | Blogger Theme by NewBloggerThemes.com