Missing Persons is a section of Law Enforcement that handles cases involving people who have gone missing for a variety of reasons including drug use, runaways, human trafficking, etc. The process of finding missing people is extremely taxing for Law Enforcement because it is usually like trying to find a needle in a haystack. Law Enforcement resources dedicated to handling missing persons cases are often limited and it can be a time consuming process for Law Enforcement to gather and analyze all the information related to a missing person. The information provided by their family, friends, phones, and social media accounts can be very helpful to Law Enforcement if organized in a meaningful way. The concerned public could also be an untapped resource in helping law enforcement find missing persons. Unfortunately, there is no existing method that would allow the public to contribute in the search for missing persons in a quick, easy and convenient manner.
People of all social and economical backgrounds and characteristics will be able to fully utilize the MIMS software to find their missing friends and loved ones. MIMS will also change the beliefs and attitudes towards the process on how to recover a missing person, allowing for the concerned personnel to feel more comfortable that their missing are in good hands.
The business objectives of the MIMS application are to provide a platform that can contribute to the ongoing process of reporting and locating missing people. The purpose is to provide a platform that can allow law enforcement and the concerned public to interact and engage in the process of tracking down people who were reported as missing. The application needs to also provide law enforcement with a way to easily manage and analyze data at a quick glance through the use of tables and charts.
The current process of locating missing people does not involve the active use of the knowledge of the concerned public in a useful way. Law enforcement is often tasked with finding missing people with limited resources and without an easy way to use the concerned public's knowledge about where a missing person might be or have been. With the use of MIMS, law enforcement and the concerned public can have a platform to view missing people, provide comments about different cases, and interact more proactively when trying to locate missing people. The platform will also aim to provide the friends and family of to feel more involved in the process and more comforted in their time of trouble.
The data that is collected and analyzed in a missing person's case is extremely sensitive and needs to be restricted to only certain users. The personal information about a missing person that is provided by their family, friends, phone, and social media accounts is private and should only be accessible by Law Enforcement. The balance between sharing enough information to the public to be helpful and maintaining the privacy of the missing person is vital to the integrity of the application. The data must be stored in a secure way and controlled via role management.
Some of the ethical concerns that are related to the application are that people who have access to the sensitive data might use it for personal gain or inappropriate reasons. Also, some issues of how ethical social media mining and analysis might be can come up. This concern can be mitigated by ensuring that all users of the application consent to the use of social media mining for any person they report missing. Users of social media also already agree to have their data publicized to a certain extent on platforms such as Facebook and Twitter.
For project management our team used Microsoft Project 2013, Slack, Google Drive, and GitHub.
For Front End Development our team used Bootstrap, HTML, CSS, and JavaScript.
For Back End Development our team used the CakePHP Framework.
The MIMS server is a Debian 9 (codename "stretch") 64-bit server hosted by Linode. It has the following software installed to support the MIMS system:
See media/MIMS_Project_Plan_FINAL_Gantt.pdf for the Gantt chart PDF file.
See media/MIMS_Project_Plan_FINAL_Tasks.pdf for the task breakdown PDF file.
We are using CakePHP version 3.x, which is significantly different from the 2.x version of CakePHP. As such, please make sure when browsing online help that you are looking at help for CakePHP version 3.x.
The Model
directory contains three subdirectories which make up the
model.
Table
Entity
Behavior
Model files use the .php
extension.
Table objects provide access to the collection of entities stored in a specific table. This is similar to the standard Model in MVC.
The table file name is the plural controller name followed by "Table"
(e.g. UsersTable.php
).
Entities represent individual rows or domain objects in the app.
The entity file name is the singular controller name
(e.g. User.php
).
Behaviors are used for packaging behaviors that are common across many models.
The template (view) files use the .ctp
file extension.
The view files go in "Template/PLURAL CONTROLLER NAME"
(e.g. Template/Users
).
Views must have a function in the controller in order to be rendered.
The controllers use the .php
file extension.
The AppController.php
file comes with the install of CakePHP.
The Controller is plural (e.g. UsersController.php
).
git clone <repo name> [destination]
For example:
git clone https://github.com/csi4999-mims/documentation.git
(The [destination]
is optional.)
git pull
git status
git add -A
OR
git add
git commit -m "my commit message"
git push
https://holt59.github.io/cakephp3-bootstrap-helpers/
To install the Bootstrap Helper for CakePHP you need to run the following commands or add the following code:
composer require holt59/cakephp3-bootstrap-helpers:dev-master
Add this line to config/bootstrap.php
:
Plugin::load('Bootstrap');
Add these lines to AppController.php
:
public $helpers = [
'Form' => [
'className' => 'Bootstrap.Form'
],
'Html' => [
'className' => 'Bootstrap.Html'
],
'Modal' => [
'className' => 'Bootstrap.Modal'
],
'Navbar' => [
'className' => 'Bootstrap.Navbar'
],
'Paginator' => [
'className' => 'Bootstrap.Paginator'
],
'Panel' => [
'className' => 'Bootstrap.Panel'
]
];
Add these lines to Layout/default.ctp
:
echo $this->Html->css('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css');
echo $this->Html->script([
'https://code.jquery.com/jquery-1.12.4.min.js',
'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'
]);
A modal is a window that can dynamically pop up when you specify it to. For example when someone presses a button on the screen a modal can pop up.
https://holt59.github.io/cakephp3-bootstrap-helpers/modal-helper/basics/
<?php
// Start a modal with a title, default value for 'close' is true
echo $this->Modal->create("My Modal Form", ['id' => 'MyModal1',
'close' => false]) ;
?>
<p>Here I write the body of my modal !</p>
<?php
// Close the modal, output a footer with a 'close' button
echo $this->Modal->end() ;
// It is possible to specify custom buttons:
echo $this->Modal->end([
$this->Form->button('Submit', ['bootstrap-type' => 'primary']),
$this->Form->button('Close', ['data-dismiss' => 'modal'])
]);
?>
<!-- Example Button trigger modal -->
<button type="button" class="btn btn-primary example-button"
data-toggle="modal" data-target="#exampleModal">
comment
</button>
<!-- Example Modal -->
<div id="MyModal1" tabindex="-1" role="dialog" aria-hidden="true"
aria-labbeledby="MyModal1Label" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header ">
<!-- With 'close' => true, or without specifying:
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button> -->
<h4 class="modal-title" id="MyModal1Label">Example 1 -
Simple header & footer, custom body</h4>
</div>
<div class="modal-body ">
<p>Here I write the body of my modal !</p>
</div>
<div class="modal-footer ">
<button class="btn btn-primary btn-primary" type="submit">
Submit</button>
<button data-dismiss="modal" class="btn btn-default"
type="submit">Close</button>
</div>
</div>
</div>
</div>
https://github.com/marcferna/CakePHP-GoogleMapHelper/tree/CakePHP3
GoogleMapsHelper.php
) into the following
location: src/View/Helper/
public $helpers = array('GoogleMap');
$this->Html->script('http://maps.google.com/maps/api/js?key=YOUR_API_KEY&sensor=true',
[false]);
$this->GoogleMap->map();
// Override any of the following default options to customize your map
$map_options = array(
'id' => 'map_canvas',
'width' => '600px',
'height' => '600px',
'style' => '',
'zoom' => 10,
'type' => 'ROADMAP',
'custom' => null,
'localize' => true,
'latitude' => 42.6666979,
'longitude' => -83.399939,
'marker' => true,
'markerTitle' => 'This is my position',
'markerIcon' => 'http://google-maps-icons.googlecode.com/files/home.png',
'markerShadow' => 'http://google-maps-icons.googlecode.com/files/shadow.png',
'infoWindow' => true,
'windowText' => 'My Position',
'draggableMarker' => false
);
$this->GoogleMap->map($map_options);
foreach ($reports as $report) {
$this->GoogleMap->addMarker("map_canvas", 1, $report->get('FamilyStreet'));
}
https://www.tutorialspoint.com/android/android_php_mysql.htm
A SQL database can be connected to by the android app utilizing the JDBC package, and will use MySQL to query the database. Having the android device/application access the database directly is not recommended, Android applications can be decompiled, giving a client the credentials to access the database, which is a security risk. Having the client open a physical database connection will take a considerable amount of time, especially if the user is located far from the server.
https://developer.android.com/reference/java/security/Provider.Service.html
In order to solve the problems with this method, it will be necessary to have a Service Provider Application, which will create and distribute the web services to the client. With this method authentication and authorization can be controlled better.
https://developer.android.com/training/articles/security-ssl.html
Currently in our project we are using Putty to create an SSH tunnel with MySQL workbench to access the database. Ideally in the Secure Sockets Layer (SSL), we will want to make use of key rotation to strengthen the security involved with public and private key exchanges.
https://github.com/futurice/android-best-practices#webviews
Now that the mobile application will require connectivity to the website, the app must utilize webViews in order to pull information from the site, and database. The pitfall to be aware of with this approach is not to handle the html processing client-side, which can result in the webViews leaking memory. The implementation for these functions are best handled with the back-end html, or making better use of the platform’s widgets.
https://github.com/futurice/android-best-practices#use-continuous-integration-1
Considering the web application side is still under construction, and will likely have updates as time goes on, the mobile application must be able to reflect those changes, and ensure it is running the same framework. Continuous integration of the mobile application can provide a variety of useful functions, such as running static code, providing code analysis tools, and handling the generation and distribution of APK files.
https://github.com/futurice/android-best-practices#proguard-configuration
Lastly, we might consider implementing utilities such as ProGuard or DexGuard, for the purpose of obfuscating our code, and shrinking the overall package size. The main purpose of this would to be to better optimize the application for use on a mobile device.
The database for MIMS is managed using the Phinx library. This library is integrated into CakePHP, and allows maintainers to express the database schema using only PHP files, which can be tracked under version control. These PHP files, called Migrations, are organized in chronological order, and function as a delta from one state to the next.
All the migration files are stored in config/Migrations
. They have
a file naming convention of YYYYMMDDHHMMSS_MyNewMigration.php
, where
YYYYMMDDHHMMSS
is the creation timestamp down to the second, and
MyNewMigration
is the name of the migration. Because of this naming
convention, all the database migrations are run in serial from least
recent to most recent.
Run the following command from the root of the project to check on the current migration status:
bin/cake migrations status
This should display a list of migrations found in config/Migrations
with a status of up
or down
. One can move forward in time
(changing a migration's status to up
) or backward in time (changing
a migration's status to down
) by either migrating or rolling back.
To migrate the database to the most up-to-date schema, run the following command from the root of the project:
bin/cake migrations migrate
This will run all the migration files from the state of the most
recent file with an up
status, and move down the list, migrating
each one until the schema is current.
To roll back the changes made by these migration files, use the following command:
bin/cake migrations rollback
This will revert the most recently-applied migration. To continue reverting the changes, run the command again until you have reached the desired state of the database.
You can specify which version or migration file you wish to migrate to
or roll back to with the following command, substituting
YYYYMMDDHHMMSS
with the timestamp of the migration file of your
choosing:
bin/cake migrations migrate -t YYYYMMDDHHMMSS
use App\Controller\ReportsController;
$user =$this->Users->get($this->Auth->user('id'));
$this->set('user',$user);
use App\Controller\ReportsController;
$this->loadModel('Reports');
$report = $this->Reports->get('all');
$this->set('report',$report);
For details on setting up a local development environment, please see media/local-development-environment.pdf.
Requirement # | Description |
---|---|
REQ 1 | The Concerned Public & Law Enforcement should be able to create an account |
REQ 2 | The Concerned Public & Law Enforcement should be able to login with their created account |
REQ 3 | The Concerned Public & Law Enforcement should be able to update their account information |
REQ 4 | The Concerned Public & Law Enforcement should be able to recover their account if they forget their password |
REQ 5 | The application should require Concerned Public & Law Enforcement to verify their email address during account creation |
REQ 7 | The application should control access to content based on user type--Concerned Public & Law Enforcement |
REQ 8 | The application should have an interface for the Concerned Public |
REQ 9 | The application should have an interface for Law Enforcement |
REQ 11 | The Concerned Public should be able to submit a new missing person report |
REQ 12 | The application should allow the Concerned Public to enter the following information--Name of Parents, Parents Contact Info(email, phone, address), Victim's Name, Height, Weight, Color of Hair & Eyes, Additional Marks/Tattoos, Victim's DOB, Victim's Phone Number, Phone Contacts, Social Media Accounts, and a photo |
REQ 13 | When the Concerned Public submits a report it will be classified as "on hold" until a report number is associated with it by Law Enforcement |
REQ 14 | The application should notify the Concerned Public to go to their local police station to complete the report process |
REQ 15 | The submitted report information should be sent to Law Enforcement |
REQ 16 | The report information must be validated by Law Enforcement |
REQ 17 | Each report must have a valid police report number to appear in the application |
REQ 18 | Reports approved by Law Enforcement will be added to the application and be displayed to the Concerned Public |
REQ 19 | Law Enforcement should be able to categorize the type of missing person--drug user, Romeo & Juliet, human trafficking, etc. |
REQ 20 | The Concerned Public Interface should display missing person's image, name, DOB, description, last location |
REQ 21 | The Law Enforcement Interface should display all information contained in the report |
REQ 22 | The Concerned Public should be able to browse current missing and found people |
REQ 24 | Law Enforcement should be able to update info in the reports |
REQ 25 | The application should display any updates made by Law Enforcement |
REQ 26 | Law Enforcement should be able to mark people as found |
REQ 27 | "Found" people will remain in the application to notify the Concerned Public that they are no longer missing |
REQ 28 | The database should cycle out reports that are on "hold" every 24 hours |
Requirement # | Description |
---|---|
REQ 6 | The application should allow only one account to be associated to one email. |
REQ 10 | The application should have a website and mobile application interface. |
REQ 23 | Data for Law Enforcement should be displayed in an easy to read format. |
REQ 29 | Data for Public should be displayed in an easy to read format. |
REQ 30 | The website for the application should always be available to the public. |
REQ 31 | The Google Map API should show all data within 5 seconds of being loaded. |
REQ 32 | The application should access the database within a hundredth of a second. |
REQ 33 | Reports should be "approved" instantaneously when clicked. |
REQ 34 | Reports should be "marked as found" instantaneously when clicked. |
REQ 35 | Reports should be created instantaneously on submit. |
The following are the on screen appearance requirements for various pages:
The register page should have fields for people to enter basic information and create an account.
# | User Stories | Requirements Covered |
---|---|---|
1 | As the Concerned Citizen or Law Enforcement I want to be able to create an account | REQ 1 |
2 | As the Concerned Citizen or Law Enforcement I want to be able to login with my account | REQ 2 |
3 | As the Concerned Citizen or Law Enforcement I want to be able to update my account information | REQ 3 |
4 | As the Concerned Citizen or Law Enforcement I want to be able to gain access to my account if I get locked out | REQ 4 |
5 | As an Application Administrator I want to be able to restrict user access via role management | REQ 7 |
6 | As an Application Administrator I want the application to verify a user\'s email address | REQ 5 |
7 | As an Application Administrator I want only one email to be associated with one user account | REQ 6 |
8 | As the Concerned Citizen I want an interface specific to my user type | REQ 8 |
9 | As Law Enforcement I want an interface specific to my user type | REQ 9 |
10 | As an Application Administrator I want to have a website and mobile application version of the system | REQ 10 |
11 | As the Concerned Citizen I want to be able to submit a new missing person report | REQ 11 |
12 | As the Concerned Citizen when I submit a new report I want to be able to enter the Name of Parents, Parents Contact Info(email, phone, address), Victim's Name, Height, Weight, Color of Hair & Eyes, Additional Marks/Tattoos, Victim's DOB, Victim's Phone Number, Phone Contacts, and Social Media Accounts as they pertain to the missing person | REQ 12 |
13 | As Law Enforcement I want all new reports submitted by the Concerned Citizen to be classified as \"on hold\" until an official report number is associated with it | REQ 13 |
14 | As the Concerned Citizen I want the application to notify me to go to my local police station to complete the report process if not already done | REQ 14 |
15 | As an Application Administrator I want all information submitted by the Concerned Citizen to be sent to Law Enforcement | REQ 15 |
16 | As Law Enforcement I want to be able to validate report information before it appears on the application | REQ 16 |
17 | As Law Enforcement I want each missing person report that appears in the application to have an official report number associated with it | REQ 17 |
18 | As an Application Administrator I want all reports approved by Law Enforcement to be displayed to the Concerned Citizen | REQ 18 |
19 | As Law Enforcement I want to be able to categorize the type of missing person | REQ 19 |
20 | As the Concerned Citizen I want to be able to see the missing person\'s image, name, DOB, description, last known location when I use the application | REQ 20 |
21 | As Law Enforcement I want to be able to see all information about the missing person that is contained in the official report | REQ 21 |
22 | As the Concerned Citizen I want to be able to browse all current missing and found people | REQ 22 |
23 | As Law Enforcement I want the data about each missing person to be displayed in an easy to read format | REQ 23 |
24 | As Law Enforcement I want to be able to update the information in the reports | REQ 24 |
25 | As the Concerned Citizen I want to see any updates made by Law Enforcement in the application | REQ 25 |
26 | As Law Enforcement I want to be able to mark missing people as found | REQ 26 |
27 | As Law Enforcement I want \"found\" people to remain in the application to notify the Concerned Citizen they are no longer missing | REQ 27 |
28 | As an Application Administrator I want the application to cycle out reports that are \"on hold\" after they have been in the system for 24 hours | REQ 28 |
29 | As Law Enforcement I want to use missing people\'s social media accounts to track where they might be or be going | REQ 29 |
Related Requirements: | REQ 1 |
Initiating Actor: | Concerned Citizen |
Actor's Goals: | To create a Concerned Citizen account in order to use the application |
Participating Actors: | Database, Concerned Citizen, Email Service |
Preconditions: | The application is opened and the Concerned Citizen has chosen to create and account |
Postconditions: | The account is created and the Concerned Citizen can now login to the application |
Direction | Number | Description |
---|---|---|
→ | 1. | Concerned Citizen opens the application and presses the "sign up" button |
← | 2. | The application redirects the Concerned Citizen to the registration page |
← | 3. | The Concerned Citizen is prompted to enter their first name, last name, email, password, and confirm password in textboxes |
→ | 4. | The Concerned Citizen enters their first name, last name, email, password, and confirm password in the corresponding textboxes |
← | 5. | The information entered is verified |
← | 6. | The Concerned Citizens account is added to the Database |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen open the application and presses the "sign up" button |
← | 2. | The application redirects the Concerned Citizen to the registration page |
← | 3. | The Concerned Citizen is prompted to enter their first name, last name, email, password, and confirm password in textboxes |
→ | 4. | The Concerned Citizen enters their first name, last name, email, password, and confirm password in the corresponding textboxes |
← | 5. | The application notifies the Concerned Citizen information already exists |
← | 6. | The Concerned Citizen is directed to the reset password page |
Responsibility Description | Type | Concept Name |
---|---|---|
Access User Storage | D | Controller |
Container of All Users | K | UserStorage |
Email Service | D | EmailController |
Related Requirements: | REQ 2 |
Initiating Actor: | Concerned Citizen |
Actor's Goals: | To login to their existing account to use the application |
Participating Actors: | Database, Concerned Citizen |
Preconditions: | Concerned Citizen has opened the app, has an account created, and is on the login screen |
Postconditions: | The Concerned Citizen is logged in and is on the landing page |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen opens the application and is on the login screen |
← | 2. | The Concerned Citizen is prompted to enter their username and password in textboxes |
→ | 3. | The Concerned Citizen enters their username and password in the corresponding textboxes |
← | 4. | The entered information is validated based on the information in the Database |
← | 5. | The Database returns confirmation of the login information |
← | 6. | The application displays the landing page |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen opens the application and is on the login screen |
← | 2. | The Concerned Citizen is prompted to enter their username and password in textboxes |
→ | 3. | The Concerned Citizen enters their username and password in the corresponding textboxes |
← | 4. | The entered information is validated based on the information in the Database |
← | 5. | The Database returns the login information as invalid |
Responsibility Description | Type | Concept Name |
---|---|---|
Access User Storage | D | Controller |
Container of All Users | K | UserStorage |
Related Requirements: | REQ 3 |
Initiating Actor: | Concerned Citizen |
Actor's Goals: | To update their existing account information |
Participating Actors: | Database, Concerned Citizen, Email Service |
Preconditions: | The Concerned Citizen has an account created, they are signed in, they are on the update account info page |
Postconditions: | The Concerned Citizen's account information is updated |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen enters their updated name and email in the appropriate textboxes |
← | 1.b | If the Concerned Citizen updates their email a confirmation email is sent again similar to at initial account creation |
← | 2. | The Database updates the entered information |
← | 3. | The application returns a success message to the Concerned Citizen |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen enters their updated name and email in the appropriate textboxes |
← | 2. | The form checks the input |
← | 3. | The form returns an error saying the input is not valid |
← | 4. | The Database does not update the account information |
Responsibility Description | Type | Concept Name |
---|---|---|
Access User Storage | D | Controller |
Container of All Users | K | UserStorage |
Email Service | D | Email Controller |
Related Requirements: | REQ 4 |
Initiating Actor: | Concerned Citizen |
Actor's Goals: | To change their password to regain access to their account |
Participating Actors: | Database, Concerned Citizen, Email Service |
Preconditions: | The Concerned Citizen has an account, they forgot their password, they are on the forgot password page |
Postconditions: | The Concerned Citizen regains access to their account with a new password |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen enters their email in the appropriate textbox |
→ | 2. | The Concerned Citizen clicks the Reset Password button |
← | 3. | The application sends an email to the entered address |
→ | 4. | The Concerned Citizen clicks on the reset link in the email |
← | 5. | The application redirects the Concerned Citizen to the reset password page |
→ | 6. | The Concerned Citizen enters their new password in the first textbox and confirms it in the second |
← | 7. | The Database updates the Concerned Citizen's password |
← | 8. | The application displays a success message to the Concerned Citizen |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen enters their email in the appropriate textbox |
→ | 2. | The Concerned Citizen clicks the Reset Password button |
← | 3. | The application sends an email to the entered address |
→ | 4. | The Concerned Citizen clicks on the reset link in the email |
← | 5. | The application redirects the Concerned Citizen to the reset password page |
→ | 6. | The Concerned Citizen enters their new password in the first textbox and confirms it in the second |
← | 7. | The Database returns an error and does not update the password |
Responsibility Description | Type | Concept Name |
---|---|---|
Access User Storage | D | Controller |
Container of All Users | K | UserStorage |
Related Requirements: | REQ 4 |
Initiating Actor: | Concerned Citizen |
Actor's Goals: | To change their password in Edit Account page |
Participating Actors: | Database, Concerned Citizen, Email Service |
Preconditions: | The Concerned Citizen has an account and they want to change their password |
Postconditions: | The Concerned Citizen has a new updated account password |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen navigates to the Edit Account page |
→ | 2. | The Concerned Citizen enters their old password in the corresponding text field |
→ | 3. | The application sends an email to the entered address |
→ | 4. | The Concerned Citizen enters their new password again in the confirm password field |
← | 5. | The application verifies the passwords match |
← | 6. | The Database updates the Concerned Citizen’s password |
← | 7. | The application displays a success message to the Concerned Citizen |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen navigates to the Edit Account page |
→ | 2. | The Concerned Citizen enters their old password in the corresponding text field |
→ | 3. | The Concerned Citizen enters their new password in the corresponding text field |
→ | 4. | The Concerned Citizen enters their new password again in the confirm password field |
← | 5. | The application verifies the passwords match |
← | 6. | The application notifies the Concerned Citizen that the passwords do not match |
← | 7. | The application fails to update the Concerned Citizen’s password |
Responsibility Description | Type | Concept Name |
---|---|---|
Access User Storage | D | Controller |
Container of All Users | K | UserStorage |
Related Requirements: | REQ 5, REQ 6 |
Initiating Actor: | Email Service |
Actor's Goals: | To validate a Concerned Citizen's email |
Participating Actors: | Email Service, Concerned Citizen, Database |
Preconditions: | The Concerned Citizen is creating an account OR is updating their email address if they have a pre-existing account AND has entered their email in the appropriate textbox |
Postconditions: | The Concerned Citizens email is validated |
Direction | Number | Description |
---|---|---|
← | 1. | The Email Service sends an email to the entered address |
→ | 2. | The Concerned Citizen opens the email |
→ | 3. | The Concerned Citizen clicks the verify link in email |
← | 4. | The application successfully creates the account OR updates the email of an existing account AND allows the Concerned Citizen to login |
Direction | Number | Description |
---|---|---|
← | 1. | The Email Service sends an email to the entered address |
← | 2. | The email fails to send due to an invalid email |
→ | 3. | The Concerned Citizen cannot continue with successful account creation OR updating of their account |
Responsibility Description | Type | Concept Name |
---|---|---|
Access User Storage | D | Controller |
Container of All Users | K | UserStorage |
Email Service | D | EmailController |
Related Requirements: | REQ 8, REQ 20, REQ 22 |
Initiating Actor: | Concerned Citizen |
Actor's Goals: | To see an interface specific to their user type |
Preconditions: | The Concerned Citizen has an account created |
Postconditions: | The Concerned Citizen views a landing page specific to their user type |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen opens the application |
← | 2. | The application prompts the Concerned Citizen to login with their credentials |
→ | 3. | The Concerned Citizen enters their username(email) and password in the corresponding fields |
← | 4. | The database verifies the Concerned Citizen's credentials and identifies their user type based on the entered credentials |
← | 5. | The Concerned Citizen is directed to the landing (home) page |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen opens the application |
← | 2. | The application prompts the Concerned Citizen to login with their credentials |
→ | 3. | The Concerned Citizen enters their username(email) and password in the corresponding fields |
← | 4. | The database verifies the Concerned Citizen's credentials, but cannot verify their user type |
← | 5. | The application displays and error to the Concerned Citizen |
Responsibility Description | Type | Concept Name |
---|---|---|
Access User Storage | D | Controller |
Container of All Users | K | UserStorage |
Related Requirements: | REQ 9, REQ 21, REQ 23 |
Initiating Actor: | Law Enforcement |
Actor's Goals: | To see an interface specific to their user type |
Participating Actors: | Database |
Preconditions: | Law Enforcement has an account created |
Postconditions: | Law Enforcement views a landing page specific to their user type |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement opens the application |
← | 2. | The application prompts Law Enforcement to login with their credentials |
→ | 3. | Law Enforcement enters their username(emails) and password in the corresponding fields |
← | 4. | The database verifies Law Enforcement's credentials and identifies their user type based on the entered credentials |
← | 5. | Law Enforcement is directed to the landing (home) page |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement opens the application |
← | 2. | The application prompts Law Enforcement to login with their credentials |
→ | 3. | Law Enforcement enters their username(email) and password in the corresponding fields |
← | 4. | The database verifies Law Enforcement's credentials, but cannot identify their user type |
← | 5. | The application displays an error to Law Enforcement |
Responsibility Description | Type | Concept Name |
---|---|---|
Access User Storage | D | Controller |
Container of All Users | K | UserStorage |
Related Requirements: | REQ 11, REQ 12, REQ 13, REQ 14 |
Initiating Actor: | Concerned Citizen |
Actor's Goals: | To submit a new missing person report |
Participating Actors: | Database |
Preconditions: | The Concerned Citizen has an account, is logged in, and is on the Submit Report page |
Postconditions: | A new missing person report has been submitted and is "on hold" |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen fills in the following fields on the form about the missing person: Name (text), Name of Parents (text), Height (number), Weight (number), DOB (number), Color of Hair (text), Color of Eyes (text), Marks/Tattoos (text), Phone (text), Social Media Accounts (text), Photo (jpg, png, etc.), Family/Friends Contact Info (text), submitter relation to missing (text), Workplace (text), Hangouts (text), Last Seen Location (text) [fields marked with are required] |
→ | 2. | The Concerned Citizen submits the form |
← | 3. | The database saves all of the entered form data and assigns it a unique ID |
← | 4. | The database flags the submitted report as "on hold" |
← | 5. | The application notifies the Concerned Citizen to visit the nearest police station to complete the process |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen fills in the following fields on the form about the missing person: Name (text), Name of Parents (text), Height (number), Weight (number), DOB (number), Color of Hair (text), Color of Eyes (text), Marks/Tattoos (text), Phone (text), Social Media Accounts (text), Photo (jpg, png, etc.), Family/Friends Contact Info (text), submitter relation to missing (text), Workplace (text), Hangouts (text), Last Seen Location (text) [fields marked with are required] |
→ | 2. | The Concerned Citizen submits the form |
← | 3. | The form is not properly submitted because the Concerned Citizen missed filling in one of the Required(*) fields |
← | 4. | The application displays an error message to the Concerned Citizen to fill in all required fields |
Responsibility Description | Type | Concept Name |
---|---|---|
Container of All Users | K | UserStorage |
Container of All Missing Person Reports | K | ReportStorage |
Access Report Storage | D | ReportController |
Related Requirements: | REQ 15 |
Initiating Actor: | Concerned Citizen |
Actor's Goals: | To send submitted report information to Law Enforcement |
Participating Actors: | Law Enforcement, Database |
Preconditions: | The Submit Report form is filled out |
Postconditions: | Law Enforcement can view submitted missing person reports |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen clicks the submit report button |
← | 2. | The form input is validated and saved into the Database |
← | 3. | The ReportsController queries the Database for all reports |
← | 4. | The Database returns all rows in the reports table |
← | 5. | The application displays the reports in a table format on the Law Enforcement home page for Law Enforcement to view |
Direction | Number | Description |
---|---|---|
→ | 1. | The Concerned Citizen clicks the submit report button |
← | 2. | The form input is validated and saved into the Database |
← | 3. | The ReportsController queries the Database for all reports |
← | 4. | The Database returns no rows because there are no reports in the reports table |
← | 5. | There are no reports for Law Enforcement to view |
Responsibility Description | Type | Concept Name |
---|---|---|
Container of All Users | K | UserStorage |
Container of All Missing Person Reports | K | ReportStorage |
Access Report Storage | D | ReportController |
Related Requirements: | REQ 16, REQ 18, REQ 28 |
Initiating Actor: | Law Enforcement |
Actor's Goals: | To Validate/Approve missing person reports |
Participating Actors: | Database |
Preconditions: | A report has been submitted by the Concerned Citizen and has the status “on hold” |
Postconditions: | The report is approved, has the status “in progress”, and is now displayed in the application to the Concerned Citizens to view |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
→ | 2a. | Law Enforcement checks the checkbox in the “Approve Case” column and clicks the “Approve” button |
→ | 2b. | Law Enforcement clicks the “Approve” button in the “Approve Case” column |
← | 3. | The Database changes the report status from “on hold” to “in progress” |
← | 4. | The application now displays the approved report to the Concerned Citizens |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
← | 2. | The Database stores the report with an “on hold” status for >24hrs |
← | 3. | The Database deletes the report information |
Responsibility Description | Type | Concept Name |
---|---|---|
Container of All Missing Person Reports | K | ReportStorage |
Access Report Storage | D | ReportController |
Related Requirements: | REQ 17 |
Initiating Actor: | Law Enforcement |
Actor's Goals: | To assign an official report number to a case |
Participating Actors: | Database |
Preconditions: | A report has been submitted by the Concerned Citizen and has the status “on hold” |
Postconditions: | The report has an official report number and that number is displayed for each report |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
→ | 2. | Law Enforcement checks the checkbox in the “Approve Case” column and clicks the “Approve” button |
← | 3. | A modal pops up containing a text field for Law Enforcement to enter the report number |
→ | 4. | Law Enforcement enters the report number and clicks the confirm button |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
→ | 2. | Law Enforcement checks the checkbox in the “Approve Case” column and clicks the “Approve” button |
← | 3. | A modal pops up containing a text field for Law Enforcement to enter the report number |
→ | 4. | Law Enforcement enters invalid characters into the text field and clicks approve |
→ | 5. | An error message is displayed because the characters are invalid and the report number is not added |
Responsibility Description | Type | Concept Name |
---|---|---|
Container of All Missing Person Reports | K | ReportStorage |
Access Report Storage | D | ReportController |
Related Requirements: | REQ 19 |
Initiating Actor: | Law Enforcement |
Actor's Goals: | To categorize missing people |
Participating Actors: | Database |
Preconditions: | A report has been submitted by the Concerned Citizen and has the status “in progress" |
Postconditions: | The missing person is labeled with one of the predefined categories |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
→ | 2. | Law Enforcement clicks the report number to view the detailed report page |
→ | 3. | Law Enforcement clicks the “Categorize" button |
← | 4. | A modal pops up and display category options as checkboxes |
→ | 5. | Law Enforcement clicks one or more of the check boxes and clicks confirm to apply the categorization |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
→ | 2. | Law Enforcement clicks the report number to view the detailed report page |
→ | 3. | Law Enforcement clicks the “Categorize" button |
← | 4. | A modal pops up and display category options as checkboxes |
→ | 5. | Law Enforcement clicks does not see the category they want and closes the modal without choosing a categorization |
Responsibility Description | Type | Concept Name |
---|---|---|
Container of All Missing Person Reports | K | ReportStorage |
Access Report Storage | D | ReportController |
Related Requirements: | REQ 24, REQ 25 |
Initiating Actor: | Law Enforcement |
Actor's Goals: | To Update missing person reports |
Participating Actors: | Database |
Preconditions: | A report has been submitted by the Concerned Citizen and has the status “in progress” |
Postconditions: | The report is updated and the updated info is displayed |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
→ | 2. | Law Enforcement clicks the report number to view the detailed report page |
→ | 3. | Law Enforcement updates any fields as needed |
→ | 4. | Law Enforcement clicks the "Update Button" |
← | 5. | The form validates the changes |
← | 6. | The database applies the changes to the fields in the associated table |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
→ | 2. | Law Enforcement clicks the report number to view the detailed report page |
→ | 3. | Law Enforcement updates any fields as needed |
→ | 4. | Law Enforcement clicks the "Update Button" |
← | 5. | The form validates the changes |
← | 6. | The form returns an error because the updated fields were not changed in the database |
Responsibility Description | Type | Concept Name |
---|---|---|
Container of All Missing Person Reports | K | ReportStorage |
Access Report Storage | D | ReportController |
Related Requirements: | REQ 26, REQ 27 |
Initiating Actor: | Law Enforcement |
Actor's Goals: | To mark missing people as "Found" |
Participating Actors: | Database |
Preconditions: | A report has been submitted by the Concerned Citizen and has the status “in progress” |
Postconditions: | The report has the status of "Found" |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
→ | 2. | Law Enforcement clicks the report number to view the detailed report page |
→ | 3. | Law Enforcement clicks the "Mark As Found" button |
← | 4. | A modal pops up to confirm you want to mark the person as found |
→ | 5. | Law Enforcement clicks "confirm" |
← | 6. | The database changes the missing person report status to "found" |
Direction | Number | Description |
---|---|---|
→ | 1. | Law Enforcement navigates to their home page which displays all reports in a table format |
→ | 2. | Law Enforcement clicks the report number to view the detailed report page |
→ | 3. | Law Enforcement clicks the "Mark As Found" button |
← | 4. | A modal pops up to confirm you want to mark the person as found |
→ | 5. | Law Enforcement clicks "cancel" |
Responsibility Description | Type | Concept Name |
---|---|---|
Container of All Missing Person Reports | K | ReportStorage |
Access Report Storage | D | ReportController |
Our preliminary design based off the documentation we received the first day of class is as follows:
We plan to design a mobile application that can be used by Law Enforcement and the Public as it relates to missing person cases. The application will have a variety of interfaces that are specific for the user type. Law Enforcement will have an interface that gives them access to all the information contained in a missing person report and it will be displayed in a meaningful way. This will allow Law Enforcement to more quickly analyze large amounts of data and help to improve the searching process for locating a missing person. The interface for the concerned public will allow people to see details about current missing people—photos, name, description, last known location, contact information for tips. The application should also allow someone to report information to Law Enforcement about a suspected missing person.
The application will be designed with the user experience in mind and will have a clean organized layout. The Law Enforcement interface should organize data so that it is easy for someone to read and analyze—a table format like in excel is what we are aiming for. The pages should be linked a logically flow so that it is easy for the user to navigate throughout the application. The public facing interface will be a simple scrolling page that displays the information about missing people, similar to what is seen in newspapers. There will also be a form for people to complete is they need to report a person missing.
Category | Number | Level of Complexity |
---|---|---|
User Inputs | 159 | Simple |
User Outputs | 2 | Average |
User Inquiries | 1 | Simple |
Master Files | 104 | Complex |
Interfaces | 12 | Average |
FP = (159 x 3) + (2 x 5) + (1 x 3) + (104 x 7) + (12 x 7)
= 477 + 10 + 3 + 728 + 84
= 1302
General System Characteristic | Weight |
---|---|
Data Communications | 1 |
Distributed Data Processing | 0 |
Performance | 2 |
Heavily Utilized hardware | 1 |
High Transaction Rates | 1 |
Online Data Entry | 5 |
End-User Efficiency | 5 |
Online Update | 5 |
Complex Processing | 1 |
Reusability | 3 |
Installation Ease | 2 |
Operational Ease | 3 |
Portability | 3 |
Maintainability | 1 |
DI = 1 + 0 + 2 + 1 + 1 + 5 + 5 + 5 + 1 + 3 + 2 + 3 + 3 + 1
= 33
TCF = 0.65 + (0.01 x 33)
= .98
Adjusted FP = 1302 x .98
= 1275.96
LOC = 1275.96 x (12211 / 1302)
= 11966.78 LOC
= 11.97 KLOC
Nominal Effort = 3.2 x (11.97)^1.05
= 43.37 person months
addReport(Report_ID : Report_ID,
CaseNumber : int,
status : text,
DateCreated : Date,
SubmitterEmail : text,
FirstName : text,
MiddleName : text,
LastName : text,
Gender : text,
Ethnicity : text,
EyeColor : text,
HairColor : text,
MarksTattoos : text,
Weight : int,
DoB : Date,
Phone : int,
ReportMiscInfo : text,
FamilyFirstName : text,
FamilyMiddleName : text,
FamilyLastName : text,
FamilyGender : text,
Relation : text,
FamilyStreet : text,
FamilyCity : text,
FamilyState : text,
FamilyZip : text,
FamilyPhone : text,
FamilyEmail : text,
Alias : text,
MissingEthnicityOther : text,
MissingEyeColorOther : text,
MissingHairColorOther : text,
HeightFeet : int,
HeightInches : text,
SeenName : text,
SeenStreet : text,
SeenCity : text,
SeenNumber : text,
SeenState: text,
SeenZip : text,
SeenWhen : date,
SeenNotes : text,
FamilyEthnicity : text,
FamilyEthnicityOther : text,
RelationOther : text,
WorkplaceName : text,
WorkplaceStreet : text,
WorkplaceNumber : text,
WorkplaceCity : text,
WorkplaceState : text,
WorkplaceZip : text,
WorkplaceStartDate: date,
WorkplaceEndDate : date,
WorkplaceMisc : text,
HangoutName : text,
HangoutStreet : text,
HangoutNumber : text,
HangoutCity : text,
HangoutState : text,
HangoutZip : text,
HangoutMisc : text,
category : text,
missing_facebook_username : text,
missing_instagram_username : text,
missing_snapchat_username : text,
missing_twitter_username : text,
MissingEmail : text)
Use Case 8-Submit New Report
The Concerned Citizen has an account, is logged in, and is on the Submit Report page
A new missing person report has been submitted and is "on hold"
approveReport(Report_ID : Report_ID, status : text)
Use Case 10-Validate/Approve Report
A report has been submitted by the Concerned Citizen and has the status "on hold".
The report is approved, has the status "in progress", and is now displayed in the application to the Concerned Citizens to view
categorizeReport(Report_ID : Report_ID, category : text)
Use Case 12-Categorize Missing People
A report has been submitted by the Concerned Citizen and has the status "in progress".
The missing person is labeled with one of the predefined categories
updateReport(Report_ID : Report_ID,
CaseNumber : int,
status : text,
DateCreated : Date,
SubmitterEmail : text,
FirstName : text,
MiddleName : text,
LastName : text,
Gender : text,
Ethnicity : text,
EyeColor : text,
HairColor : text,
MarksTattoos : text,
Weight : int,
DoB : Date,
Phone : int,
ReportMiscInfo : text,
FamilyFirstName : text,
FamilyMiddleName : text,
FamilyLastName : text,
FamilyGender : text,
Relation : text,
FamilyStreet : text,
FamilyCity : text,
FamilyState : text,
FamilyZip : text,
FamilyPhone : text,
FamilyEmail : text,
Alias : text,
MissingEthnicityOther : text,
MissingEyeColorOther : text,
MissingHairColorOther : text,
HeightFeet : int,
HeightInches : text,
SeenName : text,
SeenStreet : text,
SeenCity : text,
SeenNumber : text,
SeenState: text,
SeenZip : text,
SeenWhen : date,
SeenNotes : text,
FamilyEthnicity : text,
FamilyEthnicityOther : text,
RelationOther : text,
WorkplaceName : text,
WorkplaceStreet : text,
WorkplaceNumber : text,
WorkplaceCity : text,
WorkplaceState : text,
WorkplaceZip : text,
WorkplaceStartDate: date,
WorkplaceEndDate : date,
WorkplaceMisc : text,
HangoutName : text,
HangoutStreet : text,
HangoutNumber : text,
HangoutCity : text,
HangoutState : text,
HangoutZip : text,
HangoutMisc : text,
category : text,
missing_facebook_username : text,
missing_instagram_username : text,
missing_snapchat_username : text,
missing_twitter_username : text,
MissingEmail : text)
Use Case 13-Update Case Info
A report has been submitted by the Concerned Citizen and has the status "in progress".
The report is updated and the updated info is displayed
closeReport(Report_ID : Report_ID, status : text)
Use Case 14-Mark As Found
A report has been submitted by the Concerned Citizen and has the status "in progress".
The report has the status of "Found"
The MIMS application utilizes mathematical model typical to an application of its size and complexity. The primary focus of the application is the gathering, storage, and display of data; the mathematical processing of this data is not a major component of the application.
Our application utilizes the following APIs and libraries:
Our application utilizes the following Data Structures:
null
)Our application uses the Model View Controller (MVC) design pattern. With the use of CakePHP 3.0 as our framework, the exact design pattern is a variation of MVC where the model is broken down into three parts. The three parts of the model in CakePHP are Table, Entity, and Behavior.
The MIMS website uses CakePHP, which has very loose requirements for hardware. The MIMS system runs on a Linode server. This Linode server uses redundant SSDs for storage and has a static IP address, which provides us with consistent, reliable, and speedy access to our content.
Persistent data such as usernames, passwords, and report information are stored in the database. Pictures of the missing are stored on the server's filesystem. The PHP, HTML, CSS, etc. used to render the MIMS system are also stored on the server's filesystem.
Our application uses standard network ports and protocols.
Please see the CakePHP installation requirements for details.
The MIMS application utilizes programming structures, patterns, and algorithms typical to an application of its size and complexity. The primary focus of the application is the gathering, storage, and display of data; the algorithmic processing of this data is not a major component of the application.
Our application utilizes the following Data Structures:
null
)The user interface design follows a simple layout and color combinations that allows users to easily see important data on a quick glance. The Law Enforcement page displays the data about reports in an easy to read table format. The maps on both the Law Enforcement dashboard and the Public dashboard allow for users to have a more interactive way to see the locations of various missing people based on their last know location and with a description next to the map to show how to fully utilize its functionality. The content of all the pages is kept simple to maintain the focus on what the purpose of the application is—to help locate missing people and bring them back to their families.
For our Unit Testing we used PHPUnit, which can be easily integrated with CakePHP. The testing framework can be installed by using the PHAR package or composer. For our case we used composer to install PHPUnit.
In order to do unit testing using PHPUnit we need to set up a test database for CakePHP to reference when we are testing various functions of our application.
The following are the conventions for creating test cases using CakePHP:
class RouterTest extends TestCase
).To run tests for a plugin that is part of your application source, you need to cd into the plugin directory and then use PHPUnit command that matches how you installed PHPUnit.
vendor/bin/phpunit
php phpunit.phar
The data that will be used to test the register functionality will include a variety of First Name, Last Name, Email, Phone, Password, Confirm Password, and Role combinations.
First Name | Last Name | Phone | Password | Confirm Password | Role | |
---|---|---|---|---|---|---|
User | One | user1@test.com | 1111111111 | 7.m]VQ |
7.m]VQ |
Law Enforcement |
User | Two | user2@test.com | 2222222222 | _2BueD |
_2BueD |
Law Enforcement |
User | Three | user3@test.com | 3333333333 | vjGPs8pP/M5e |
vjGPs8pP/M5e |
Law Enforcement |
User | Four | user4@test.com | 4444444444 | \%T6MypWa'dK |
\%T6MypWa'dK |
Public |
User | Five | user5@test.com | 5555555555 | ra7)#7#U8%tA!)Zx |
ra7)#7#U8%tA!)Zx |
Public |
User | Six | user6@test.com | 6666666666 | s$J}Lbys)(t8<yd5 |
s$J}Lbys)(t8<yd5 |
Public |
The data that will be used to test the login functionality will include a variety of username (emails) and password combinations.
Username | Password |
---|---|
user1@test.com | 7.m]VQ |
user2@test.com | _2BueD |
user3@test.com | vjGPs8pP/M5e |
user4@test.com | \%T6MypWa'dK |
user5@test.com | ra7)#7#U8%tA!)Zx |
user6@gmail.com | s$J}Lbys)(t8<yd5 |
The data that will be used to test the change password functionality will include a variety of old password, new password, and confirm new password combinations.
Old Password | New Password | Confirm New Password |
---|---|---|
7.m]VQ |
Z4(2m' |
Z4(2m' |
_2BueD |
]aH5s' |
]aH5s' |
vjGPs8pP/M5e |
$szd{{&/T3D# |
$szd{{&/T3D# |
\%T6MypWa'dK |
=aF>B~#E6!p> |
=aF>B~#E6!p> |
ra7)#7#U8%tA!)Zx |
~uv+t.x8\>bQS\xa |
~uv+t.x8\>bQS\xa |
s$J}Lbys)(t8<yd5 |
dqK<+c8F9\-m{v>< |
dqK<+c8F9\-m{v>< |
The data that will be used to test the change account info functionality will include a variety of email and phone combinations.
Phone | |
---|---|
newuser1@test.com | 0000000000 |
newuser2@test.com | 9999999999 |
newuser3@test.com | 8888888888 |
newuser4@test.com | 7777777777 |
newuser5@test.com | 1212121212 |
newiser6@test.com | 3434343434 |
The data that will be used to test the submit report functionality will include combinations of the following data fields:
Gender | Name | DOB | Hair Color | Eye Color | Ethnicity | Weight (lbs) | Height (inches) | Marks/Tattoos | Social Media Accounts | Phone Number | Photo(s) | Additional Info |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M | User One | 1-1-1111 | Blonde | Blue | Caucasian | 175 | 64 | None | @user.1 | 1111111111 | None | None |
M | User Two | 2-2-2222 | Brunette | Green | Indian | 200 | 75 | birthmark on arm | @user.2 | 2222222222 | None | None |
M | User Three | 3-3-3333 | Grey | Hazel | Asian | 225 | 72 | tattoo on left wrist | @user.3 | 3333333333 | None | None |
F | User Four | 4-4-4444 | Red | Brown | Caucasian | 150 | 82 | None | @user.4 | 4444444444 | None | None |
F | User Five | 5-5-5555 | Blonde | Hazel | Native American | 100 | 78 | tattoo on left leg | @user.5 | 5555555555 | None | None |
F | User Six | 6-6-6666 | Black | Blue | Caucasian | 80 | 60 | scar on cheek | @user.6 | 6666666666 | None | None |
Phone Number | Address | Relation to Missing Person | Gender | |
---|---|---|---|---|
family1@test.com | 1111111111 | 1 test rd, auburn hills, mi 48326 | Mother | F |
family2@test.com | 2222222222 | 2 test ln, auburn hills, mi 48326 | Father | M |
family3@test.com | 3333333333 | 3 test blvd, auburn hills, mi 48326 | Sister | F |
friend1@test.com | 1111111111 | 1 test rd, troy, mi 48084 | Friend | F |
friend2@test.com | 2222222222 | 1 test rd, troy, mi 48084 | Friend | M |
friend3@test.com | 3333333333 | 1 test rd, troy, mi 48084 | Friend | F |
Name | City | Address | Zip | State |
---|---|---|---|---|
Workplace1 | auburn hills | 9 test rd | 48362 | MI |
Workplace2 | auburn hills | 8 test ln | 48362 | MI |
Workplace3 | auburn hills | 7 test blvd | 48362 | MI |
Hangout1 | troy | 6 test ln | 48084 | MI |
Hangout2 | troy | 5 test ln | 48084 | MI |
Hangout3 | troy | 4 test blvd | 48084 | MI |
The data that will be used to test the email service functionality will be a list of emails.
nmcox@oakland.edu |
mbroe@oakland.edu |
btderr@oakland.edu |
apmorey@oakland.edu |
tcwatling@oakland.edu |
minqianghu@oakland.edu |
The data that will be used to test the forgot password will be a set of emails and new passwords.
Password |
---|
password1 |
password2 |
password3 |
password4 |
password5 |
password6 |
The data that will be used to test the forgot password will be a set of emails and new passwords.
Username | Password |
---|---|
user7@test.com | password1 |
user8@test.com | password2 |
user9@test.com | password3 |
user10@test.com | password4 |
user11@test.com | password5 |
user12@gmail.com | password6 |
The data that will be used to test the forgot password will be a set of emails and new passwords.
Username | Password |
---|---|
user13@test.com | password1 |
user14@test.com | password2 |
user15@test.com | password3 |
user16@test.com | password4 |
user17@test.com | password5 |
user18@gmail.com | password6 |
The data that will be used to test the submit report functionality will include combinations of the following data fields:
Gender | Name | DOB | Hair Color | Eye Color | Ethnicity | Weight (lbs) | Height (inches) | Marks/Tattoos | Social Media Accounts | Phone Number | Photo(s) | Additional Info |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M | User One | 1-1-1111 | Blonde | Blue | Caucasian | 175 | 64 | None | @user.1 | 1111111111 | None | None |
M | User Two | 2-2-2222 | Brunette | Green | Indian | 200 | 75 | birthmark on arm | @user.2 | 2222222222 | None | None |
M | User Three | 3-3-3333 | Grey | Hazel | Asian | 225 | 72 | tattoo on left wrist | @user.3 | 3333333333 | None | None |
F | User Four | 4-4-4444 | Red | Brown | Caucasian | 150 | 82 | None | @user.4 | 4444444444 | None | None |
F | User Five | 5-5-5555 | Blonde | Hazel | Native American | 100 | 78 | tattoo on left leg | @user.5 | 5555555555 | None | None |
F | User Six | 6-6-6666 | Black | Blue | Caucasian | 80 | 60 | scar on cheek | @user.6 | 6666666666 | None | None |
Phone Number | Address | Relation to Missing Person | Gender | |
---|---|---|---|---|
family1@test.com | 1111111111 | 1 test rd, auburn hills, mi 48326 | Mother | F |
family2@test.com | 2222222222 | 2 test ln, auburn hills, mi 48326 | Father | M |
family3@test.com | 3333333333 | 3 test blvd, auburn hills, mi 48326 | Sister | F |
friend1@test.com | 1111111111 | 1 test rd, troy, mi 48084 | Friend | F |
friend2@test.com | 2222222222 | 1 test rd, troy, mi 48084 | Friend | M |
friend3@test.com | 3333333333 | 1 test rd, troy, mi 48084 | Friend | F |
Name | City | Address | Zip | State |
---|---|---|---|---|
Workplace1 | auburn hills | 9 test rd | 48362 | MI |
Workplace2 | auburn hills | 8 test ln | 48362 | MI |
Workplace3 | auburn hills | 7 test blvd | 48362 | MI |
Hangout1 | troy | 6 test ln | 48084 | MI |
Hangout2 | troy | 5 test ln | 48084 | MI |
Hangout3 | troy | 4 test blvd | 48084 | MI |
The data that will be used to test the approve reports functionality will be a set of reports based on their Report ID.
Report ID |
---|
1 |
2 |
3 |
4 |
5 |
6 |
The data that will be used to test the assign official report number functionality will be a set of report numbers.
Report Numbers |
---|
111111 |
222222 |
333333 |
444444 |
555555 |
666666 |
The data that will be used to test the categorize missing people functionality will be a set of categories and report IDs.
Report ID | Category |
---|---|
1 | Romeo and Juliet |
2 | Romeo and Juliet |
3 | Runaway |
4 | Runaway |
5 | Substance Abuser |
6 | Human Trafficking |
The data that will be used to test the update case information functionality will be a set of existing reports based on ID and new report values (category field used for testing purposes).
Report ID | Category |
---|---|
1 | Human Trafficking |
2 | Human Trafficking |
3 | Romeo and Juliet |
4 | Human Trafficking |
5 | Runaway |
6 | Substance Abuser |
The data that will be used to test the mark as found functionality will be a set of reports based on ID with status on hold.
Report ID | Status |
---|---|
1 | on hold |
2 | on hold |
3 | on hold |
4 | on hold |
5 | on hold |
6 | on hold |
The Concerned Citizen/Law Enforcement opens the application and navigates the register page to create a new account. Once on the register page, the Concerned Citizen/Law Enforcement enters in the required information (First Name, Last Name, Email, Phone, Password, and Confirm Password). The Concerned Citizen/Law Enforcement then clicks the register button to complete the registration process. Once the account is created successfully and message with be displayed to the Concerned Citizen/Law Enforcement to let them know they can now login.
The Concerned Citizen/Law Enforcement has their account registered with the application. They go to the login page for the application and enter their Username (email) and Password in the corresponding fields. They then click the Login button.
The Concerned Citizen/Law Enforcement has logged in with their existing account and navigates to the "My Account" page. They update their phone or email in the corresponding fields. Next they will click the update account button. If the information is valid, the account information will be updated.
The Concerned Citizen/Law Enforcement has opened the application and is on the login page. They click the forgot password button and are directed to a page to enter the email associated with their account. They then receive an email with a unique link to reset their password. Once they enter their new password and confirm it in the corresponding fields they can access their account again.
The Concerned Citizen/Law Enforcement has logged in with their existing account and navigates to the "My Account" page. They update their old password, new password and confirm password in the corresponding fields. Next they will click the update account button. If the information is valid, the account information will be updated.
The Concerned Citizen/Law Enforcement has opened the application and is on the register new account page. They have entered their first name, last name, email, phone, password, and confirm password in the corresponding fields. Then they press the submit button to create the account. The form validates that all of the fields data are valid and then creates the new account in the database. The Email Service will then send an email to the Concerned Citizen/Law Enforcement to have them verify that their email is valid by sending a unique link in the email for the Concerned Citizen/Law Enforcement to click.
The Concerned Citizen already has an account created and they are on the login page. They enter their email and password then click the login button. Once their credentials are validated they will be directed to the Home Page specific to their user type.
The Law Enforcement already has an account created and they are on the login page. They enter their email and password then click the login button. Once their credentials are validated they will be directed to the Home Page specific to their user type.
The Concerned Citizen is logged into their account and is on the Submit Report page. They enter the data in the corresponding fields and click the submit button. The form data is validated and then a new report is added to the database with a status of "on hold" for Law Enforcement to then review.
The Concerned Citizen has submitted a new missing person report. The report form data has been validated and stored in the database. The Law Enforcement logs into their account and navigates to their specified home page. All missing person reports, including the newly submitted one, are displayed in a table on the home page for the Law Enforcement to see.
The Law Enforcement click on a missing person report in the table on the home page and are able to approve the report. The reports status changes from "on hold" to "in progress".
The Law Enforcement clicks on a missing person report in the table to see a more detailed view of the report. Law Enforcement assigns an official police report number to the in progress case.
The Law Enforcement clicks on the more detailed view of a report and updates the report to give it assign it a type of missing person based on set categories.
The Law Enforcement clicks on the more detailed view of a report and updates any editable fields pertaining to the report for other Law Enforcement and the Concerned Public to see.
The Law Enforcement clicks on the more detailed view of a report and changes the case from "Missing" to "Found". The word "Found" is displayed across the image of the missing persona and still appears in the system for the Concerned Citizen to see.
TC1
Register Test
REQ 1
The application needs to be open and the register (add) page needs to be active.
First Name | Last Name | Phone | Password | Confirm Password | Role | |
---|---|---|---|---|---|---|
User | One | user1@test.com | 1111111111 | 7.m]VQ |
7.m]VQ |
Law Enforcement |
User | Two | user2@test.com | 2222222222 | _2BueD |
_2BueD |
Law Enforcement |
User | Three | user3@test.com | 3333333333 | vjGPs8pP/M5e |
vjGPs8pP/M5e |
Law Enforcement |
User | Four | user4@test.com | 4444444444 | \%T6MypWa'dK |
\%T6MypWa'dK |
Public |
User | Five | user5@test.com | 5555555555 | ra7)#7#U8%tA!)Zx |
ra7)#7#U8%tA!)Zx |
Public |
User | Six | user6@test.com | 6666666666 | s$J}Lbys)(t8<yd5 |
s$J}Lbys)(t8<yd5 |
Public |
A new user should be added to the users table in the database.
2018-02-02
TC2
Login Test
REQ 2
The application needs to be open, a user account needs to be register, and the login page needs to be active.
Username | Password |
---|---|
user1@test.com | 7.m]VQ |
user2@test.com | _2BueD |
user3@test.com | vjGPs8pP/M5e |
user4@test.com | \%T6MypWa'dK |
user5@test.com | ra7)#7#U8%tA!)Zx |
user6@gmail.com | s$J}Lbys)(t8<yd5 |
A user who has a registered account will be able to login and be taken to the home page.
2018-02-02
TC3
Change Password Test
REQ 3
The application needs to be open, a user account needs to be register, and the login page needs to be active.
Old Password | New Password | Confirm New Password |
---|---|---|
7.m]VQ |
Z4(2m' |
Z4(2m' |
_2BueD |
]aH5s' |
]aH5s' |
vjGPs8pP/M5e |
$szd{{&/T3D# |
$szd{{&/T3D# |
\%T6MypWa'dK |
=aF>B~#E6!p> |
=aF>B~#E6!p> |
ra7)#7#U8%tA!)Zx |
~uv+t.x8\>bQS\xa |
~uv+t.x8\>bQS\xa |
s$J}Lbys)(t8<yd5 |
dqK<+c8F9\-m{v>< |
dqK<+c8F9\-m{v>< |
A user who has a registered account, is logged in, and chooses to change their password will no have a new password recorded in the users table in the database.
2018-02-10
TC4
Update Account Info Test
REQ 3
The application needs to be open, a user account needs to be register, user needs to be logged in and the My Account page needs to be active.
Phone | |
---|---|
newuser1@test.com | 0000000000 |
newuser2@test.com | 9999999999 |
newuser3@test.com | 8888888888 |
newuser4@test.com | 7777777777 |
newuser5@test.com | 1212121212 |
newiser6@test.com | 3434343434 |
A user with a registered account, is logged in, and chooses to change their email and/or phone number associated with their account will have a new email and/or phone number recorded in the users table in the database.
2018-02-25
TC5
Submit Report Test
REQ 11, REQ 12
A user with a registered account, is logged in, and chooses to submit a new missing person report.
Gender | Name | DOB | Hair Color | Eye Color | Ethnicity | Weight (lbs) | Height (inches) | Marks/Tattoos | Social Media Accounts | Phone Number | Photo(s) | Additional Info |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M | User One | 1-1-1990 | Blonde | Blue | Caucasian | 175 | 64 | None | @user.1 | 1111111111 | None | None |
M | User Two | 2-2-1990 | Brunette | Green | Indian | 200 | 75 | birthmark on arm | @user.2 | 2222222222 | None | None |
M | User Three | 3-3-1990 | Grey | Hazel | Asian | 225 | 72 | tattoo on left wrist | @user.3 | 3333333333 | None | None |
F | User Four | 4-4-1990 | Red | Brown | Caucasian | 150 | 82 | None | @user.4 | 4444444444 | None | None |
F | User Five | 5-5-1990 | Blonde | Hazel | Native American | 100 | 78 | tattoo on left leg | @user.5 | 5555555555 | None | None |
F | User Six | 6-6-1990 | Black | Blue | Caucasian | 80 | 60 | scar on cheek | @user.6 | 6666666666 | None | None |
Phone Number | Address | Relation to Missing Person | Gender | |
---|---|---|---|---|
family1@test.com | 1111111111 | 1 test rd, auburn hills, mi 48326 | Mother | F |
family2@test.com | 2222222222 | 2 test ln, auburn hills, mi 48326 | Father | M |
family3@test.com | 3333333333 | 3 test blvd, auburn hills, mi 48326 | Sister | F |
friend1@test.com | 1111111111 | 1 test rd, troy, mi 48084 | Friend | F |
friend2@test.com | 2222222222 | 1 test rd, troy, mi 48084 | Friend | M |
friend3@test.com | 3333333333 | 1 test rd, troy, mi 48084 | Friend | F |
Name | City | Address | Zip | State |
---|---|---|---|---|
Workplace1 | auburn hills | 9 test rd | 48362 | MI |
Workplace2 | auburn hills | 8 test ln | 48362 | MI |
Workplace3 | auburn hills | 7 test blvd | 48362 | MI |
Hangout1 | troy | 6 test ln | 48084 | MI |
Hangout2 | troy | 5 test ln | 48084 | MI |
Hangout3 | troy | 4 test blvd | 48084 | MI |
A new missing person report will be added to the database.
2018-02-25
TC8
View as Citizen
REQ 8
A Concerned Citizen logs in with their registered account.
Username | Password |
---|---|
user7@test.com | password1 |
user8@test.com | password2 |
user9@test.com | password3 |
user10@test.com | password4 |
user11@test.com | password5 |
user12@gmail.com | password6 |
The Concerned Citizen logs in with their registered account and can see the home page specific to their user type.
2018-02-25
TC9
View as Law Enforcement
REQ 9
The Law Enforcement logs in with their registered account.
Username | Password |
---|---|
user13@test.com | password1 |
user14@test.com | password2 |
user15@test.com | password3 |
user16@test.com | password4 |
user17@test.com | password5 |
user18@gmail.com | password6 |
The Law Enforcement logs in with their registered account and can see the home page specific to their user type.
2018-02-25
TC10
Send Report to Law Enforcement
REQ 15
The Concerned Citizen has submitted a new report and law enforcement logs into their account.
Username | Password |
---|---|
user13@test.com | password1 |
user14@test.com | password2 |
user15@test.com | password3 |
user16@test.com | password4 |
user17@test.com | password5 |
user18@gmail.com | password6 |
The Law Enforcement logs in with their registered account and can see all submitted reports in a table format
2018-02-25
TC11
Validate/Approve Report
REQ 16, REQ 18, REQ 28
A report as been submitted and has a status of "On Hold"
Report ID | Status |
---|---|
1 | on hold |
2 | on hold |
3 | on hold |
4 | on hold |
5 | on hold |
6 | on hold |
The status of the report will be changed to "in progress" and the public will be able to see it.
2018-04-06
TC12
Assign Official Report Number
REQ 17
A report has been submitted and has been approved
Report Numbers |
---|
111111 |
222222 |
333333 |
444444 |
555555 |
666666 |
The report will have an official report number assigned to it
2018-04-06
TC13
Categorize Missing People
REQ 19
A report has been added to the system and law enforcement is logged in.
Report ID | Category |
---|---|
1 | Romeo and Juliet |
2 | Romeo and Juliet |
3 | Runaway |
4 | Runaway |
5 | Substance Abuser |
6 | Human Trafficking |
The report will have a category
2018-04-06
TC14
Update Case Information
REQ 24, REQ 25
Law enforcement is logged in and is viewing the detailed report view for an individual report
Report ID | Category |
---|---|
1 | Human Trafficking |
2 | Human Trafficking |
3 | Romeo and Juliet |
4 | Human Trafficking |
5 | Runaway |
6 | Substance Abuser |
The category for the report will be updated
2018-04-06
TC15
Mark as Found
REQ 26, REQ 27
A report has been submitted, is active, and law enforcement has logged in and is viewing the table on their dashboard
Report ID | Status |
---|---|
1 | on hold |
2 | on hold |
3 | on hold |
4 | on hold |
5 | on hold |
6 | on hold |
The report has a status of "found" and the public can still view it
2018-04-06
See media/MIMS_Project_Plan_FINAL_Gantt.pdf for the Gantt chart PDF file.
See media/MIMS_Project_Plan_FINAL_Tasks.pdf for the task breakdown PDF file.