Blog

Software Engineering

software engineering notes

Software:

  • Software is computer programs and associated documentation. This definition clearly states that, the software is not a collection of programs, but includes all associated documentation.
  • Software system usually consists of a number of separate programs, configuration files: which are used to set up these programs, System documentation: which describes the structure of the system, and user documentation: which explains how to use the system and web sites for users to download recent product information.
  • Software products may be developed for a particular customer or may be developed for a general market

Software products may be:

  • Generic – These are stand-alone systems that are produced by a development organization and sold on the open market to any customer who is able to buy them. (i.e. developed to be sold to a range of different customers). e.g. Databases, Office packages, Drawing Packages etc.
  • Bespoke (custom) – These are the systems which are commissioned by a particular customer. A software contractor develops the software especially for that customer. (i.e. developed for a single customer according to their specification). e.g.: Control system for electronic device, software to support particular business process.

Software Engineering:

  • Software engineering is strategy for producing quality
    • It is the establishment and use of sound engineering principles in order to obtain economically software is reliable and works efficiently on real machines.
      • Software engineering is an engineering discipline which is concerned with all aspects of software production
        • Software engineers should adopt a systematic and organised approach to their work and use appropriate tools and techniques depending on the problem to be solved, the development constraints and the resources available
    software.
  • Software engineering as a discipline provides us with structured technical means of developing and maintaining software. It provides methods to perform the tasks that the making of any software requires, analyzing the requirements, designing the system to meet these requirements, constructing the programs, maintaining the system, etc. Software engineering tools are used to support the tasks by automating the tasks or parts of the tasks.

The advantages of using software engineering for developing software are:

  • Improved quality
    • Improved requirement specification
    • Improved cost and schedule estimates
    • Better use of automated tools and techniques.
    • Better maintenance of delivered software
    • Well defined process
    • Improved reliability
    • Improved productivity
    • Less defects in final processes

Why software Engineering?

  • The economies of ALL developed nations are dependent on
    • More and more systems are software controlled
      • Software engineering is concerned with theories, methods and tools for professional software development
      • Software engineering expenditure represents a significant fraction of GNP in all developed countries
    software

What is the difference between software engineering and computer science?

  • Computer science is concerned with theories and methods that underline computer software system.; software engineering is concerned with the practicalities of developing and delivering useful
    • Some knowledge of computer science is essential for software engineers
      • Computer science theories are currently insufficient to act as a complete underpinning for software engineering
    software

What is a software process?

  • It is a set of activities and associated results that produce a software
    • Generic activities in all software processes are:
    product.
  • Specification –where customers and engineers define the software to be produced and the constraints on its operation. (i.e. what the system should do and its development constraints)
  • Development – Where the software is designed and programmed. (i.e. production of the software system)
  • Validation – where the software is checked to ensure that it is what the customer requires. (i.e. checking that the software is what the customer wants)
  • Evolution – Where the software is modified to adapt it to changing customer and market requirements. (i.e. changing the software in response to changing demands)

What is a software process model?

  • It is a simplified representation of a software process, presented from a specific perspective. Software process model may include activities that are part of the software process, software products and the role of people involved in software engineering.

software process models are:

  • Workflow model – (sequence of activities)

This model shows the sequence of activities in the process along with their inputs, outputs and dependencies. The activities in this model represent human actions.

  • Data-flow or Activity model – (information flow)

This model represents the process as a set of activities each of which carries out some data transformation. It shows how the input to the process, such as a specification, is transformed to an output, such as a design. The activities here may represent transformations carried out by people /computer

  • Role/action Model – (who does what)

This model represents the roles of people involved in the process and the activities for which they are responsible.

Generic process models

  • Waterfall
  • Evolutionary development
  • Formal transformation
  • Integration from reusable components-CBSE (computer -based software engineering)

Software costs

The 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 costs often dominate system costs. The costs of software on a PC are often greater than the hardware cost
  • Software costs more to maintain than it does to develop. For systems with a long life, maintenance costs may be several times development
    • Software engineering is concerned with cost-effective software development
      • Roughly 60% of costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs
      • Costs vary depending on the type of system being developed and the requirements of system attributes such as performance and system reliability
    costs
  • Distribution of costs depends on the development model that is used

What are software engineering methods?

It is a structured approach to software development which includes system models, notations, rules, design advice and process guidance whose aim to facilitate the production of high-quality software in cost-effective way.

Model descriptions

  • Descriptions of graphical models which should be developed and the notation used to define these models.eg. Object model, Data Flow Model

Rules

  • Constraints applied to system models e.g. Every entity in a system model must be unique name

Recommendations-

  • Heuristic which characterise good design practice in this method. Following these recommendations should lead to a well-organized system model (i.e. Advice on good design practice).e.g. No object should have more than seven sub-objects associated with it.

Process guidance

  • Descriptions of the activities which may be followed to develop the system models and the organization of these activities. e.g. Object attributes should be documented before designing the operations associated with an object.

What is CASE (Computer –Aided Software Engineering)?

It covers a wide range of different types of programs that are used to support software process activities such as requirement analysis, system modelling, debugging and testing

Computer-Aided Software Engineering (CASE) tools are software programs that automate or support the drawing and analysis of system models and provide for the translation of system models into application programs. Some CASE tools also provide prototyping and code generation capabilities.

What are the key challenges facing software engineering?

  • Coping with legacy systems, coping with increasing diversity and coping with demands for reduced delivery times are challenges of software engineering.

The key challenges are:

  • Legacy systems
    • Old, valuable systems must be maintained and updated

  Heterogeneity

  • Systems are distributed and include a mix of hardware and software

Delivery

  • There is increasing pressure for faster delivery of software

Software characteristics

  • Like all engineering, software engineering is not just about producing product but involves producing products in a cost effective way. Given unlimited resources, the majority of software problems can probably be solved. The challenged for the software engineers is to produce high quality software with a finite amount of resources and to a predicted schedule.
  • The software should deliver the required functionality and performance to the user and should be maintainable, dependable and usable

Maintainability: (Software must evolve to meet changing needs)

Software should be written in such a way that it may evolve to meet the changing needs of customers. This is a critical attribute because software change is an inevitable consequence of a changing environment.

Dependability: (Software must be trustworthy)

Software dependability has a range of characteristics, including reliability, security and safety. Dependable software should not cause physical or economic damage in the event of system failure.

Efficiency: (Software should not make wasteful use of system resources)

System should not make wasteful use of system resources such as memory and processor cycles. Efficiency therefore includes responsiveness, processing time, and memory utilization.

Usability: (Software must be usable by the users for which it was designed)

Software must be usable, without undue effort, by the type of user for whom it is designed. This means that it should have an appropriate user interface and adequate documentation.

Professional and ethical responsibility

  • Software engineering involves wider responsibilities than simply the application of technical skills
  • Software engineers must behave in an honest and ethically responsible way if they are to be respected as professionals
  • Ethical behaviour is more than simply upholding the law.

Issues of professional responsibility

  • Confidentiality
    • Engineers should normally respect the confidentiality of their employers or clients irrespective of whether or not a formal confidentiality agreement has been signed.

Competence

  • Engineers should not misrepresent their level of competence. They should not knowingly accept work which is out with their competence.

Intellectual property rights

  • Engineers should be aware of local laws governing the use of intellectual property such as patents, copyright, etc. They should be careful to ensure that the intellectual property of employers and clients is protected.

Computer misuse

  • Software engineers should not use their technical skills to misuse other people’s computers. Computer misuse ranges from relatively trivial (game playing on an employer’s machine, say) to extremely serious (dissemination of viruses).