TIC2002 Introduction to Software Engineering


Course overview

TIC2002/TCX3221 Introduction to Software Engineering contains roughly a 50-50 balance of theory and practice of SE. It covers the knowledge/skills necessary to do small software projects, and as such, it is a first step towards preparing you to work in bigger SE projects, which will be done in later courses.

This course is optimized for SCALE students so that you can learn at your own pace even if you are not a full-time student: the need to attend lectures/tutorials at fixed times is low, deadlines are more flexible than usual, and the on-campus presence is optional.

e.g., Instead of traditional instructor-led tutorials, the course provides quizzes and other activities that you can do at your own time to self-test your knowledge. The instructor can be consulted if you need help with any of them.

[Note for TCX3221 students] Sometimes, TIC2002 course code is used to refer to this course (instead of the longer TIC2002/TCX3221). There is no difference between TIC2002 and TCX3221 -- so, whatever is stated for TIC2002 applies to TCX3221 as well.


Using this course website

The Weekly Schedule Page is your main source of information for TIC2002/TCX3221. You will need to refer to it weekly. For an overview of the full schedule, refer to the Full Timeline page.

More details for the upcoming weeks will be added as the weeks progress. In general, information given for more than 1 week into the future should be treated as tentative.

Browser compatibility

Most of this will work on most mainstream Browsers, although some pages might not work well in small-screen devices.

Information layers

We try to layer information so that readers can decide to omit less important layers if they wish to. Some 'layering' techniques used are explained below:

More important information are in bold or highlighted while less important information are dimmed or in collapsed panels such as the below.

Some less important info in a boarder-less panel


Some less important info in a panel


You can use the button in a panel to open it as a new tab (it can be expanded in-place too). This feature is available only for panels containing another full page of the website (i.e., not available if the panel contains an extract of a page). e.g.,

A panel that can be opened as another tab


Tabs indicate alternative content (e.g. video vs text). You can choose the one you like and ignore the other tabs.

Some textual description of X


Video describing X


Dotted underlines indicate (activated by hovering over it) and dashed underlines indicate modal windows (activated by clicking) containing additional information.

the topic levels system indicates the progression of contents from basic/relevant topics to advanced/less-relevant topics. Open the panel below to see more details of that system.

Conventions used

Shorthand headings

Meaning of some shortened headings:

  • What : the meaning of the concept in concern (example)
  • Why : the motivation behind the concept in concern (example)
  • How : the usage of the concept in concern (example)
  • When : the pros and cons of the concept in concern, when to use the concept (example)

Meaning of icons

: additional info
: warning
: positive message
or : important message
: error or danger to avoid
or : tip
: definition or topic
extra : tangential info, can be ignored if not interested
: learning outcomes
: examples
: resources
: exercises
: printable version
: preview/more info
: video
>_ : a command to be run in a terminal
: textual description
: slides
: output produced by running code
question without answer
question with answer

: tasks to do
: lecture/briefing
: tutorial
: deadline

Searching for keywords

Use the search box in the top navigation bar to search for keywords in the website pages. If you cannot find the content related to a keyword, let us know by posting in the forum so that we can add the missing keyword to our search index.

Saving as PDF files

Follow this guide @SE-EDU/guides.

Printing Textbook Content

A PDF version of the full textbook () will be provided at the start of the semester.

In addition, printer-friendly version (indicated by icon) have been provided for each chapter and the whole book. You can use them for saving as pdf files or printing.

Making this Website Better

This website was generated using the MarkBind software developed at NUS. We welcome bug reports, suggestions, and contributions, to be submitted in the forum.


Instructors

Damith Chatura RAJAPAKSE (Course Coordinator)
Associate Professor, NUS School of Computing
PhD, Software Engineering, NUS, 2002-2006
BSc, Computer Science & Engineering, University of Moratuwa, 1996-2001
damith[at]comp.nus.edu.sg
COM2-02-57
651 64359
https://www.comp.nus.edu.sg/~damithch

Tutors:

  • Richard Dominick:   dominick[at]u.nus.edu

Lectures + Tutorials

Tuesday 6.30-9.30pm
COM1-02-08

The first lecture will be in F2F mode, and will start at 7pm.

Subsequent lecture + tutorial time is divided into three parts, as given below and will be in hybrid mode.
You can continue to attend them using F2F mode but those who show good progress in weekly tasks will have the option to join live via Zoom, or watch the recording later.

  • [6.30-7.00pm] Pre-lecture consultations:
    • You can use this time to get prof's help if you encountered problems while doing the previous week's tasks.
    • This session will be online. Communications with the prof is to be done using Microsoft Teams app.
      • If the question is potentially relevant to others in the class, post your question in the chat room of the TIC2002-2024 Aug-Nov (link) MS Team.
      • Otherwise search for prof's name (Damith Chatura RAJAPAKSE) in MS Teams and send a private chat message.
  • [7.00-8.00pm] Lecture briefing:
    • Will be done in Hybrid mode (i.e., you can attend F2F, or join via Zoom, or watch the recording later).
  • [8.00-9.30pm] Post-lecture consultations:
    • This portion will start as soon as the previous portion (i.e., the lecture briefing) ends.
    • During this time,
      • go through the week's lecture topics in the course website
      • do suggested activities/exercises in there (if any)
      • if you encounter any problems while doing the above or have a question, contact the prof/TA using MS-Teams or F2F.

Lecture slides are not suitable to be used as reference materials as they have been instead. Use the textbook (not slides) as your main reference. Slides can be uploaded to Canvas if requested, after the lecture.


Textbook

This course is supported by a customized online textbook Software Engineering for Self-Directed Learners (TIC2002 edition), integrated into this course website.

Topics relevant for a week appears under the weekly schedule page (see the Topics tab). Some topics in there come with pre-recorded videos. Watching those videos is encouraged but optional: while they do not have additional theory not already covered by the text version, they can have complementary explanations, more examples, visualizations etc.


Programming language

This course uses Java. It assumes you are familiar with C++ basics and provides lessons to help you transition from C++ to Java.

Install JDK 17 on your computer. Using other versions of Java is highly discouraged.


Programming exercises

In some weeks, there will be some programming exercises for you to submit (on Coursemology). You should do the exercises as you learn the topics.

Focus on learning the topic rather than finishing the exercises. While these are exercises provided to self-test your knowledge, the more important thing is to read and understand the topic content. Furthermore, not all topics are tested by exercises.

Programming exercises are graded for participation.

FAQ: Which code editor to use when doing programming exercises?
Answer: Here are some options:

  • Later in the course, we will be using Intellij IDEA as our code editor. If you are already familiar with using similar editors (e.g., VS Code), you can start using it early. The community edition (free) is good enough for this course.
  • If you are familiar with another code editor that supports Java (e.g., VS Code), you can use that.
  • For the time being, you can use an online code editor such as repl.it (create an account -> sign in -> click on + Create Repl -> choose Java).
  • You can use a simple text editor, compile using javac command, and run using java command.

Project

  • The project is to be done individually.
  • The project based on a generic project called Duke.
  • In the project, you will build a small chatbot, using Java.
  • The project is to be done in small increments. You will be given a schedule of what increments to be done in each week.
  • Some weekly increments will be common to all students, while some will vary from student to student. That means your final product will be unique in terms of total features, but some features will be common to other students in the class.

Weekly project increments are given in the panels below:

Week 3


Week 4


Week 5


Week 6


Week 7


Week 8


Week 9


Week 10


Week 11


Week 12


Week 13


Week 13: Final submission

Deadline: Sun, Nov 17th 2359 (Sunday of week 13)

  • An extra week can be given (upon request) for a small late submission penalty of -2 marks.
  • Submissions later than the hard deadline are liable to a late submission penalty, to be fair to those who submitted on time. But given you are part-time students, late submission penalty will be more lenient than otherwise (e.g., -1 per day) and will be on a case-by-case basis.

Deliverables:

Please upload items 2, 3, 4 as three separate files, using the three Canvas assignments provided. Do not put them into a single zip file.

  1. Source code of the working program: push to your GitHub repo.
  2. Product:
    i. Create a JAR file for the final version of the code.
    ii. Copy it to an empty folder outside your project folder, and test it (reason: to ensure the JAR file does not depend on a specific folder location for it to work).
    iii. Submit to Canvas, name: {YourName}.jar e.g., JunHao.jar
  3. Project report: a single .docx (preferred) or a pdf file that follows the template file given (available in Canvas/Files/Handouts).
    • Submission: Upload to Canvas. The file name should be your name e.g., JunHao.docx
    • [Optional] Feedback for an early draft of the project report: Optionally, you can get prof's feedback on an early draft of the project report if you email a draft of the report to the prof no later than Wed, Nov 13th 2359 (Wednesday of week 13). Note that feedback on project report draft will be high-level feedback only, and will be given only once (reason: the report is graded).
  4. Demo video:
    • Record a demo video showcasing the features of your product.
      You can use any screen recording software for this. One simple way is to start a Zoom meeting and record the meeting while screen-sharing your demo.
    • Use the exact version of the code you submitted (i.e., the demo should match the submitted code exactly).
    • Recommended length 7 minutes, max length 10 minutes.
    • Audio narration is optional if the demo can be understood without the audio.
    • Ensure the video is in a format that can be played by any computer.
    • Submission: Name the file with your name (to match the jar and the report file) and upload to Canvas.
  5. Code Reuse Declaration:
    • Submit this survey (on Canvas) to declare your level of code reuse in the project.
    • This is compulsory. You must submit this even if you did not reuse any code.

Policies

Deadlines

  • Deadline for weekly tasks:
    • If a specific deadline is given, adhere to that.
    • If no specific deadline is given, try to complete tasks allocated to a week by Tuesday 6.30pm of the following week (i.e., before the next lecture). In case you fail to meet that deadline, you should still do those tasks as soon as possible. There will be no penalty if a task is done within a grace period of one week after the deadline.

Plagiarism

  • You are allowed (and even encouraged) to discuss course tasks with others and help (and learn-from) each other. However, the submitted work should be largely your own.
  • If you reuse/adapt code from elsewhere (e.g., from an online site such as stackoverflow), you must cite the source in the code. e.g.,
    //Solution below adapted from https://stackoverflow.com/a/16252290
    {Your implementation of the reused solution here ...}
    

Keep track of code reuse If you reuse/adapt code from elsewhere, cite the source in code immediately. Otherwise you will not remember the source of code reuse later. Not citing the original source can land you in trouble for plagiarism.

FAQ: Can I use code generated by AI tools (e.g., Copilot, ChatGPT)?
Answer: We don't explicitly prohibit you from using those tools, but we strongly discourage you from using them in a way that hinders your learning. For example,

  • Good Use a tool such as GitHub co-pilot to increase the productivity of writing code (e.g., auto-complete the next bit of code).
  • Good Write the required code yourself, and then, use the tool to generate alternative implementations, compare, and use that experience to improve your own coding skills.
  • Good When troubleshooting/debugging, use a tool to help you locate the problem.
  • Bad Give the problem description to the tool and get it to generate the code for you, and use it directly in your submission, and claim it as your own.

Other caveats:

  • Using such tools can result in your code being same as others in the class. If such code was flagged for plagiarism, "It was generated by a tool" will not be a valid excuse. Therefore, if you use (possibly with minor changes) a non-trivial code snippet generated by a tool (e.g., an entire method), it is safer to acknowledge in the code as a case of code reuse.
  • Those tools sometimes can confidently give you the wrong answer. So, have a healthy level of scepticism about the accuracy of the code generated by such tools.

Tools

Zoom

Install Zoom in your computer. Installation and login instructions are here (requires login).
When using Zoom, remember to login using the SSO option and use your NUSNET account.

Microsoft Teams (MST)

Install MST in your computer. Installation and login instructions are here (requires login).
When using MST, remember to log in using your NUSNET account.

The MST team used for the class is TIC2002-2024 Aug-Nov (link).

Git, Sourcetree

We'll be using Git as our revision control tool (compulsory).

If you are not familiar with Git already, install Sourcetree (a GUI for Git, but also contains Git) on your computer. Instructions are here.

GitHub

We'll be using GitHub for code hosting (compulsory).

Create a free GitHub account if you don't have one already.

Coursemology

We'll be using Coursemology for coding exercises (compulsory).

  • You'll receive the invitation link near to the first lecture.
  • More info about assignment submission will be given in the first week's lecture.

IntelliJ IDEA

We'll be using IntelliJ IDEA for programming. While using IntelliJ is not compulsory, there will be no help/instructions given for other IDEs.

Install IntelliJ on your computer. You may use the Community Edition (free) or the Ultimate Edition (free for students).


Assessment

[40%] CA

  • 10%: Participation -- Each week has activities that can earn you participation points.
    For you to be considered as participated in a particular week, you need to earn at least half of available participation points in that week (e.g., if the eligible activities in a week offer a total of 5 points, you should earn at least 3 points).
    To earn full 10% marks allocated for participation, you should have participated (based on the above criterion) in at least 10 (out of 13) weeks.
    You can track your participation points through the Participation Dashboard.
    Given below are the typical activities that can earn you participation points:
    • Weekly quizzes:
      • When awarding participation points for quizzes, we look for two conditions:
        • Condition 1: submitted early i.e., before the next lecture
        • Condition 2: answered correctly i.e., least 70% of the answers are correct (reason: to discourage random answers)
      • You earn:
        • 3 points if you satisfy both conditions.
        • 2 points if only one of the conditions is satisfied.
        • 1 point if submitted but both conditions are not satisfied.
    • Weekly programming exercises: You can earn 3 points if you complete at least 80% of the exercises allocated for that week.
    • Other admin activities: Other admin activities such as submitting a survey can earn you 2 points, unless the activity specify a different number of points.
  • [30%] Project
    • [20%] Features, code
    • [10%] Documentation

[60%] Final Exam


Getting help

If you face difficulties/doubts while learning the weekly topics, doing weekly exercises/tasks, here are the options to seek help:

  1. [Preferred] Post in MS Teams channel for the class:
    • If there is any chance that the question can be relevant to other classmates, post in the General channel.
    • Otherwise, post in the YOUR_NAME - Help Channel private channel we have created for each of you.
    • If there is no response from us after 24 hours (in which case it is likely that we didn't get the MS Teams notification), feel free to remind us by emailing tic2002@comp.nus.edu.sg.
  2. Email tic2002@comp.nus.edu.sg. These emails will be answered by the prof or forwarded to the TA for follow up.
  3. You may also post in the Canvas forum or Coursemology forum.

Exam

There is no midterm. The info given below are for the final exam.

Instructions below are from the previous semester. Will be updated closer to the exam.

Mode: F2F pen-and-paper mode (not digital)

Weightage: 60% of the final grade

Schedule/venue: The final exam will be as per the normal exam schedule, which will be sent to you by the Registrar's Office (or you can find via EduRec -> Academics -> Exams -> View exam schedule). You can find the date/time from NUSMODS.

Structure:

  • The exam has two parts:
    • Part 1: MCQ questions (1 hour, 30 marks)
    • Part 2: Essay questions (1 hour, 30 marks)
  • Both papers will be given to you at the start, but you need to answer Part 1 first (i.e. MCQ paper). It will be collected 1 hour after the exam start time (even if you arrived late for the exam). You are free to start part 2 early if you finish Part 1 early.

The exam is open-book: you may bring any printed or written materials to the exam in hard copy format. But no devices are allowed.

Questions papers are confidential. You are not allowed to reveal their content to anyone after the exam. All pages of the exam paper are to be returned at the end of the exam.

You will be given a practice exam paper at least one week before the final exam.
You can also use past weekly Canvas quizzes to self-test your knowledge (they have been reopened, and set to show the answer immediately).
However, past exam papers will not be made available.

Final Exam: Part 1 (MCQ)

Number of questions: 50

Each MCQ question gives you one or more statement to evaluate.
Unless stated otherwise, the meaning of answer options are
A: Agree. If the question has multiple statements, agree with all of them.
B: Disagree. If the question has multiple statements, disagree with at least one of them

Here is an example:

Q23: Java can be used to write OOP code.

The answer should be A (i.e., Agree).

Here is another example:

Q24: Testing is a QA activity. It is done by testers only.

As the first statement is true but the second is not, the answer should be B (i.e., Disagree).

A small number of questions will provide custom options to choose from.

In the example below, the tag indicates that the question is about OOP.

Q25: The course project was done using the _____ paradigm.
[A] Procedural   [B] Functional    [C] OOP

Answer: C

You will be given OCR forms (i.e., bubble sheets) to indicate your answers for Part 1.

You have slightly more than 1 minute for each question, which means you need to go through the questions fairly quickly. You might not have a lot of time left to refer notes frequently during this part of the exam (i.e., you need to be fairly familiar with the content, needing to refer to notes only occasionally).
That said, based on our past observations, almost all students are able to finish this part of the exam withing the given time fairly comfortably.

Mark the OCR form as you go, rather than planning to transfer your answers to the OCR form near the end. Reason: Given there are 100 questions, it will be hard to estimate how much time you need to mass-transfer all answers to OCR forms.

Write the answer in the exam paper as well when marking it in the OCR form. Reason: It will reduce the chance of missing a question. Furthermore, in case you missed a question, it will help you correct the OCR form quickly.

We have tried to avoid deliberately misleading/tricky questions. If a question seems to take a very long time to figure out, you are probably over-thinking it.

Invigilators will not answer queries about the questions in the exam paper part 1 (but will answer queries related to exam administration). Reason: Given the fast pace required by this part of the exam, it may be difficult to reach exam takers quickly enough, or to ensure all students receive the same level of access to the invigilator during the exam.

  • If you have a doubt/query about a question, or would like to make an assumption about a question, or would like to report a potential error in the exam paper, write down your doubt/query/assumption in the space provided for it at the end of the exam paper.
  • Those doubts/queries/assumptions (if justified) will be taken into account when grading.

Final Exam: Part 2 (Essay)

  • Some examples of the nature of questions you can expect:
    • Draw UML diagrams to match the given code/description
    • Specify requirements for a given project using various formats covered in the course
    • Review a given piece of Java code to identify areas to improve (e.g., detect coding standard violations)
  • Yes, you may use pencils when answering part 2.
  • If you have any queries during this part of the exam, you may ask the invigilator for clarifications.