Scripting best practicies

Discussion in 'Cadence' started by cafm, Mar 9, 2007.

  1. cafm

    cafm Guest

    HI guys

    I am a novice electronics enginner currently working on DFT ans
    sythesys. When I came in from college the one thing I though would
    have help me in the industry was some more experience with scripting.
    I had fed this back to my college juniors and they have started up on
    that. Recently they ask me if i could document some best practicies
    for writing scripts in the EDA industry and I came up the the
    following article. before I send this to my juniors I would be much
    obliged if you guys could take a look at it and critisize/review it.
    Please do keep in mind that this is meant for novice engineers like me
    and other coming in from college. :)

    Thanks in advance
    (This can also be found at my blog at )
    http://olympusmons.blogsome.com/2007/03/08/flops-and-scripts/
    --------------------------------------------------------------------------------------
    Here are some rules that I think make a good script be it in simple
    shell or perl or other fancy languages.
    So here goes....
    · Be Verbose Internally
    Usually being loud mouthed and blowing your trumpet is something that
    is cherished by most nerds but what to do, unfortunately its not
    considered very professional, so you either wait for some else to
    realise how ingeniously you have solved a problem or sad for one day
    at the fact that that's one more piece of sheer brilliance not
    recognized anf get on with you life. BUT coding lets you do exactly
    the opposite....Even though it's the most commonly used "yada...yada...yada"
    about writing any script or program me thinks it's still not
    emphasized enough......USE COMMENTS! On the other hand you might be a
    brilliant coder and don't care what other think, and of course you
    might not want other to use your code >:)....but think of this, you
    might need to use/modify after N days....and trust me its work that
    extra 30% effort in writing comments will help save a 1000% effort
    that might be needed to understand the script again
    · ...Externally...
    Lets face it, command line scripting is not exactly a eye candy for
    the user but still it is used since it serves purpose but say the
    script starts executing. It has to execute 10 steps(think as separate
    tool invocation) each of varying time. Once invoked the script and the
    shell go into a world their own with out printing out anything while
    the invoker is biting his nails trying to figure out what the hell is
    heppening? Did it crash? Has it gone to an infinite loop? ...once done
    the script may cleanly exit but by that time the invoker could have
    had a heart attract, that is if he is able to resist the temptation of
    CTRL-C that is... But if the script would report or just sprout out
    "Level n complete...." with the odd echo command after each step, with
    maybe a small statistics/summary of the last step run, we can save
    some time from the reruns or maybe even some money for the medial
    insurance company
    · /dev/null redirection
    Just like too much of a good dish is poison; similarly it's a good
    practice to use the /dev/null redirection wisely. There is no use
    sprouting out 100 lines per second to the screen if the user is not
    going to be able to read even one line is it? Say the script invokes
    multiple tools in its flow and you know that the tool anyway saves
    what ever it prints to a log file which the user can access once the
    run is finishes then we can safely redirect the tool output to /dev/
    null to avoid the user a headache. if the log file is not
    automatically created, it would be useful r to redirect it to a log
    file (and not the screen) unless you have specific reasons to keep the
    log file from being read
    And if you are one of the perfectionist coders then you can go ahead
    and grep some of the final results of the log file to the screen while
    the next process is being done.
    · Usage Check /function
    Generally scripts are written to automate tasks, and most scripts do
    take some arguments to provide some flexibility or extendibility to
    their usage. 9 times out of 10 the script will be reused by someone
    else. So if you were to leave the usage information (invocation
    format ) hidden deep inside the code, the scripts usability is greatly
    reduced (unless of course you do 24 hour customer service for it) so
    its advisable to always do some usage checks like for the correct
    number of arguments, proper switches etc and also a sample usage
    example to dump out when the usage is wrong. This can be a separate
    function to not interfere with you "actual code"
    · Error Warning
    Of course while running the scripts some errors are bound to happen or
    you might want to give some info to the user that must be easily
    filtered out from the rest of the output. Its always better to use a
    separate function to print the errors and warnings with a
    Error: Error details Or Info: Info details so that it can easily be
    searched for in the log file or grep`ed to a separate file. Also using
    a common function to report errors can help keep a count of the errors
    and related fail safe mechanisms
    · Exit function
    If the script is long and good you might be exiting from different
    locations under different conditions, so it would be good to have a
    single exit function which is "aware" of global variable like error
    count etc and exits using a standard mechanism, generating a small
    concise report regarding the run
    · Log file
    You might for a highly verbose script but it will be useless if the
    run is too fast or the user is distracted during the run. There needs
    to be a mechanism to be able to generate a log file of the output
    during the run. The user can always "tee" the output to a log file but
    if you can generate a default log file that would be good
    {
    #code here
    } | tee script.log
    · Modularize
    If you write a lot of scripts or even not, its always to modularize
    the code so that it can be
    1) Easy to maintain
    2) Easy to reuse
    That's about what I can think of right now...
    Statutory warning :p
    I have written them with a electronic engineer's....hmm no....a EDA tool
    engineer's perspective. I think that this would be mostly translate to
    same in other uses of script.These are not exactly hard and fast rules
    and the relevant would depend on various parameters like
    functionality, length etc of the script being written. I am greatly
    indebted by the information that was passed to be by other experienced
    engineers in my team and hope that this is a good read for any novice
    writing scripts for the EDA industry. If I have missed out anything
    please do not hesitate to leave a comment
     
    cafm, Mar 9, 2007
    #1
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.