Wednesday, December 22, 2010

Projecting



I have like a total of 3-4 years of experience in software engineering and the last 1.5 of them is in my current job. Based on my last 1.5 year’s experience, here are some quality points of a software project from my point of view: (Not all of them are applicable to all types of projects, of course)

  • Can log files supply the really needed information? Can it help to understand a problem without debugging? Are log files easy to collect and send to other people?
  • Does the project have a simulator or some other forms of test code?
  • Is there a mechanism that will infer possible problems? For example, if a module is not aware of its erroneous behaviour, is there an outside module that checks the status of some things and then decides that the implemented module is not doing its job?
  • Can the module retry failed operations?
  • Can the module rollback if it crashes in the middle of performing an operation? Can it revert back to a stable state, without needing to be restarted?
  • Are the error messages informative to the end users? Are they able to direct the end users to right path?
  • After recovery from a crash, can the module process previous data or perform previous jobs using a correct logic?
  • If the module is an executable running by a scheduler, does it end after it finishes its job?
  • If this executable is needed to be running just as a single instance and if a scheduler is running it, when it’s scheduled one more time before the first one finishes its job, can the second job be re-scheduled automatically?
  • Are there jobs in the module that are repeated unnecessarily?
  • Does the module return back the resources it had used, when it’s done?
  • If there are time dependent processes, can the module perform correctly when the time zone changes?
  • If the module accepts input from the outside, can it perform correctly in all kinds of character sets and encodings?
  • When a process is taking long, is the end-user informed? Can the user interface stay responsive?
  • Can the end-user do what he wants in the possible shortest way?
  • Does the system do the maintenance of it’s output data, like database records, physical files, etc…?
  • Is the required default configuration supplied with the project setup?
  • Can the configurations be done through a single interface?
  • Are CPU and memory usage at acceptable levels?
  • Does the project balance the requirements of concurrency and integrity? Because for example, to keep a system’s data in integrity, you should use transactions or some other kinds of mechanisms. But transaction sizes are important for concurrency due to locking issues.
I’ll get back here when I add more experience to my humble portfolio :]

No comments:

Post a Comment

.widget { margin-top: 30px; margin-bottom: 30px; }