Latest Post

Latest POSTS

Software Configuration Management

Changes are inevitable when software is built. A primary goal of software engineering is to improve the ease with which changes can be made to software. Configuration management is all about change control.
              Every software engineer has to be concerned with how changes made to work products are tracked and propagated throughout a project.
                          To ensure that quality is maintained the change process must be audited. A Software Configuration Management (SCM) Plan defines the strategy to be used for change management.

Software Requirements Specification

A Software requirements specification (SRS), a requirements specification for a software system, is a complete description of the behavior of a system to be developed and may include a set of use cases that describe interactions the users will have with the software. In addition it also contains non-functional requirements. Non-functional requirements impose constraints on the design or implementation such as performance engineering requirements, quality standards, or design constraints. 
                       The software requirements specification document enlists all necessary requirements that are required for the project development. To derive the requirements we need to have clear and thorough understanding of the products to be developed. This is prepared after detailed communications with the project team and customer.

Functional specification

In systems engineering a functional specification is a document that clearly and accurately describes the essential technical requirements for items, materials, or services including the procedures by which it can be determined that the requirements have been met. 

         Specifications help avoid duplication and inconsistencies, allow for accurate estimates of necessary work and resources, act as a negotiation and reference document for engineering changes, provide documentation of configuration, and allow for consistent communication among those responsible for the eight primary functions of Systems Engineering. 
                      They provide a precise idea of the problem to be solved so that they can efficiently design the system and estimate the cost of design alternatives. They provide guidance to testers for verification of each technical requirement.

Purpose  :
            There are many purposes for functional specifications. One of the primary purposes on team projects is to achieve some form of team consensus on what the program is to achieve before making the more time-consuming effort of writing source code and test cases, followed by a period of debugging. Typically, such consensus is reached after one or more reviews by the stakeholders on the project at hand after having negotiated a cost-effective way to achieve the requirements the software needs to fulfill. 

Process :
      In the ordered industrial software engineering life-cycle (waterfall model), functional specification describes what has to be implemented. The next, Systems architecture document describes how the functions will be realized using a chosen software environment. In non industrial, prototypical systems development, functional specifications are typically written after or as part of requirements analysis. When the team agrees that functional specification consensus is reached, the functional spec is typically declared "complete" or "signed off". After this, typically the software development and testing team write source code and test cases using the functional specification as the reference. While testing is performed, the behavior of the program is compared against the expected behavior as defined in the functional specification. 

Methods :
        One popular method of writing a functional specification document involves drawing or rendering either simple wire-frames or accurate, graphically designed UI screenshots. After this has been completed, and the screen examples are approved by all stakeholders, graphical elements can be numbered and written instructions can be added for each number on the screen example. For example, a login screen can have the username field labeled '1' and password field labeled '2,' and then each number can be declared in writing, for use by software engineers and later for beta testing purposes to ensure that functionality is as intended. The benefit of this method is that countless additional details can be attached to the screen examples.

Strategies for Risk Management

During the software development process various strategies for risk management could be identified and defined according to the amount of risk influence.

Based upon the amount of risk influence in software development project, risk strategies could be divided into three classes namely careful, typical, and flexible . Generally,careful risk management strategy is projected for new and in experienced organizations whose software development projects are connected with new and unproven technology.

Typical risk management strategy is well-defined as a support for mature organizations with experience in software development projects and used technologies, but whose projects carry a decent number of risks, and flexible risk management strategy is involved in experienced software development organizations whose software development projects are officially defined and based on proven technologies .

Software Risk Management

Since there could be various risks associated with the software development projects, the key to identify and manage those risks is to know about the concepts of software risk management. Many concepts about software risk management could be identified but the most important are:-

  • Risk Index
  • Risk Analysis
  • Risk Assessment

Risk Index: Generally risks are categorized into two factors namely impact of risk events and probability of occurrence. Risk index is the multiplication of impact and probability of occurrence. Risk index can be characterized as high,medium, or low depending upon the product of impact and occurrence. Risk index is very important and necessary for prioritization of risk.

Risk Analysis:
           There are quite different types of risk analysis that can be used. Basically, risk analysis is used to identify the high risk elements of a project in software engineering.
Also, it provides ways of detailing the impact of risk mitigation strategies.
Risk analysis has also been found to be most important in the software design phase to evaluate criticality of the system, where risks are analyzed and necessary counter measures are introduced .
The main purpose of risk analysis is to understand risks in better ways and to verify and correct attributes.
A successful risk analysis includes important elements like problem definition, problem formulation, data collection .

Risk Assessment:
               Risk assessment is another important case that integrates risk management and risk analysis. There are many risk assessment methodologies that focus on different types of risks.
Risk assessment requires correct explanations of the target system and all security features. It is important that a risk referent levels like performance, cost, support and schedule must be defined properly for risk assessment to be useful.

Embedded operating system

An embedded operating system is an operating system for embedded computer systems. These operating systems are designed to be compact, efficient at resource usage, and reliable, forsaking many functions that non-embedded computer operating systems provide, and which may not be used by the specialized applications they run. They are frequently also referred to as real-time operating systems, and the term RTOS is often used as a synonym for embedded operating system.

Usually, the hardware running an embedded operating system is very limited in resources such as RAM and ROM therefore systems made for embedded hardware tend to be very specific, which means that due to the available resources (low if compared to non-embedded systems) these systems are created to cover specific tasks or scopes. In order to get advantage of the processing power of the main (or only) CPU, system creators often write them in assembly. This machine efficient language "squeezes" the potentiality in terms of speed and determinism, which means maximizing the responsiveness of the operating system. Though, it not an absolute rule that all embedded operating systems are written in assembly language, as many of them are written in more portable languages, like C.

An important difference between most embedded operating systems and desktop operating systems is that the application, including the operating system, is usually statically linked together into a single executable image. Unlike a desktop operating system, the embedded operating system does not load and execute applications. This means that the system is only able to run a single application.

An embedded operating system is an operating system for embedded computer systems. These operating systems are designed to be compact, efficient, and reliable, forsaking many functions that non-embedded computer operating systems provide, and which may not be used by the specialized applications they run. They are frequently also real-time operating systems, and the term RTOS is often used as a synonym for embedded operating system.

An important difference between most embedded operating systems and desktop operating systems is that the application, including the operating system, is usually statically linked together into a single executable image. Unlike a desktop operating system, the embedded operating system does not load and execute applications. This means that the system is only able to run a single application.

Time Sharing Operating System

A time sharing system allows many users to share the computer resources simultaneously. In other words, time sharing refers to the allocation of computer resources in time slots to several programs simultaneously. For example a mainframe computer that has many users logged on to it. Each user uses the resources of the mainframe -i.e. memory, CPU etc. The users feel that they are exclusive user of the CPU, even though this is not possible with one CPU i.e. shared among different users.

The time sharing systems were developed to provide an interactive use of the computer system. A time shared system uses CPU scheduling and multiprogramming to provide each user with a small portion of a time-shared computer. It allows many users to share the computer resources simultaneously. As the system switches rapidly from one user to the other, a short time slot is given to each user for their executions.
The time sharing system provides the direct access to a large number of users where CPU time is divided among all the users on scheduled basis. The OS allocates a set of time to each user. When this time is expired, it passes control to the next user on the system. The time allowed is extremely small and the users are given the impression that they each have their own CPU and they are the sole owner of the CPU. This short period of time during that a user gets attention of the CPU; is known as a time slice or a quantum. 

The main disadvantage of multi programmed batch system is:

1. The user can interract with the job when its executing the user must setup the control cards to handle all possiable outcomes.

2. Another difficulty is that program must be debug statically from snapshop dumps. A programmer cannot modified program has it execute to study its behaviour.

Time sharing or multi tasking is logical expansion of multi prograamming. Multiple jobs are executed by the CPU switching between them. But the Switches occur so frequently that uses may interact with each program while it is running.

An intractive or hand on computer syste provides on time communication between the user and the system. The user given instruction to the use or to a program directly and receives an immediate response.

Time sharing where develope to provide interactive use of a computer system at a reasonable cost. A time shared operating system uses CPU scheduling and multi programming to provide each user with a small portion of a time shared computer.

A time shared operating system allows the many users to share the computer simultaneoualy. Since each action or command in a time shared system tends to be needed for each user.

The main disadvantage of Time sharing system is very difficult and expensive to built. Time sharing provids and on-line file system. The file system resides on a collection of disk. Hence memory management must be provided. It provides a mechanism for concurrent execution, which requires CPU scheduling schemes to orderly execution. The system should provides job synchronization and communication and that jobs should not gets struck in a dead lock, forever waiting for one another.

Multi programming and Time sharing are the control themes of modern operating system.
 
 
 

In above figure the user 5 is active but user 1, user 2, user 3, and user 4 are in waiting state whereas user 6 is in ready status.
 
As soon as the time slice of user 5 is completed, the control moves on to the next ready user i.e. user 6. In this state user 2, user 3, user 4, and user 5 are in waiting state and user 1 is in ready state. The process continues in the same way and so on.
 
The time-shared systems are more complex than the multiprogramming systems. In time-shared systems multiple processes are managed simultaneously which requires an adequate management of main memory so that the processes can be swapped in or swapped out within a short time.