Tuesday, November 22, 2011

What are the stages in the requirements change management process?

What are the stages in the requirements change management process?
Ans: (a) Problem analysis and change specification
(b) Change analysis and costing
(c) Change implementation

What is requirements management?

What is requirements management?
Ans: Requirements management is the process of understanding and controlling changes to system requirements. You should start planning of how to manage changing requirements during the requirements elicitation process. 

What is ethnography and how is it used in requirements elicitation?

What is ethnography and how is it used in requirements elicitation?
Ans: Ethnography is an observational technique that can be used to understand social and organizational requirements. It helps analysts discover implicit system requirements that reflect the actual rather than the formal processes in which people are involved.

What is a use-case?

What is a use-case?
Ans: Use cases are a scenario-based technique for requirements elcitation, identifying the type of interaction and the actors involved. Use cases have now became the fundamental feature of the UML notation for describing object-oriented system models. 

What should be included in a scenario?

What should be included in a scenario?
Ans: (a) A description of what the system and users expect when the scenario starts.
(b) A description of the normal flow of events in the scenario.
(c) A description of what can go wrong and how this is handled.
(d) Information about other activities that might be going on at the same time.
(e) A description of the system state when scenario finishes. 

Give 5 reasons why eliciting requirements is difficult?

Give 5 reasons why eliciting requirements is difficult?
Ans: (a) Stakeholders often do not know exactly what kind of system/services they want.
(b) Stakeholders naturally express requirements in their own terms and therefore, requirement engineers should be able to understand these requirements.
(c) Different stakeholders have different requirements. Requirement engineers have to consider all potential sources of requirements and discover commonalities and conflicts.
(d) Political factors may affect the requirements of the system.eg: managers may demand specific system requirements.
(e) The economic and business environment is very dynamic where analysis takes place, therefore, new requirements may be required in the future.

What are the main advantages of using a standard format to specify requirements?

What are the main advantages of using a standard format to specify requirements?
Ans: Especially for large system engineering projects, it is very essential to define the requirements to a fine level of detail. Standard format to specify requirements is also helpful for people who do not have technical knowledge to understand the behavior of a particular system. 

What is the distinction between the terms ‘shallʼ and ʻshouldʼ in a user requirements document, which is written in natural language?

What is the distinction between the terms ‘shallʼ and ʻshouldʼ in a user requirements document, which is written in natural language?
Ans: Mandatory requirements are requirements that the system must support and are usually written using 'shall'. Desirable requirements are not essential and are written using 'should'.

What is the software requirements document?

What is the software requirements document?
Ans: Software requirements document also called software requirements specification (SRS) is the official statement of what the system developers should implement. It includes both the user requirements and system requirements in detail. Depending on the size of the system, user and system requirements may be integrated into a single document or the detailed system requirements may be presented in a separate document.

What is the distinction between functional and non-functional requirements?

What is the distinction between functional and non-functional requirements?
Ans: Functional requirements: These are the statements of the services the system should provide, how the system is going to react to particular inputs and how the system should behave in particular situations.
Non-functional requirements: These are constraints on the services or functions offerred by the system, which include timing constraints, constraints on the development process and standards. These often apply to the system as a whole. 

What are user requirements and system requirements?

What are user requirements and system requirements?
Ans: User requirements: These are statements in natural language with few diagrams explaining the services expected to be provided by the system and constraints under which the system must operate. 
System requirements: System requirements explain the systems’ functions, services and operational constraints in detail, and the document should be precise. It may be a part of the contract between the system buyer and the software developers.

Monday, November 21, 2011

What are the barriers to introducing agile methods into large companies?

What are the barriers to introducing agile methods into large companies?
Ans: Large companies need to decide the specifications of the system prior to the system design. Any later change in system specification requires a new contract to be signed between company and contractor which is often painful affort for large companies. Therefore, large companies do not really prefer incremental delivery approach of agile development.

What is a Scrum sprint?

What is a Scrum sprint?
Ans: In software product development, a scrum sprint is a set period of time during which specific work has to be completed and made ready for review. Each sprint begins with a planning meeting. During the meeting, the customer(client) and the development team agree upon exactly what work will be accomplished during the sprint.

List 4 questions that should be asked when deciding whether or not to adopt an agile method of software development.

List 4 questions that should be asked when deciding whether or not to adopt an agile method of software development.
Ans: (a) Can customer representatives take full time part in the software develpoment?
         (b) Do customer representatives have suitable personalities for the intense involvement needed?
         (c) How many stakeholders are there for particular system and what are their priorities?
         (d) Are delivery schedules flexible enough to maintain simplicity? 

For what types of system are agile approaches to development particularly likely to be successful?

For what types of system are agile approaches to development particularly likely to be successful?
Ans: Agile approaches are best suited to the development of small or medium sized business systems and personal computer products.

What are the shared characteristics of different approaches to rapid software development?

What are the shared characteristics of different approaches to rapid
software development?

Ans:  (a) The processes of specification, design and implementation are concurrent.
         (b) The system is developed in a series of increments.
         (c) System user interfaces are often developed using an interactive development system.

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;