Welcome to CS 397, Tools for the Software Life Cycle and Beyond!
Course goal: to give you the tools that enable you to work smarter--not harder. We'll focus on how to automate processes (using Unix tools and Bash scripting) and how to use various software tools to make collaboration, debugging, tracking issues (and more) easier. A side effect of taking this course is that you will know significantly more useful tools and technologies that employers would like you to know.
Catalog Description: This course is the study of software tools and environments commonly used throughout the software life cycle and beyond. The course will focus on the tools used in the software life cycle, the goals of each tool, how the tools are used in practice, and the technology behind the tools. Students will learn how to choose from among a variety of different tools for a given software engineering task. Tools include integrated development environments, software testing and debugging, build tools, static analysis, performance profiling, and containers. In addition, we'll also learn Unix commands and bash scripting.
Topics covered include
- Unix tools
- Bash scripting
- Build/Make Scripts, e.g., ant or maven
- Version control
- Issue Tracking
- Static Analysis
Classroom work will consist of lecture, discussion, and lab experimentation. Written work will consist of several homework and programming assignments, presentations/demos, and one exam.
After taking this course, you should be able to
- use a variety of Unix tools
- apply a variety of tools to automate many tasks
- describe the use of state-of-the-art software tools for developing and maintaining large software systems, based on hands-on experience
- discuss when best to use different tools, the limitations of the tools, and what they have to offer
- discuss the challenges and strategies in building software tools
- communicate technical content in both oral and written forms
- learn a new tool on your own
Office: Parmly Hall 410
Office Hours: WR: 2-4 p.m.
Phone Number: (540) 458-8309 (it is better to email me than to call)
CS 397, Section 01
Lecture: MWF 12:15 - 1:15 p.m.
There is no text book for this course. We will be using plentiful online resources.
- It is very important that you attend lectures (see Grading below). There will be considerable information given in class that is not available elsewhere. Family and medical emergencies and conflicts with University-recognized extra-curricular activities are the only reasons to request that work be rescheduled.
- If you are not feeling well but still want to participate in class, you can join via Zoom from the course's Canvas page.
- You are expected to arrive to lectures promptly.
- Please turn off cellphones.
- Actively participate in the class by asking and answering questions.
- Check your W & L email frequently and check this web page and the schedule for new information.
- Throughout this class (and life in general), keep in mind a cowboy's wisdom: "Good judgement comes from experience." You may ask, "How do I get experience?" Bad judgement works every time. My point? Don't be afraid to make mistakes in this class, but make sure you learn from them!
- Use the Web to find solutions to some of your problems. Document where you found the code.
I will try to make this course and its material as exciting for you as it is for me. I will be respectful of student questions and misunderstandings. I will give prompt, constructive feedback from assignments. I will be available during office hours and by appointment. I will do my best to respond to questions via email within 24 hours.
You may discuss individual programming assignments informally with other students. However, sharing a solution, in the form of experimental results or the design or implementation of a program, is an honor violation. Students should know where to draw the line between getting legitimate outside assistance with course material and outright cheating. Students who obtain too much assistance without learning the material ultimately cheat themselves the most. If you have any uncertainty about what this means, consult with me before you collaborate. All written assignments should be done individually, unless otherwise noted.
Participation and attendance
To receive full credit for class participation and attendance, you must have less than two unexcused absences from class and you must be actively engaged in the classroom by answering and asking questions each class when appropriate and by being respectful of other students. The average grade for participation is a B-.
The schedule, including important dates, is posted at the beginning of the semester. You should plan accordingly. If there are acceptable conflicts, tell me at the beginning of the semester and then remind me about a week in advance.
All assigned work is due on the date specified. Any assignment turned in after the due date/time but on the same day will be penalized 10%. Any assignment turned in after the day on which it is due will be penalized an additional 10% for each late day. No assignment will be accepted that is more than three school days late. If you turn an assignment in late, you must indicate this somehow (in comments, on paper, etc.).
Grades for the course will be computed as follows:
- (60%) Individual programming and homework assignments,
including but not limited to:
- Unix tools practice
- Bash scripts
- Analyzing and comparing a variety of tools
- Reading/discussion assignments
- Analyzing guest speakers' talks
- (25%) Final Tool Project
- (15%) Professionalism: participation and attendance, including but not limited to
- installing software before class
- in-class assignments where you get an acceptable (check) or not-acceptable (check-)
- interacting with guest speakers