A comprehensive practical introduction to all phases of software development including life cycle models, requirements analysis, design, implementation, testing and validation, maintenance, and evolution, focusing on agile software development.

In this course, students get first-hand experience working with a customer to develop and deliver a real-life software product. In the beginning of the semester, students form self-managing groups, and work iteratively on developing a large software project. Students learn modern tools for managing projects, working in teams, developing applications, and deploying projects on the cloud. Teams use Agile Scrum as a software development methodology, and create increments of their project in two-week sprints.

Moodle Course Page
Semester Fall 2024
Date Time, Location M-W-F 1:00 pm - 1:50 pm, Davis 117
Instructor Naser Al Madi
Office: Davis 115
Email: nsalmadi AT colby.edu
Prerequisites
  • CS 231 - Data Structures and Algorithms
Course Goals
  1. Understand the differences, advantages, and disadvantages of software development life cycle models
  2. Fully explain and contrast agile and waterfall process models
  3. Demonstrate the ability to perform standard software development procedures such as project planning, issue tracking, and version control, as part of a team
  4. Create and perform software validation and testing
  5. Create a project plan with requirements documents, such as user stories or other artifacts
  6. Evaluate the role evolution and refactoring play in the software development process
Milestones

There are weekly/biweekly milestones (Sprints) for the project. The sprints are designed to break your project into smaller increments, which leads you to work better with your group members and can allow me to provide support and feedback more efficiently.

The following table lists the expected content of each sprint.

WeekMilestoneContent
1 1. Version Control (Git/GitHub)
  • Set up GitHub account and custom profile page
  • Upload a coding project and create readme file
  • Demonstrate mastery of Git commands and concepts
  • Short written report documenting your work
2 2. Requirements Gathering and Planning
  • Document project requirements (specification)
  • Create user stories backlog
  • Diagram of system components
  • Create wireframe mockups
  • Short written report with a contribution list of each team member
4 3. Sprint: Static Website
  • Create a functional mock of your website using static pages (HTML, CSS, ..)
  • Host Static website on GitHub Pages
  • Short presentations in class from each group
  • Short written report with a contribution list of each team member
5 4. Sprint: Flask App
  • Create flask app with main feature from each group
  • implement features from backlog
  • Short presentations in class from each group
  • Short written report with a contribution list of each team member
7 5. Sprint: CI/CD pipeline
  • Create CI/CD integration and deploy on cloud
  • implement features from backlog
  • Short presentations in class from each group
  • Short written report with a contribution list of each team member
9 6. Sprint: Integration and Testing
  • Implement tests for your code
  • Add tests to CI/CD pipeline
  • implement features from backlog
  • Short presentations in class from each group
  • Short written report with a contribution list of each team member
11 7. Presentation: final presentation rehearsal
  • Each group presents what they worked on
  • Continue to implement features from backlog
  • Refactored code + better design
12 8. Presentation: Final Presentation
  • Initial analysis of results
  • Discussion of challenges to achieving this milestone
  • Short written report with a contribution list of each team member
  • Quality metrics: coverage, complexity, readability, and coding style errors
  • Short written report with a contribution list of each team member
Class Participation Class time will be used as follow:
  • Class time will be divided into short lectures and active learning sessions. Each lecture will prepare you for the milestone you are working on, and the active learning part will give you the opportunity to work with your teammates on applying what you learned.
  • For almost every milestone, each group will give an oral presentation with slides to update the rest of the class on your progress. Each group member should present the part they worked on. Everyone in the class is expected to ask questions and everyone in the group is expected to answer questions.
  • Attending classes is an easy way for you to work with your group members and/or get help from me. So you are expected to attend classes. Let me and your group members know beforehand if you have to miss a class.
Grading The course grade will be determined as follows:
Activity Percentage Graded as individual or group Grading Rubrics
Team projects (sprints) 45% Individual The grade for each milestone depends on the content, your contribution, and your oral presentation. I want to know what you did, if you ran into problems and didn't make much significant progress, talk to me about it. The oral presentations is based largely on your ability to communicate your work to me and to your classmates. In order to receive a high grade, the contributions of each team member must be well-integrated into a coherent presentation. This means you should spend more time thinking about how to talk to each other and to your classmates. Also, it is perfectly acceptable to spend most of your presentation talking about challenges, since that is how we learn.
Solo sprints 25% Individual These are short coding assignments that you will do on your own. They are designed to help you learn the material and to give you a chance to show me what you know.
Quizzes 10% Individual Short weekly or biweekly quizzes in class.
Teamwork and Participation 10% Individual The grade for participation depends largely on your teamwork skills, and your participation in class.
Final Presentation 10% Group The presentation will be graded based on the design and content.
Collaboration, Academic honesty

This policy applies to anyone you work with other than your partner.

Computer science, both academically and professionally, is a collaborative discipline. In any collaboration, however, all parties are expected to make their own contributions and to generously credit the contributions of others. In our class, therefore, collaboration on homework and programming assignments is encouraged, but you as an individual are responsible for understanding all the material in the assignment and doing your own work. Always strive to do your best, give generous credit to others, start early, and seek help early from both your professors and classmates.

The following rules are intended to help you get the most out of your education and to clarify the line between honest and dishonest work. We reserve the right to ask you to verbally explain the reasoning behind any answer or code that you turn in and to modify your project grade based on your answers. It is vitally important that you turn in work that is your own. We do use automated plagiarism detection software, so please be sure to abide by these, rather minimal, rules. Reports of academic dishonesty are handled by an academic review board and a finding of academic dishonesty may result in significant sanctions. For more details on Colby's Academic Integrity policies and procedures, see colby.edu/academicintegrity.

  • If you have had a substantive discussion of any programming project with a classmate, then be sure to cite them in your write-up. If you are unsure of what constitutes "substantive", then ask me or err on the side of caution. As one rule of thumb, if you see more than 10 lines of someone else's code, then you should cite them. You will not be penalized for working together.
  • You must not copy answers or code from another student either by hand or electronically. Another way to think about it is that you should be talking English with one another, not program languages.
  • Assistive code autocomplete systems that generate more than a single token of code are not permitted. You are expected to write all your code on your own and be able to explain it and rewrite it without assistance.
AI Policy

Understanding and using AI are important skills that you will master as part of your CS education at Colby, and the following policy will provide a controlled way for you to use AI to your learning advantage in this course:

  • Students may use AI tools (e.g., ChatGPT) solely for understanding concepts, reviewing examples, or receiving feedback on their code. These tools can be valuable for clarifying ideas and enhancing comprehension.
  • Using AI to generate any code, solutions, or answers is strictly prohibited and considered academic misconduct. All submitted work must be entirely the student’s own effort.
  • Students must be able to demonstrate their understanding of solutions through verbal explanations, either in class discussions, office hours, or during assessments.
  • When AI tools are used for understanding concepts, reviewing examples, or receiving feedback related to a specific assignment or project, students must:
    • Clearly indicate the extent and nature of the AI’s contribution.,
    • Submit an export or screenshot of the AI conversation as part of their assignment submission to document the interaction, and
    • be prepared to discuss and explain the submitted work during office hours or in class.
  • The use of AI code completion tools, such as GitHub Copilot or other similar platforms, is completely prohibited. Students must write and develop their code independently to ensure they are practicing and reinforcing the skills taught in the course.

  • Here are some examples of prompts that do not violate the AI policy:
    • “What is the difference between a stack and a queue?”
    • “How does a binary search tree work?”
    • “I'm encountering this error message 'IndexError: list index out of range' when running my code. What does it mean, and how can I fix it?”
    • “Can you explain how Dijkstra's algorithm works? I'm trying to understand its steps and how it’s applied in practice.”
    • “Can you help me debug my code? Don't generate any code, just help me understand why my code is not working.”

  • Here are some examples of prompts that violate the AI policy:
    • “Can you provide me with a solution to this problem?”
    • “Can you write a function that ...?”
    • “Can you generate a code snippet that ....?”
    • “Can you fix my code so that ...?”

  • Violations of this policy, including the use of AI for generating code or failure to properly document AI interactions, may result in penalties ranging from a warning to a failing grade for the assignment or course, in accordance with the institution's academic integrity policy.
The Colby Affirmation

Colby College is a community dedicated to learning and committed to the growth and well-being of all its members.

As a community devoted to intellectual growth, we value academic integrity. We agree to take ownership of our academic work, to submit only work that is our own, to fully acknowledge the research and ideas of others in our work, and to abide by the instructions and regulations governing academic work established by the faculty.

As a community built on respect for ourselves, each other, and our physical environment, we recognize the diversity of people who have gathered here and that genuine inclusivity requires active, honest, and compassionate engagement with one another. We agree to respect each other, to honor community expectations, and to comply with College policies.

As a member of this community, I pledge to hold myself and others accountable to these values. More ...

Title IX Statement

Colby College prohibits and will not tolerate sexual misconduct or gender-based discrimination of any kind. Colby is legally obligated to investigate sexual misconduct (including, but not limited to, sexual assault and sexual harassment) and other specific forms of behavior that violate federal and state laws (Title IX and Title VII, and the Maine Human Rights Act). Such behavior also requires the College to fulfill certain obligations under two other federal laws, the Violence Against Women Act (VAWA) and the Jeanne Clery Disclosure of Campus Security Policy and Campus Statistics Act (Clery Act). To learn more about what constitutes sexual misconduct or to report an incident, see: http://www.colby.edu/studentlife/handbook-section/f-sexualmisconduct/

I am committed to all Colby students feeling safe, accepted, and included in all aspects of their college experiences, including this course. Colby prohibits and will not tolerate sexual misconduct or gender based discrimination of any kind and is obligated, by federal and state laws, to respond to reports and provide resources to students. As your professor I am considered a "responsible employee" which requires me to report incidence of sexual misconduct, dating violence, or harassment to the Title IX Coordinator.

If you wish to access confidential support services, you may contact:

  • The Counseling Center: 207-859-4490
  • The Title IX Confidential Advocate, Emily Schusterbauer: 207-859-4093
  • The Office of Religious and Spiritual Life: 207-859-4272
  • Maines's 24/7 Sexual Assault Helpline: 1-800-871-7741
Religious Holidays

Colby College supports the religious practices of students, faculty, and staff, but we don't always know which people will observe which holidays. Since I need to plan course activities in advance, I need to know in advance, if you need to miss a class or have a deadline adjusted in order to observe a holiday. Please notify me by email at least 14 days in advance of any religious holiday that will affect your ability to participate in this course.

© 2022 Naser Al Madi. Page last modified: 01/10/2022