Pages

Wednesday, August 11, 2010

CS504- Software Engineering - I (Session - 3) (Part-2/2)

Question No: 18 ( Marks: 1 ) - Please choose one

Software architecture elements are further divided into categories which in total are -----------

► 2

► 3

► 4

► 5

Question No: 19 ( Marks: 1 ) - Please choose one

Three tier architecture contains ------------- layers

► Presentation

► Application

► Database

► All of the above

Question No: 20 ( Marks: 1 ) - Please choose one

1. Variables should be initialized where they are declared and they should be declared in

the -------------- scope possible.

► Smallest

► largest

► medium

► None of the given

Question No: 21 ( Marks: 1 ) - Please choose one

------------------ are two important tools that can help in managing and mastering the complexity of a program.

► abstraction and encapsulation

► abstraction and Inheritence

► abstraction and Polymarhphism

► None of given

Question No: 22 ( Marks: 1 ) - Please choose one

Which of the following is a/are tool used in requirement analysis?

► Flow Graphs

► Data Flow Diagrams

► Activity Networks

► Module Dependency Diagrams

Question No: 23 ( Marks: 1 ) - Please choose one

Consider the following comment. “The software which I bought won’t run on windows and when it runs I can’t use WORD at the same time”. Which of the following do you think are violated by the newly bought software?

► dependability, interchangeability

► platform independence, interoperability

► reliability, dependency

► interoperability, reliability

Question No: 24 ( Marks: 1 ) - Please choose one

……………… is a diagramming technique used to identify the types of objects in the system and the static relationships that exist among them.

► Class Diagram

► Document flow diagrams

► Data flow diagrams

► Flow charts

Question No: 25 ( Marks: 1 ) - Please choose one

Which of the following interaction style best suit the design of an interface for visually impaired users?

► direct manipulation

► direct manipulation

► natural language

► command line

Question No: 26 ( Marks: 1 ) - Please choose one

Which of the following testing involve purely black box testing?

► unit testing, beta testing

► acceptance testing, interface testing

► beta testing, acceptance testing

► integration testing, interface testing

Question No: 27 ( Marks: 2 )

what does this meanObject Creation and Life Time”?

From the object creation and life time point of view, when an object is instantiated, all of its parts must also be instantiated at the same time before any useful work can be done and all of its part die with it. While in the case of association, the life time of two associated object is independent of one another. The only limitation is that an object must be alive or has to be instantiated before a message can be sent to it.

Question No: 28 ( Marks: 2 )

How one can avoid hazards caused by side effects while writing code. List the two guidelines.

never use “,” except for declaration

if you are initializing a variable at the time of declaration, do not declare another variable in the same statement

never use multiple assignments in the same statement

Be very careful when you use functions with side effects – functions that change the values of the parameters.

Try to avoid functions that change the value of some parameters and return some value at the same time.

Question No: 29 ( Marks: 2 )

What is the greatest advantage of exception handling?

Exception handling is a powerful technique that separates error-handling code from

normal code. It also provides a consistent error handling mechanism. The greatest

advantage of exception handling is its ability to handle asynchronous errors.

Question No: 30 ( Marks: 2 )

Give 2 Unit Testing Tips.

Unit test should be conveniently located

For small projects you can imbed the unit test for a module in the module itself

For larger projects you should keep the tests in the package directory or a /test subdirectory of the package

By making the code accessible to developers you provide them with:

Examples of how to use all the functionality of your module

A means to build regression tests to validate any future changes to the code

You can use the main routine with conditional compilation to run your unit tests.

Question No: 31 ( Marks: 3 )

Write unit testing quantitative benefits.

Repeatable: Unit test cases can be repeated to verify that no unintended side effects have occurred due to some modification in the code.

Bounded: Narrow focus simplifies finding and fixing defects.

Cheaper: Find and fix defects early

Question No: 32 ( Marks: 3 )

How Comments should be indented relative to their position in the code? Give an example

Comments should be indented relative to their position in the code.

while (true) { // NOT: while (true) {

// Do something // // Do something

something(); // something();

} // }

Question No: 33 ( Marks: 3 )

Consider the following code fragment.

while a

{

while b

c

d

}

If you were to test this code, what would be the test technique to adopt?

Flow Graph Testing would be used to test the code

Statement Testing

Branch Testing

Path Testing

Question No: 34 ( Marks: 5 )

Narrate the manner for the organization of Class and Interface declarations

Class and Interface declarations should be organized in the following manner:

1. Class/Interface documentation.

2. class or interface statement.

3. Class (static) variables in the order public, protected, package (no access modifier), private.

4. Instance variables in the order public, protected, package (no access modifier), private.

5. Constructors.

6. Methods (no specific order).

Question No: 35 ( Marks: 5 )

Discus the symptoms and an example of coding error bug class.

A coding error is a simple problem in writing the code. IT can be a failure to check error

returns, a failure to check for certain valid conditions, or a failure to take into account

other parts of the system. Yet another form of a coding error is incorrect parameter

passing and invalid return type coercion.

Symptoms

Unexpected errors in black box testing.

The errors that unexpectedly occur are usually caused by coding errors.

Compiler warnings.

Coding errors are usually caused by lack of attention to details.

Example

In the following example, a function accepts an input integer and converts it into a string

that contains that integer in its word representation.

void convertToString(int InInteger, char* OutString, int* OutLength)

{

switch(InInteger){

case 1: OutString = "One";OutLength = 3;

break;

case 2: OutString = "Two";OutLength = 3;

break;

case 3: OutString = "Three";OutLength = 5;

break;

case 4: OutString = "Four";OutLength = 4;

break;

case 5: OutString = "Five";OutLength = 4;

break;

case 6: OutString = "Six";OutLength = 3;

break;

case 7: OutString = "Seven";OutLength = 5;

break;

case 8: OutString = "Eight";OutLength = 5;

break;

case 9: OutString = "Nine";OutLength = 4;

break;

}

}

There are a few things to notice in the preceding code. The ConvertToString function

does not handle all cases of inputs, which becomes very obvious you pass a zero value.

Worse, the function does not initialize the output variables, leaving them at whatever they

happened to be when they came into the function. This isn’t a problem for the output

string, necessarily, but it will become a serious issue for the output length.

Question No: 36 ( Marks: 5 )

Why Code portability is so important ? Give out 3 ways / Guide lines to improve the code portability with examples

(5+5)

Stick to the standard

1. Use ANSI/ISO standard C++

2. Instead of using vendor specific language extensions, use STL as much as

possible

Program in the mainstream

Although C++ standard does not require function prototypes, one should always write

them.

double sqrt(); // old style acceptable by ANSI C

double sqrt(double); // ANSI – the right approach

Size of data types

Sizes of data types cause major portability issues as they vary from one machine to the

other so one should be careful with them.

int i, j, k;

j = 20000;

k = 30000;

i = j + k;

Order of Evaluation

As mentioned earlier during the discussion of side effects, order of evaluation varies from

one implementation to other. This therefore also causes portability issues. We should

therefore follow guidelines mentioned in the side effect discussion.

Signedness of char

The language does not specify whether char is signed or unsigned.

char c;

// between 0 and 255 if unsigned

// -128 to 127 if signed

c = getchar();

if (c == EOF) ??

// will fail if it is unsigned

It should therefore be written as follows:

int c;

c = getchar();

if (c == EOF)

Equivalence Classes

Equivalence classes help you in designing test cases to test the system effectively and

efficiently. One should have reasons to believe that the test cases are equivalent. As for

this purpose, one would need to understand the system and see in how many partitions it

can be divided. These partitions should be devised such that a clear distinction should be

marked. Test cases written for one partition should not yield the same results when run

for the second partition as otherwise these two partitions should become one. However,

finding equivalence classes is a subjective process, as two people analyzing a program

will probably come up with different sets of equivalence classes

where the term compute method use.

The term compute can be used in methods where something is computed

valueSet.computeAverage(); matrix.computeInverse()

Describe three coverage schemes related to white box testing

Statement Coverage: In this scheme, statements of the code are tested for a successful test that checks all the statements lying on the path of a successful scenario.

Branch Coverage: In this scheme, all the possible branches of decision structures are tested. Therefore, sequences of statements following a decision are tested.

Path Coverage: In path coverage, all possible paths of a program from input instruction to the output instruction are tested. An exhaustive list of test cases is generated and tested against the code.

Memory over-runs and their symptoms

a memory overrun occurs when you use memory that does not belong to you. This can be

caused by overstepping an array boundary or by copying a string that is too big for the

block of memory it is defined to hold. Memory overruns were once extremely common in

the programming world because of the inability to tell what the actual size of something

really was.

Symptoms

Program crashes quite regularly after a given routine is called, that routine should

be examined for a possible overrun condition.

If the routine in question does not appear to have any such problem the most

likely cause is that another routine, called in the prior sequence, has already

trashed variables or memory blocks.

Checking the trace log of the called routines leading up to one with the problem

will often show up the error.

The use of do .... while loops should be avoided, why is that?

The use of do .... while loops should be avoided. There are two reasons for this. First

is that the construct is superflous; Any statement that can be written as a do .... while

loop can equally well be written as a while lopp or a for loop. Complexity is reduced

by minimizing the number of constructs being used. The other reason is of

readability. A loop with the conditional part at the end is more difficult to read than

one with the conditional at the top.

write a note on Usefulness of testing

Software testing is the process of examining the software product against its requirements. Thus it is a process that involves verification of product with respect to its written requirements and conformance of requirements with user needs. From another perspective, software testing is the process of executing software product on test data and examining its output vis-àvis the documented behavior.

Identifier names also play a significant role

Identifier names also play a significant role in enhancing the readability of a program.

The names should be chosen in order to make them meaningful to the reader. In order to

understand the concept, let us look at the following statement.

if (x==0) // this is the case when we are allocating a new number

In this particular case, the meanings of the condition in the if-statement are not clear and

we had to write a comment to explain it. This can be improved if, instead of using x, we

use a more meaningful name. Our new code becomes:

if (AllocFlag == 0)

The situation has improved a little bit but the semantics of the condition are still not very

clear as the meaning of 0 is not very clear. Now consider the following statement:

If (AllocFlag == NEW_NUMBER)

We have improved the quality of the code by replacing the number 0 with a named

constant NEW_NUMBER. Now, the semantics are clear and do not need any extra

comments, hence this piece of code is self-documenting.

Good clues, Easy Bugs explain this term.

Get A Stack Trace

In the debugging process a stack trace is a very useful tool.

Following stack trace information may help in debugging process.

„h Source line numbers in stack trace is the single, most useful piece of debugging

information.

„h After that, values of arguments are important

o Are the values improbable (zero, very large, negative, character strings

with non-alphabetic characters?

„h Debuggers can be used to display values of local or global variables.

o These give additional information about what went wrong.

0 comments:

Post a Comment

Is this blog is useful for you?

Powered by Blogger.