Guideline for SCJD2 Exam
发表于:2007-07-01来源:作者:点击数:
标签:
Guideline for SCJD2 Exam by our honor member, Sun cerified Java developer Shashank Tanksali Introduction Sun Certified Developer for the Java?2 PlatFORM exam Number 310-027, available July 31, 1999 The Sun Certified Java developer examinat
Guideline for SCJD2 Exam
by our honor member, Sun cerified Java developer
Shashank Tanksali
Introduction
Sun Certified Developer for the Java?2 PlatFORM exam Number 310-027, available July 31, 1999
The Sun Certified Java developer examination is a practical exam rather than an objective exam.Given below are some of the dos and dont@#s of SCJD.
Who should take up SCJD
Technically speaking, only those who have completed their SCJP can take SCJD. Anybody who wants to go beyond mere programming skills and learn all aspec?ts of a complete development process can take up SCJD. SCJD is equally useful for both an experienced software professional, who wants to keep his knowledge level current. It is also useful for software professionals, who have non java related work experience, but would like to switch to Java. It is also extremely useful for people with no prior software development experience, as it gives them an opportunity to demonstrate their skills to prospective employers. For people, who want to experience the full software development process and who especially like perFORMance based exams, SCJD is ideal.
What will I get with SCJD
SCJD is a third party validation of your development skills, and who better than the originators of Java can validate your skills. Since SCJD is a complete project assignment and not just a knowledge based examination, the process matters more than the end result. With SCJD, a person refines his analytical skills, decision making skills and of course programming skills.Also since there is no time limit, anybody can take up SCJD to suit their own work schedules. Overall once you have completed SCJD, you will find yourself a better developer, who can use Java in conjunction with all the other skills required to develop great software.
Approach to SCJD
The objective of the SCJD exam is not to get the assignment working, but rather to enjoy the experience of learning new technologies, analyzing requirements,making suitable assumptions, designing a system,learning design patterns and in general developing an entire application alone. The good thing about the SCJD exam is that it is full of ambiguities, incomplete specifications etc, which force you to think and decide what needs to be done.It is this experience, which will be rewarding in the long run.
Many people cannot resist the temptation to start coding and directly jump to coding. Coding should be considered only after the entire design has been finalized, and it should be a mechanical process to translate a good design to Java code.
SCJD Checklist
This is not an exhaustive checklist, but it should give some inFORMation about what needs to be completed before the project submission.
Are all the assumptions made in the project clearly documented ?
The examiner should not have to guess what assumptions you made. If you made an assumption, it should be clearly documented in the submitted document. It might be even better to have an assumptions section in the document, so that the examiner clearly knows what you had in mind, when you designed the system. The best way to keep track of assumptions made is to put them in a document, as and when the assumptions are made. Documentation is not something done at the end, rather it should be done in parallel with development.
Is a suitable package structure used for the project assignment ?
Java classes which logically belong together should go into a separate package.
Is finally used in all the appropriate places ?
For example, if a client acquires a lock and then due to some reason, there is an exception, the client should release the lock before returning, immaterial of whether there was an exception or not.
Are the Javadoc comments written on the same lines as the api documentation ?
What is the exception handling mechanism used ?
Do exceptions cascade all the way to the top or are they handled where they can potentially oclearcase/" target="_blank" >ccur ? An end user should not be forced to handle an internal exception, if it is of no interest to him.
Is the atomicity in the application guaranteed ?
Atomicity in short is either everything or nothing. So if a booking is taking place for a flight and a record is locked, either the booking should go through or if the number of seats etc are not available, the entire transaction should be rolled back. The database should not be left in an inconsistent state even if the application crashes.
Is the user documentation clear enough to allow anybody to use the system ?
The preferred way to package applications is by using executable jar files. With executable jar files, the classpath etc need not be set. Executable jar files are a new feature in Java 2, and it makes sense to use it.
Documenting design decisions
Are all the design decisions clearly documented. When a design decision is documented, the alternatives considered, their relative merits and demerits need to be also documented. Basically the examiner is interested in knowing why you chose a particular approach over another.Design decisions should be briefly and clearly explained and should not run into several pages.
Use of standard design patterns
Whereever possible, use design patterns. Design patterns are tried and tested ways of accomplishing a particular task. Using design patterns tells the examiner that you have done your homework.
Error handling
Do not expect sensible data to be provided to your application always. How does the data converter behave if the data supplied to it does not match the schema supplied ? What happens if a negative number or a non numberic value is entered for the number of seats ? For example if the 20th row in the input data file for the data converter is wrong,the data converter should either skip the row, log an error and continue, or it should give an option to the user to choose an action (either abort entire conversion or skip bad record). The data converter should not load 19 records, throw an exception and exit.
Also document clearly, the expected outcome in case of an error. For example, you might document that the data converter ignores bad data.
Code clarity
The best comment you can write is readable code. With readable code, there is no need to write comments.
Is the indentation uniFORM all over the code and according to the java standards ?
There is nothing more annoying than seeing several files all using a separate coding style. Read the java coding standards (as it will be enormously helpful in the professional career as well) and ensure indentation across all the java classes is consistent.
Testing the application
Testing an application should start when individual classes are developed. It is better to prepare an entire suite of test programs (not to be included in the submission) to test the application. Sometimes, it might be useful to ask a friend etc to use the system to uncover any possible faults in the system. For example, when asked my friend entered the number of seats as 5 followed by a space. I was not doing a trim on the entered value, which caused an exception to be thrown. Asking others to use the system without an prior knowledge can uncover bugs, which we might not have thought of.
Use intuitive field names
Except for loop indexes etc, intuitive field names should almost always be used. originFlight gives a lot more meaning than origFlt for example.
Ask yourself why this approach ? What are the alternatives ?
For every single design decision that you make in the assignment, ask yourself what are the alternatives ? What are the advantages of the chosen approach over the other approaches ? For example, why sub classing, why RMI, why singleton etc
Make interfaces where appropriate
Wherever possible, consider using interfaces instead of classes. For example, consider if having a DBInterface and a class which implements it is better, as dealing with interfaces will allow you to change the implementing class at any time. Similarly do not directly refer to a Hashtable, instead refer to a Map with Map m = new Hashtable() ; This allows you to switch from a Hashtable to a HashMap at any time, without affecting anything else.
If using Object serialization, clearly document the serializable fields
Wherever possible, implement Runnable instead of extending Thread.
This allows you to keep the one chance that you have to extend any class sometime later.
Sensible server output log
Ensure that the output of the server is sensible and does not include any output of no concern to a server administrator, for example debug statements etc should not be part of the server output. However critical errors etc, should always be logged.
Write consistent code
It should be obvious from the code, that it is written by a single individual. Do not for example, use
import java.util.* ; in a java file and import java.util.Vector; in another file. It is recommended that any classes used are explicitly imported, so that by looking at the top of any java file, it is obvious, what classes are used in that file. Also group together all public members first, protected members next, package members next and finally private members in all the java files.
If there is any cleanup to be done in any class, is finalize being used ?
Are all the server classes threadsafe ?
Write a multi threaded program to simulate several users and connect to the database server with it to test if the server is threadsafe.
Test separately in local mode and .network mode.
Look for the non obvious
For example in the FBN assignment, deleted records are just marked for deletion and are not actually removed from the underlying database. What will happen if an attempt is made to insert a record with a key belonging to a record marked for deletion.
If any method like getRecord() returns null, is it being appropriately handled ?
Consider using meaningful names for boolean variables.
For example, if you have a boolean record status attribute in a lock class, a value of LOCKED and UNLOCKED is more descriptive rather than true or false. These variables can be defined as static final constants in an interface or the class itself.
Ensure the method signatures are the most restrictive.
Changing a method signature from most restrictive to less restrictive can be done at any time without breaking any existing code, but the other way cannot be done easily. Once a public interface is exposed, making it more restrictive may break some existing code. Never use public data members unless absolutely necessary, instead use accessors.
原文转自:http://www.ltesting.net