Thursday, September 23, 2010

Overview Of Software Engineering

What is Software Engineering?

The term Software Engineering first appeared in the 1968 NATO Software Engineering Conference and was meant to provoke thought regarding the current "Software Crisis" as the time.

“state of the art of developing quality software on time and within budget"

Trade-off between perfection and physical constraints
  • SE has to deal with real-world issues
State of the art!
  • Community decides on “best practice”+ life-long education 

  Software Development Activity:


Steps
Description
Requirements Collection Establish Customer Needs
Analysis Model And Specify the requirements-“What”
Design Model And Specify a Solution –“Why”
Implementation Construct a Solution In Software
Testing Validate the solution against the requirements
Maintenance Repair defects and adapt the solution to the new requirements

Planning:

  • The important task in creating a software product is extracting the requirements or requirements analysis. Customers typically have an abstract idea of what they want as an end result, but not what software should do. Incomplete, ambiguous, or even contradictory requirements are recognized by skilled and experienced software engineers at this point. Frequently demonstrating live code may help reduce the risk that the requirements are incorrect.
  •  Once the general requirements are gleaned from the client, an analysis of the scope of the development should be determined and clearly stated. This is often called a scope document. 

Design:
  • Domain Analysis is often the first step in attempting to design a new piece of software, whether it be an addition to an existing software, a new application, a new subsystem or a whole new system. Assuming that the developers (including the analysts) are not sufficiently knowledgeable in the subject area of the new software, the first task is to investigate the so-called "domain" of the software. The more knowledgeable they are about the domain already, the less work required. Another objective of this work is to make the analysts, who will later try to elicit and gather the requirements from the area experts, speak with them in the domain's own terminology, facilitating a better understanding of what is being said by these experts. If the analyst does not use the proper terminology it is likely that they will not be taken seriously, thus this phase is an important prelude to extracting and gathering the requirements. If an analyst hasn't done the appropriate work confusion may ensue: "I know you believe you understood what you think I said, but I am not sure you realize what you heard is not what I meant."


Specification:
  • Specification is the task of precisely describing the software to be written, possibly in a rigorous way. In practice, most successful specifications are written to understand and fine-tune applications that were already well-developed, although safety-critical software systems are often carefully specified prior to application development. Specifications are most important for external interfaces that must remain stable.A good way to determine whether the specifications are sufficiently precise is to have a third party review the documents making sure that the requirements and Use Cases are logically sound. 

Architecture:
  • The architecture of a software system or software architecture refers to an abstract representation of that system. Architecture is concerned with making sure the software system will meet the requirements of the product, as well as ensuring that future requirements can be addressed. The architecture step also addresses interfaces between the software system and other software products, as well as the underlying hardware or the host operating system.

Implementation:
  • Implementation is the part of the process where software engineers actually program the code for the project.

Testing:
  • Software testing is an integral and important part of the software development process. This part of the process ensures that bugs are recognized as early as possible.

Documentation:
  • Documenting the internal design of software for the purpose of future maintenance and enhancement is done throughout development. This may also include the authoring of an API, be it external or internal.

Deployment and Maintenance:
  •  Deployment starts after the code is appropriately tested, is approved for release and sold or otherwise distributed into a production environment.
  • Maintenance and enhancing software to cope with newly discovered problems or new requirements can take far more time than the initial development of the software. It may be necessary to add code that does not fit the original design to correct an unforeseen problem or it may be that a customer is requesting more functionality and code can be added to accommodate their requests. It is during this phase that customer calls come in and you see whether your testing was extensive enough to uncover the problems before customers do. If the labor cost of the maintenance phase exceeds 25% of the prior-phases' labor cost, then it is likely that the overall quality, of at least one prior phase, is poor. In that case, management should consider the option of rebuilding the system (or portions) before maintenance cost is out of control..

1 comment:

  1. thank you pramod chopade, its really great to view your blog, its informative and interesting, hope that my friends will like it...
    http://www.webdevelopmentseo.com/website/ebooks-f77.html

    ReplyDelete