Thursday, October 13, 2011

What are the six fundamental best practices in the RUP- Rational Unified Process?

RUP - Rational Unified Process is an example of a modern process model that has been derived from work on the UML and the associated Unified Software Development Process. The six fundamental best practices in the RUP- Rational Unified Process are:

1. Develop software iteratively: Plan increments of the system based on customer priorities and develop the highest-priority system features early in the development process.

2. Manage requirements: Explicitly document the customer’s requirements and keep track of changes to these requirements. Analyze the impact of changes on the system before accepting them.

3. Use component-based architectures: Structure the system architecture into components, as discussed earlier in this chapter.

4. Visually model software: Use graphical UML models to present static and dynamic views of the software.

5. Verify software quality: Ensure that the software meets the organizational quality standards.

6. Control changes to software: Manage changes to the software using a change management system and configuration management procedures and tools.

What are the 4 sectors in each loop in Boehmʼs spiral model?

The 4 sectors in each loop in Boehmʼs spiral model are:
1. Objective setting: Specific objectives for that phase of the project are defined. Constraints on the process and the product are identified and a detailed management plan is drawn up. Project risks are identified. Alternative strategies, depending on these risks, may be planned.

2. Risk assessment and reduction: For each of the identified project risks, a detailed analysis is carried out. Steps are taken to reduce the risk. For example, if there is a risk that the requirements are inappropriate, a prototype system may be developed.

3. Development and validation: After risk evaluation, a development model for the system is chosen. For example, throwaway prototyping may be the best development approach if user interface risks are dominant. If safety risks are the main consideration, development based on formal transformations may be the most appropriate process, and so on. If the main identified risk is sub-system integration, the waterfall model may be the best development model to use.

4. Planning: The project is reviewed and a decision made whether to continue with a further loop of the spiral. If it is decided to continue, plans are drawn up for the next phase of the project.

Why is it increasingly irrelevant to distinguish between software development and evolution?

Softwares continually changes during their lifetime in response to the changing requirements and customer needs. So software evolution does not stop until the end of the lifetime of the software and so as the software development does not stop.

What are the principal requirements engineering activities?

The principal requirements engineering activities are:
(a) Feasibility study
(b) Requirements elicitation and analysis
(c) Requirements specification
(d) Requirements validation

What are the development stages in reuse-based development?

1. Component analysis: Given the requirements specification, a search is made for components to implement that specification. Usually, there is no exact match and the components that may be used only provide some of the functionality required.
2. Requirements modification: During this stage, the requirements are analyzed using information about the components that have been discovered. They are then modified to reflect the available components. Where modifications are impossible, the component analysis activity may be re-entered to search for alternative solutions.
3. System design with reuse: During this phase, the framework of the system is designed or an existing framework is reused. The designers take into account the components that are reused and organize the framework to cater for this. Some new software may have to be designed if reusable components are not available.
4. Development and integration: Software that cannot be externally procured is developed, and the components and COTS systems are integrated to create the new system. System integration, in this model, may be part of the development process rather than a separate activity.

What are the benefits of incremental development, compared to the waterfall model?

Incremental development has a number of advantages:
1. Customers can use the early increments as prototypes and gain experience that informs their requirements for later system increments. Unlike prototypes, these are part of the real system so there is no re-learning when the complete system is available.
2. Customers do not have to wait until the entire system is delivered before they can gain value from it. The first increment satisfies their most critical requirements so they can use the software immediately.
3. The process maintains the benefits of incremental development in that it should be relatively easy to incorporate changes into the system.
4. As the highest-priority services are delivered first and increments then integrated, the most important system services receive the most testing. This means that customers are less likely to encounter software failures in the most important parts of the system.

Why are iterations usually limited when the waterfall model is used?

The waterfall model requires clients to commit to particular set of requirements before design begins and designer to commit to particular design strategies based on those set of requirements formally assigned to the system by the clients. If there is any change happens, they will have to go through the entire rework process again which is costly and takes more time.

List the 3 generic process models that are used in software engineering?

The waterfall model, Evolutionary development and Component-based software engineering.

What is a software engineering code of ethics?

A set of guidelines that set out expected ethical and professional behavior for software engineers. This was defined by the major U.S. professional societies (the ACM and the IEEE) and defines ethical behavior under eight headings: public, client and employer, product, judgment, management, colleagues,
profession, and self.

List 5 different types of software application.

Word processing, web browsing, graphic interfaces, management tools, games etc.

What are the 3 general issues that affect many different types of software?

1. Heterogeneity: Increasingly, systems are required to operate as distributed systems across networks that include different types of computer and mobile devices. As well as running on general-purpose computers, software may also have to execute on mobile phones. You often have to integrate new software with older legacy systems written in different programming languages. The challenge here is to develop techniques for building dependable software that is flexible enough to cope with this heterogeneity.
2. Business and social change: Business and society are changing incredibly quickly as emerging economies develop and new technologies become available. They need to be able to change their existing software and to rapidly develop new software. Many traditional software engineering techniques are time consuming and delivery of new systems often takes longer than planned. They need to evolve so
that the time required for software to deliver value to its customers is reduced.
3. Security and trust: As software is intertwined with all aspects of our lives, it is essential that we can trust that software. This is especially true for remote software systems accessed through a web page or web service interface. We have to make sure that malicious users cannot attack our software and that information security is maintained.

What is the distinction between computer science and software engineering?

Software engineering is the engineering discipline that deals with practical problems of producing software. Computer science deals with the theories and methods of computer systems. It is mandatory for a software engineer to have some knowledge of computer science.

What are the four fundamental activities in software processes?

A software process is a sequence of activities that leads to the production of a software product. There are four fundamental activities that are common to all software processes. These activities are:
1. Software specification, where customers and engineers define the software that is to be produced and the constraints on its operation.
2. Software development, where the software is designed and programmed.
3. Software validation, where the software is checked to ensure that it is what the customer requires.
4. Software evolution, where the software is modified to reflect changing customer and market requirements.

What is software engineering?

Software engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use. In this definition, there are two key phrases:
1. Engineering discipline: Engineers make things work. They apply theories, methods, and tools where these are appropriate. However, they use them selectively and always try to discover solutions to problems even when there are no applicable theories and methods. Engineers also recognize that they must work to organizational and financial constraints so they look for solutions within these onstraints.
2. All aspects of software production: Software engineering is not just concerned with the technical processes of software development. It also includes activities such as software project management and the development of tools, methods, and theories to support software production.

What are the two fundamental types of software product?

Software engineers are concerned with developing software products (i.e., software which can be sold to a customer). There are two fundamental kinds of software products:

Generic products: 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. Examples of this type of product include software for PCs such as databases, word processors, drawing packages, and project-management tools. It also includes so-called vertical applications designed for some specific purpose such as library information systems, accounting systems, or systems for maintaining dental records.

Customized (or bespoke) products: These are systems that are commissioned by a particular customer. A software contractor develops the software especially for that customer. Examples of this type of software include control systems for electronic devices, systems written to support a particular business process, and air traffic control systems.

What are the essential attributes of good software?

The essential attributes of good software are
Ans: Dependability: It should be secure, safe and reliable so: we can depend on it. In any case of system failure, it should not cause any case of physical or economic damage to the system.
Maintainability: It should be easily maintainable in any case of platform change or changing client’s needs.
Efficiency: It should give us perfect possible efficiency without over using required memory and processor cycles.
Usability: It should be user friendly and easy to interact with customers through an appropriate user interface and adequate documentation.

Fabrication of an IC-Integrated Circuit (even thinner than human hair)

An integrated circuit, also referred to as IC, chip, or microchip, is an electronic circuit manufactured by the patterned diffusion of trace elements into the surface of a thin substrate of semiconductor material. Additional materials are deposited and patterned to form interconnections between semiconductor devices.

Semiconductor device fabrication is the process used to create the integrated circuits that are present in everyday electrical and electronic devices. It is a multiple-step sequence of photolithographic and chemical processing steps during which electronic circuits are gradually created on a wafer made of pure semiconducting material. Silicon is almost always used, but various compound semiconductors are used for specialized applications.

Transistors and connection(in IC) are made from many layers (typical 10 to 15 in CMOS) built on top of one another. Each layer has a special pattern defined by a mask. One important aspect of an IC is the length of a smallest transistor that can be fabricated. It was measured in micron (um, 10^-6 meter) and now is in nm (10^-9 meter)
E.g., we may say an IC is built with 32 nm process. In comparison, the diameter of human hair is about 100 um (i.e.,100,000 nm)
Very intersting lecture on Fabrication of an IC-Integrated Circuit (specifically MOSFET) from an Indian University I found on youtube:

Wednesday, October 12, 2011

What are the principal stages of the waterfall model that reflect the fundamental software development activities?

What are the principal stages of the waterfall model that reflect the fundamental software development activities?
The principal stages of the waterfall model directly reflecting the fundamental software development activities are:
1. Requirements analysis and definition: The system’s services, constraints, and
goals are established by consultation with system users. They are then defined
in detail and serve as a system specification.


2. System and software design: The systems design process allocates the requirements
to either hardware or software systems by establishing an overall system
architecture. Software design involves identifying and describing the fundamental
software system abstractions and their relationships.


3. Implementation and unit testing: During this stage, the software design is realized
as a set of programs or program units. Unit testing involves verifying that
each unit meets its specification.


4. Integration and system testing: The individual program units or programs
are integrated and tested as a complete system to ensure that the software
requirements have been met. After testing, the software system is delivered to
the customer.


5. Operation and maintenance: Normally (although not necessarily), this is the
longest life cycle phase. The system is installed and put into practical use.
Maintenance involves correcting errors which were not discovered in earlier
stages of the life cycle, improving the implementation of system units and
enhancing the system’s services as new requirements are discovered.

VHDL code for 2-4 decoder

Following is the VHDL code for 2-4 decoder.
library ieee;
use ieee.std_logic_1164.all;
entity decoder_2_4 is
   port(
      a: in std_logic_vector(1 downto 0);
      en: in std_logic;
      y: out std_logic_vector(3 downto 0)
   );
end decoder_2_4;
architecture arch of decoder_2_4 is
begin
    y <= "0000" when (en='0') else
         "0001" when (a="00") else
         "0010" when (a="01") else
         "0100" when (a="10") else
         "1000";   -- a="11"
end arch;