Applications Open now for Sep 2022 Batch | Applications Close: Aug 19, 2022 | Exam: Oct 9, 2022

Applications Open now for Sep 2022 Batch | Applications Close: Aug 19, 2022 | Exam: Oct 9, 2022

Degree Level Course

Software Engineering

The course will focus on fundamental concepts in developing software, and essential practices employed by software developers, such as requirement gathering, creating software conceptual designs, software comprehension, debugging, testing and verification. The main goal of this course is to prepare students to develop the essential skills required to become effective software engineers.

by Dr. Sridhar Iyer , Dr. Prajish Prasad

Course ID: BSCCS3001

Course Credits: 4

Course Type: Core Option II

Pre-requisites: None

What you’ll learn

Plan the design and development of a software project i.e. engage in the software engineering process (e.g. different phases in software development - requirements, analysis, design, development, testing)
Apply essential practices and strategies in a software project (e.g. modelling, code comprehension, testing, debugging etc.)
Use appropriate tools in each phase of software development (e.g. Github, IDEs, testing tools etc.)

Course structure & Assessments

12 weeks of coursework, weekly online assignments, 2 in-person invigilated quizzes, 1 in-person invigilated end term exam. For details of standard course structure and assessments, visit Academics page.

WEEK 1 Deconstructing the software development process: In this week, we will introduce the stages of software development through an exercise of deconstructing a large and complex software system (e.g. the Amazon shopping site). The main objective is to help learners think of software in terms of sub-systems, and what issues have to be considered in order to develop these sub-systems (e.g.: software architecture, security, testing, usability etc.). Discussions in this week will motivate and provide pointers to parts of the software development process, which we will discuss in subsequent weeks.
WEEK 2 Software Requirements: In this week, learners will be able to identify different types of requirements (functional, non-functional), and will go through tools and strategies which will help them capture requirements for a given problem (e.g. using user-stories, use-cases, SRS etc)
WEEK 3 Software Conceptual Design: In this week, learners will learn how to create the software conceptual design from requirements. They will be introduced to the Function-Behaviour-Structure (FBS) framework, a popular framework which helps learners think about software design in terms of its functions, structures and behaviors. There will be hands-on activities in a learning environment, think&link. This will help learners map software design solution parts to the FBS framework, and come up with comprehensive and cohesive software designs.
WEEK 4 Software Usability: In this week, learners will learn the necessity and importance of considering the usability of their designs. We will discuss various usability characteristics such as - Learnability, Efficiency, Satisfaction and Memorability, which have to be kept in mind while creating software.
WEEK 5 Software Design - Modelling and Architecture: In this week, learners will learn how to detail their initial conceptual designs using Unified Modeling Language (UML) diagrams. We will discuss the philosophy and importance of modeling, and describe commonly used UML diagrams such as class and sequence diagrams. We will also describe essential design patterns such as client-server, MVC, P2P etc.
WEEK 6 Software Design - Quality and Evaluation: In this week, learners learn about how to evaluate their software designs. There will be hands-on activities in a learning environment, VeriSIM. We also discuss important functional and non-functional quality attributes (such as correctness, reliability, security etc.) which have to be kept in mind while designing software systems.
WEEK 7 Software Development - Program Comprehension: In this week, learners learn how to start working with source code. They will be introduced to popular IDEs, and will work on understanding an unfamiliar codebase (e.g. an open-source project like Mozilla). They will also learn about different program comprehension strategies which experienced software developers use as they navigate through code in large projects.
WEEK 8 Software Development - Program Debugging: In this week, learners will be introduced to popular debugging tools, and strategies used by developers while debugging large programs. They will work on debugging certain errors in an unfamiliar codebase (e.g. an open-source project like Mozilla) which will help them apply the concepts learnt during this week.
WEEK 9 Software - Code Reviewing and Documentation: In this week, learners will be introduced to version control systems such as Github. They will create a repository on Github and learn how to review other students’ code. They will also be introduced to good documentation practices.
WEEK 10 Software Testing: In this week, learners will learn about various testing techniques, such as Unit Testing, Integration Testing, and System Testing. They will also explore various testing tools and use these tools to test existing software code.
WEEK 11 Software Deployment and Monitoring: In this week, learners will understand how to deploy a software project on the cloud (e.g. using Heroku). They will also learn to observe and track the operations and activities of users, applications and network services after deployment, and learn how to identify and resolve issues after deployment.
WEEK 12 Conclusion and other Aspects: Communication, Productivity and Organizations: In the final week, we will talk about other aspects of working in a software company, such as communication between teams, and factors affecting productivity of software developers. We also intend to conduct discussions with professionals from the industry, to provide learners with different perspectives of the software development process.
+ Show all weeks

Prescribed Books

The following are the suggested books for the course:

Software Engineering: A Precise Approach – Dr. Pankaj Jalote

Cooperative Software Development – Dr. Amy Ko

Engineering Software as a Service: An Agile Approach Using Cloud Computing – Armando Fox, David Patterson

About the Instructors

Dr. Sridhar Iyer
Professor, Department of Computer Science and Engineering & Inter-disciplinary Program in Educational Technology, IIT Bombay

Sridhar Iyer is a Professor in the Department of Computer Science & Engg, and the Head of the Interdisciplinary Programme on Educational Technology, at IIT Bombay. He is also the Head of the Centre for Distance Engineering Education and the Principal Investigator of the National Programme on Technology Enhanced Learning at IIT Bombay.

...  more

His current research interests are in the field of Educational Technology. This includes: Technology enhanced learning environments for thinking skills, Pedagogies for effective use of educational technologies, Development of ICT tools for educational applications, and Computer Science education research.

Some development projects that that he has conceptualized and led are: Project OSCAR, a repository of ~450 Interactive Visualizations for topics at the school and higher education levels, and Computer Masti, a series of books for teaching-learning of Computers in schools. These products have seen more than 100K downloads from 120 countries. In 2016, Computer Masti was acquired by a company and the books are now being used in ~1000 schools in India.

Prior to Educational Technology, he has worked in wireless networking protocols and mobile applications. Sridhar Iyer received his BTech, MTech and PhD from the Dept of Computer Science & Engg at IIT Bombay.


Dr. Prajish Prasad
Assistant Professor, Computer Science, FLAME University

Prajish Prasad is an Assistant Professor in the Department of Computing and Data Sciences at FLAME University, Pune.. He completed his PhD from the Interdisciplinary Programme in Educational Technology at IIT Bombay. His bachelor and master degrees are in Computer Science. He is a computing education researcher, and specializes in designing technology-enhanced learning environments for topics in computer science. Prior to joining his PhD, he worked as a software developer in an EdTech startup, and as an engineering instructor, teaching courses for computer science undergraduates.