Codonics Mid Co-op Report

Check out my Final Co-op Report Fall 2011

Codonics

During my Co-op at Codonics, I have gained experience in testing software, and developing new features for the Codonics Safe Label System, a medical device used in Operating Rooms to help reduce the number of medical mistakes in syringe labeling.

Responsibilities

At the beginning of my co-op with Codonics, many of my responsibilities revolved around testing software that was near its release. I verified that known bugs were successfully fixed, and performed tests that revealed the existence of new bugs. As the software was updated, I updated test procedures to reflect new changes.  After I had become more familiar with the software, I formulated and wrote my own test reports, and developed custom scripts that were needed for the tests.

Once I had familiarized myself with the software, I was given task of fixing a few bugs with the software. Once the software was released, I began adding new features in order to allow the hardware to connect to wireless networks. Currently, I am continuing to improve and stabilize the wireless code, as well as develop a solution to restrict user access in the Linux terminal.

Skills

I have used many skills that I learned at Case Western during my co-op at Codonics. My Advanced Game Design class helped me further familiarize myself with Java, a programming language used extensively during my Co-op. Additionally, my Operating Systems class has been very beneficial when writing the code that establishes connections to wireless networks. Operating Systems helped to further my understanding of concurrent processes and threading, which are used in my wireless code. Operating System and Compilers both helped further my skills in C, and I have started investigating its use for developing a restricted Linux environment, which only allows a specific user to execute specific commands; while still allowing them to execute pre-defined scripts that use blacklisted commands.

Codonics has allowed me to further develop my skills as a computer programmer, by providing me with practical experience. While updating test procedures, I learned how to use LaTeX, a typesetting language used for the design of technical documents. Once I had begun doing more testing, I began using AutoIt to automate the tests, increasing productivity. While writing code that handles initiating wireless connections, I have also begun to write JUnit tests. JUnit tests are small tests that test pieces of code that programmers write, and help check for bugs, especially when multiple programmers are working on a project.

Reflections

My co-op at Codonics has given me real world experience in software testing, planning, and development. I have done quite a bit of testing at Codonics, and it helped me to discover new ways that software can be automated. Testing is large part of the software life cycle, and Codonics takes it very seriously. It helped me to familiarize myself with the software, and learn how it worked. I don’t think I realized how much effort goes into testing software, but when you develop software for medical use, it is imperative that the software behaviors according to well defined specifications. I began writing my own test reports, and wrote scripts to automate those tests. I even stress tested the Safe Label System by printing over 1,000 drug labels at once, using a custom Tomcat server that would flash drug barcodes across the screen of an iPod, each barcode scanned by the SLS.

Once I had starting writing my own code for the software, I was asked to create JUnit tests to ensure the functionality of my code. I had never used JUnit before, but I knew that many companies used it for testing purposes. I was excited to finally learn how to use it, and was happy to find out that it was a very useful framework. I read a book about JUnit testing and its importance. The testing of individual pieces of code from a larger project, which not only helps to find bugs at that moment, but also in the future. JUnit tests test the actual production methods and can detect when something isn’t behaving as expected. So, if a future programmer were to change the method, the test would fail, and indicate either a bug was introduced, or at the very least cause the programmer to re-examine his work. If his code is correct, he can update the test as needed, and continue on. When all these tests are called automatically at build, a build server can quickly alert programmers when a test fails. When I first began my co-op, I didn’t understand the importance of unit testing, as it takes time to write the tests for all the code. During my co-op I had to re-write a large part of my wireless code to allow the Linux operating system to automatically initiate wireless connections. During the redesign, I was able to run the same unit tests I created on the new code, and it helped to ensure that my new code functioned properly based on the inputs it was receiving. This shorted the amount of time I had to debug my code, and helped to re-assure me that the new code achieved the same results as the previous version.

One of the great things about working with Codonics is the chance to write code that affects real-world applications. I’m not just writing code to learn, I am committing code into a real project. Knowing that my code is being integrated into a larger product is a very positive feeling. Codonics manufactures medical equipment that benefits a large number of doctors and hospitals around the world. Before my code gets integrated however, there is a code review process that ensures the code meets certain standards. The code review process given me a way to gauge my learning, and allows me to receive feedback on my work. I learned how to not only write better code, but I learned better documentation techniques, like using JavaDoc to annotate class, methods, and variables. These annotations appear when users hover over the methods in the development environment, and help others to understand my work. I look forward to continuing my Co-op with Codonics, which has been a great experience for me, allowing me to grow and gain an understanding of many concepts employed by software developers in commercial business.

Privacy Policy