1
Software Design Document
College Companion
Team Members
Aditya Nain U101115FCS041
Pranit Pawar U101115FCS225
Sarthak Kohli U101115FCS___
Abhit Gahlot U101115FCS040
Akash Dalal U101115FCS043
The Software Design Specification (SDS) sections provide you with
guidelines related to the structure and the contents of SDS document. The
Software Design Specification document includes at least these sections.
You will note that there is some overlap in the content between different
documents (i.e. the User Requirements Specification Document and the
Software Design Specification Document.) This redundancy allows each
document to stand on its own.
2
Software Design Specification Outline
1. Introduction
1.1. Purpose of this document
The purpose of this document is to describe the implementation of the application
“College Companion”. It will also provide an overview of the user interface and
user experience.
1.2 Scope of the development project
College Companion (CC) provides an all in one platform for the students. Its
purpose is to make the life of students easier by providing a variety of
services like chat engine, notes database, timetables, voting channels,
upcoming events etc. in a single application.
1.3 Definitions, acronyms, and abbreviations
Definitions, acronyms, and abbreviations Description
API Application Package Interface
CC College Companion
GUI Graphics User Interface
Material Design Material Design is a comprehensive guide
for visual, motion, and interaction design
across platforms and devices.
Flow Diagram A diagram of the sequence of movements
or actions of people or things involved in a
complex system or activity.
Firebase Firebase is Google's mobile platform that
helps you quickly develop high-quality
apps and grow your business
3
1.4 References
https://firebase.google.com/ for backend
https://www.draw.io/ for designing flow diagrams
https://way2java.com/networking for developing chat engine
1.5 Overview of the document
The Software Design Document is divided into 7 sections with various
subsections. The sections of the Software Design Document are:
1. Introduction
2. System Architecture description
3. User Interface
4. Logical Architecture
5. Design Decisions and Trade Off
6. Pseudocode
7. Appendices
2. System Architecture description
2.1 Overview of modules/components
Our system is designed with extensibility and scalability in mind. We are taking
great care in designing a framework which can be updated easily. Many of the
anticipated changes to our system in future phases will only require adding new
types of data and changing the user presentation code to make use of these new
data.
2.2 Structure and relationships
● Database Engine
○ Existing open source software: Google Firebase
○ Hosts the backend database which is used for main data
storage.
4
● Class Library
○ Provides a uniform interface on either sides of the network
connection.
○ Most updates and changes will require only updating the
library.
○ Updates to the package must be backwards compatible.
○ Client applications can use these objects to show data,
separating it completely from the server-side .
● Server Procedure Proxy
○ Java class which provides local methods for invoking remote methods on
the server application.
○ Will be contained within the client-side class library.
○ Takes care of serializing the objects passed to and from the
user application so they can be sent over the network.
○ Simplifies client/server communication for the user.
● Server Application
○ Implemented in Java
○ Provides methods and procedures that can be invoked remotely by
a client application via the server procedure proxy.
■ Retrieve project data.
■ Update project data.
○ Central process which can make all decisions that arise due to the
distributed nature of this application.
■ For instance, when a client wishes to update a project, there may be
conflicts that need to be resolved if another client has updated the
same project.
■ The server can coordinate conflict resolution with the client app .
○ Uses the class library package defined above
● Client Applications
○ Implemented in Java.
○ Contains all presentation logic.
○ Interacts only with the user.
○ Uses the class library package described above.
○ Connects with the server application through the server
procedure proxy class contained in the class library.
5
3. UI Flow Diagram
6
4. Logical Architecture ( class diagram, state diagram,
sequence diagram)
4.1 Sequence Diagrams
4.1.1 Authenticating User
7
4.1.2 Uploading Files
4.1.3 Sending a message
8
4.1.4 Creating an event
9
5. Design decisions and tradeoffs
Design tradeoffs in the software are limited not to the code or the architecture of the
code but also to the physical architecture where the application reside.
Firstly, the methodology used is Iteration methodology. The reason to use this and not
other methodology is that it gave us more freedom to work on the code and the test it as
we had many modules. Iteration method is useful as we can make the software module
by module and work on specific module at one time. This gave us time to test each
module very thoroughly before moving on to the other module. This also helped us in
making the modules work together as we could find the error during integration easily.
Secondly, the place where the software actually reside. We are using Firebase platform
to host the software and all the services over there works on it. This was a useful design
decision as the software would have been in a always on state as long as the Firebase
Service was up. This was much better than hosting the service as uptime would have
been in the availability of the server which could have been off due to many of the
reasons such as, no power, human error etc.
Thirdly, tradeoffs made during the development processes in software were made to
increase performance and increase efficiency where-ever possible. Examples of
tradeoffs in the project are the framework used for development.
Since we will be using Firebase authenticating users can easily login without worrying
about security and it also helps us in saving time.
Firebase gives actionable insights and comprehensive analytics whenever your app
crashes or stops working , so we can debug our code easily.
6. Pseudo code for components
6.1 Pseudo Code for user authentication
import java.util.Scanner;
public class LoginMain {
public static void main(String[] args) {
10
String Username;
String Password;
Password = "123";
Username = "wisdom";
Scanner input1 = new Scanner(System.in);
System.out.println("Enter Username : ");
String username = input1.next();
Scanner input2 = new Scanner(System.in);
System.out.println("Enter Password : ");
String password = input2.next();
if (username.equals(Username) && password.equals(Password)) {
System.out.println("Access Granted! Welcome!");
}
else if (username.equals(Username)) {
System.out.println("Invalid Password!");
} else if (password.equals(Password)) {
System.out.println("Invalid Username!");
} else {
System.out.println("Invalid Username & Password!");
}
6.2 Pseudo code for sending a message
Client side
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String[] args) throws Exception
{
Socket sock = new Socket("127.0.0.1", 3000);
// reading from keyboard (keyRead object)
BufferedReader keyRead = new BufferedReader(new
InputStreamReader(System.in));
// sending to client (pwrite object)
OutputStream ostream = sock.getOutputStream();
PrintWriter pwrite = new PrintWriter(ostream, true);
11
// receiving from server ( receiveRead
object)
InputStream istream = sock.getInputStream();
BufferedReader receiveRead = new BufferedReader(new
InputStreamReader(istream));
System.out.println("Start the chitchat, type and press Enter key");
String receiveMessage, sendMessage;
while(true)
{
sendMessage = keyRead.readLine(); // keyboard reading
pwrite.println(sendMessage); // sending to server
pwrite.flush(); // flush the data
if((receiveMessage = receiveRead.readLine()) != null) //receive
from server
{
System.out.println(receiveMessage); // displaying at DOS
prompt
}
}
}
}
Server side
import java.io.*;
import java.net.*;
public class Server
{
public static void main(String[] args) throws Exception
{
ServerSocket sersock = new ServerSocket(3000);
System.out.println("Server ready for chatting");
Socket sock = sersock.accept( );
// reading from keyboard (keyRead object)
BufferedReader keyRead = new BufferedReader(new
InputStreamReader(System.in));
// sending to client (pwrite object)
OutputStream ostream = sock.getOutputStream();
PrintWriter pwrite = new PrintWriter(ostream, true);
// receiving from server ( receiveRead
object)
InputStream istream = sock.getInputStream();
12
BufferedReader receiveRead = new BufferedReader(new
InputStreamReader(istream));
String receiveMessage, sendMessage;
while(true)
{
if((receiveMessage = receiveRead.readLine()) != null)
{
System.out.println(receiveMessage);
}
sendMessage = keyRead.readLine();
pwrite.println(sendMessage);
pwrite.flush();
}
}
}
7. Appendices
User Interface screen designs
Splash Screen Home Screen
13
Profile Login Screen
Edit Profile And Info
Notes00000000000000000000000
14
Events Page Event Description
15
Chat Screen Recent Chats
Schedule
16