<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>A Case Study based Software Engineering Education using Open Source Tools</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>M. S. Ramaiah Institute of Technology M.S. Ramaiah Institute of Technology M.S. Ramaiah Institute of Technology</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2015</year>
      </pub-date>
      <fpage>79</fpage>
      <lpage>88</lpage>
      <abstract>
        <p>Software engineering is a course for undergraduate computer science students that comprises of principles of engineering in a software development. In this course, students learn about typical phases of software that involves requirement analysis, planning and scheduling, design and coding, testing, deployment and management on different case studies. In this paper, we investigated a practical approach for learning software engineering through open source tools for different phases of the software on different case studies they have chosen as their problem statement.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Software Engineering</kwd>
        <kwd>Waterfall model</kwd>
        <kwd>Open source tools for Software Engineering</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. INTRODUCTION</title>
      <p>Software Engineering describes about various phases involved in
a software project such as requirements and analysis, design and
coding, testing, deployment and maintenance. In this paper we
discuss the lab process that was implemented to provide a
conducive and a near software firm environment for students to
provide a better understanding of Software engineering principles,
different phases of the software and finally the principles of
management through Open source tools. The paper is further
organized as follows. Section 2 discusses about a brief
introduction to the process model and Case Studies categories
followed for the projects in the lab. Section 3 describes about
course overview, tasks carried out in each week and the tools
used, section 4 discusses about survey conducted for the
curriculum and its results based on the course outcomes of the
introduction of a practical way to teach software engineering with
tool.</p>
    </sec>
    <sec id="sec-2">
      <title>2. PROCESS AND PHASES</title>
      <p>
        Software engineering consists of process models such as waterfall
model, incremental process, prototyping model, spiral model,
scrum model and several other models [
        <xref ref-type="bibr" rid="ref1 ref15">1</xref>
        ] [
        <xref ref-type="bibr" rid="ref16 ref2">2</xref>
        ]. Out of these
models, waterfall process model is one of the basic models that is
used for developing a typical software in a industry [
        <xref ref-type="bibr" rid="ref1 ref15">1</xref>
        ]. It consists
of phases requirement analysis, planning and scheduling, design,
development, testing, deployment and maintenance.
      </p>
      <p>
        In requirement analysis phase, the requirements are gathered for
the project based on the features and goals listed down for a
project. It may include functional requirements such as
authentication of a user login and non-functional requirements
such as reliability, performance. During planning phase the
overall estimate or listing the various tasks to be carried out
carries out the schedule of the project and resources are assigned
to the tasks identified. In the system design phase, various
modules are identified that defines the features and requirements
identified in the phase 1. The modules identified are developed
using suitable implementation language during development
phase and tested with appropriate test cases either manually or
automated during testing. There are some disadvantages with
waterfall model compared to other software processes such as
early frozen requirements, no feedback from the user and so on as
discussed in [
        <xref ref-type="bibr" rid="ref1 ref15">1</xref>
        ][
        <xref ref-type="bibr" rid="ref16 ref2">2</xref>
        ].
      </p>
      <p>Compared to other models we have followed a waterfall model
approach with some modifications in the phase of requirements
analysis and the feedback. During requirement analysis phase a
SMART matrix approach was followed to frame the objectives
and goals of a software project. For a feedback analysis in each
phase a weekly status reports were designed that are discussed in
the upcoming sections.</p>
    </sec>
    <sec id="sec-3">
      <title>3. COURSE OVERVIEW</title>
      <p>
        The course of Software Engineering is conducted for
undergraduate students for Computer Science and Engineering as
per ACM guidelines for Software Engineering education [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] in
the third year of their curriculum having 4 credits with lectures
and a practical lab. In the lab a team of 3 -4 students were formed
where each one will be playing a different role in each phase. In
this section we discuss the approach and the phases that we
followed for our practical approach to teach Software Engineering
using Open source tools. The different Case studies based on the
problem statements chosen by the students were identified as
shown in the table 1.
In the first week, a problem statement was designed and given to
the students for applying Software Engineering techniques to it.
This problem statement was then formulated into SMART
(Specific, Measurable, Achievable, relevant and Time Bound)
matrix that helps in coming up with Goals and Objectives of the
problem to be solved. Based on these goals and objectives,
features are listed down for the software to be developed for the
defined problem statement.
      </p>
      <p>
        Now based on the features, requirements elicitation is carried
out to create the Software Requirement Specification (SRS) using
the tool called OSRMT (Open Source Requirements Management
Tool) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. It provides a GUI interface for specifying the
requirements, add dependencies between them. Once the final
requirements are ready, a report on the requirements can be
exported using the tool. Based on the categories of projects as
identified in table we have identified top requirements for each
category as shown in the table 2.
In the next phase, planning is carried out for the Case study using
ProjLibre [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. With the help of this tool, team of students
identifies the different type of activities and their dependencies
that need to be carried out during the project and their roles in
each activity. At the end of this phase, a project plan or schedule
generically called as Gantt chart is prepared.
      </p>
      <p>
        Various cost drivers such as application experience; required
reliability and so on drive a software project. In this phase, effort
estimation is carried out for the project based on COCOMO
model using tool available by University of Southern California
[
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. The selection of cost drivers is estimated based on the
features, requirements and planning schedule as carried out in the
previous phases. At the end of this phase, effort required for the
project is calculated in person months with number of resources
required at each phase. The next phase of the project for the case
study is Design where the features and requirements are now
represented schematically using StarUML tool [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. We
instructed the students to design the following representations for
the project.
      </p>
      <p>
</p>
      <sec id="sec-3-1">
        <title>Use case diagram</title>
        <p>It represents the summary level scenario of all the
features in a project. It consists of actors, preconditions
involved in the scenario.</p>
      </sec>
      <sec id="sec-3-2">
        <title>Class diagram</title>
        <p>It represents various classes, its attributes and methods,
association between the classes for the actors considered
in the use cases.
 Sequence diagram</p>
        <p>It represents the dynamic behaviour of the system or
software with respect to the objects of the classes and its
functions.</p>
        <p>At the end of this phase, the team will be able to identify the
modules that can be implemented. The modules can be identified
based on the class diagrams and the sequence diagrams.
A software project involves risks such as personnel shortfalls,
wrong software function implementation and so on. The next
phase involved risk analysis and mitigation using risk
management toolkit [12]. A risk matrix was prepared with XLS
sheet with common fields as shown in the table 3 with an example
of risk Personnel shortfalls. Once the risks are listed down, the
priority and the rank of the risks is maintained with mitigation
steps to control it.</p>
      </sec>
      <sec id="sec-3-3">
        <title>Risk no</title>
        <p>1</p>
      </sec>
      <sec id="sec-3-4">
        <title>Risk name</title>
        <sec id="sec-3-4-1">
          <title>Personnel shortfalls</title>
          <p>
            Implementation or Coding was carried out in the next phase.
During coding, we also followed unit testing approach where the
students carried out unit testing with JUnit framework [
            <xref ref-type="bibr" rid="ref12">13</xref>
            ].
Cyclomatic complexity of a module was calculated using the
McCabe formula, V(G)=e-n+p by representing unit tested
modules as a graph G with n nodes and e edeges [
            <xref ref-type="bibr" rid="ref13">14</xref>
            ]. Depending
on the range of the cyclomatic complexity, those modules were
further broken down if needed. Finally, during testing phase, we
followed manual testing approach where test cases were designed
with a template as shown in the table. These test cases were run
against the features designed during the first phase and test report
was generated.
          </p>
          <p>To keep track of their activities the team had to submit the
Weekly Status Report as shown in the fig 1, which has the
information about their role and tasks accomplished, major
decision that were part of the plan and the milestones achieved.
The activities carried out in each week are summarized in the
table 4 and tools used for each phase and tasks carried out as
described above are shown in the table 5.</p>
        </sec>
        <sec id="sec-3-4-2">
          <title>Problem Statement, Objectives, and Goals</title>
        </sec>
      </sec>
      <sec id="sec-3-5">
        <title>Tool</title>
        <sec id="sec-3-5-1">
          <title>OSRMT</title>
        </sec>
        <sec id="sec-3-5-2">
          <title>Project Libre</title>
          <p>Project
planning
scheduling
and</p>
          <p>Effort estimation
using COCOMO
model</p>
        </sec>
        <sec id="sec-3-5-3">
          <title>Risk analysis</title>
          <p>and
mitigation</p>
        </sec>
      </sec>
      <sec id="sec-3-6">
        <title>Phase</title>
        <p>Requirements and</p>
        <p>Analysis
Planning and
scheduling
Effort estimation</p>
        <p>Design
Risk analysis and
mitigation
Unit Testing
It provides a GUI for providing the requirements in a list with dependencies between them.
A gantt chart is prepared using this tool, that gives the overall schedule and resource planning
for the project
Using this tool, effort in terms of person months is estimated with staffing profile required for
each phase as shown in the fig.</p>
        <p>Different sequence and collaboration diagrams, use case diagrams are drawn based on the
features and requirements enlisted using OSRMT.</p>
        <p>A risk matrix of different risks and their probabilities, severity and mitigation steps to control
the risk is prepared
A unit test for each module is designed and executed.</p>
        <p>Fig 1.Weekly Status Reports</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. COURSE SURVEYS AND RESULTS</title>
      <p>In this course of Software Engineering, we conducted surveys by
designing course outcomes that can be satisfied by the students
after learning this course. The main aim of these surveys is to
improve the curriculum of Software Engineering course using the
feedback from the students. The analysis and the results are as
shown in the table 6 and table 7. Table 6 lists the course outcomes
and their results. Table 7 lists the survey questions formed and its
results. From these survey results and feedback from the students
we infer the following results.



</p>
      <p>A consistent SRS is prepared using the principles of
requirement management.</p>
      <p>Ability to plan, schedule and estimate the effort for
various activities in the project to accomplish its goals
and objectives.</p>
      <p>Design and identify the modules of the system for
problem using different UML diagrams.</p>
      <p>Implement the specification and testing effectively.</p>
      <p>Inculcate project management principles in a team and
as an individual efficiently.</p>
      <p>Sl.no
1
2
3
4</p>
      <sec id="sec-4-1">
        <title>Course Outcome</title>
        <p>Identify a problem
statement, trace
the requirements
and write
unambiguous,
correct and
consistent SRS</p>
        <sec id="sec-4-1-1">
          <title>Prepare a project plan and estimate effort required for the project</title>
        </sec>
        <sec id="sec-4-1-2">
          <title>Identify, analyze</title>
          <p>and develop a risk
management plan
for the potential
risks in the project</p>
        </sec>
        <sec id="sec-4-1-3">
          <title>To create a</title>
          <p>specification of
a software artifact
intended to
accomplish goals
Sl.no
1
2
3</p>
        </sec>
        <sec id="sec-4-1-4">
          <title>To perform testing of the code using Junit testing and test cases</title>
        </sec>
      </sec>
      <sec id="sec-4-2">
        <title>Survey questions</title>
        <sec id="sec-4-2-1">
          <title>Use of Tools and</title>
          <p>practical approach
to understand the
Software
principles and
development
process</p>
        </sec>
        <sec id="sec-4-2-2">
          <title>Quality of Course Content</title>
        </sec>
        <sec id="sec-4-2-3">
          <title>Course workload for the number of credits</title>
        </sec>
        <sec id="sec-4-2-4">
          <title>Organization of Lectures and lessons for the course</title>
        </sec>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. COMPARISON WITH VIRTUAL LABS</title>
      <p>
        The similar approach has been adopted in virtual lab developed
for teaching software engineering at IIT Kharagpur [
        <xref ref-type="bibr" rid="ref14">15</xref>
        ], The
main difference with our approach and virtual labs is we are using
exhaustive open source tools. We have aligned our complete
theory course structure mapping to the tasks they perform during
SDLC. The team based learning and role based learning are also
exploited during this course delivery.
      </p>
      <p>While calculating the metrics in planning phase ie, LOC, Effort,
Schedule and COST in virtual labs they have used the
COCOMO model, using the cost drivers they estimated the
metrics in virtual labs. In our practical approach, we have
estimated effort using COCOMO Model II tool and we have
estimated the schedule using Gnatt Chart and Pert Chart using the
ProjectLibre tool. In the next phase, designing their problem
statement using Use-case, Collaboration and Sequence diagram in
virtual labs, but we have designed our problem statement using
Use-case diagram, The class diagram to identify the classes and
modules, identifying the aggregation and association. The
dynamic behavior using sequence diagram using StarUML tool.
During the process of identifying the cyclomatic complexity we
have assigned them to implement the prime modules and to
identify the cyclomatic complexity metrics for the implemented
modules. Finally, in virtual labs they developed the test cases for
the modules, but in our practical approach we have we generated
the automated unit test cases using Junit Testframework and
manual testing for the different modules.</p>
    </sec>
    <sec id="sec-6">
      <title>6. CONCLUSION</title>
      <p>
        Software engineering education plays a key role for the students
to understand the principles of software development and its
practices in software industry. The practical tool based approach
for Software engineering followed helps the students to
understand practically about the principles, phases and practices
about software development in real time environment. The
approach we have introduced in the course is in par with virtual
labs introduced in [
        <xref ref-type="bibr" rid="ref14">15</xref>
        ]. The mapping of categories of the
experiments followed in the virtual labs is same as the different
tasks carried out in our approach as shown in the table 4.
Initially, the course was designed with only lectures based on the
contents in the syllabus. Based on the students opinion to improve
the course content through a practical approach, the course was
modified with new syllabi and lab. Since, the project was carried
out in a team, the students learned about principles of
management by participating individually and collaborating with
each other in the team. The proposed Case based approach for
Software Engineering made students aware of the course contents
and the principles and techniques of the course.
      </p>
      <sec id="sec-6-1">
        <title>Course Title: Software Engineering</title>
        <p>Credits (L:T:P): 3:0:0
Type of Course: Lecture
Appendix
Course Code: CS515
Core/ Elective: Core</p>
      </sec>
      <sec id="sec-6-2">
        <title>Total Contact Hours: 42 hrs</title>
      </sec>
      <sec id="sec-6-3">
        <title>Course Objectives</title>
        <p>Objectives of the course are to:
1. Provide an understanding of the principles of software engineering in a broader system context and the notions of
software engineering process and management.
2. Identify the processes, techniques and deliverables that are associated with requirement engineering including system
requirement and system modeling
3. Analyze the various steps involved in the design process and the different design approaches which include
functionoriented design and object-oriented design
4. Identify the importance of testing in assuring the quality of software with an understanding of managing risks during
the progress of the project
5. Appreciate the need for web engineering
The Software Problem &amp; Processes: Cost, Schedule &amp; Quality, Scale &amp; Change, Software Processes: Process &amp; Project,
Component Software Processes, Software Development Process Models, Project Management Process
Requirements Analysis &amp; Project Planning: Requirements Analysis &amp; Specification: Value of a Good SRS, Requirements
Process, Requirements Specification, Functional Specification with Use Cases, Other Approaches for Analysis, Planning a
Software Project: Effort Estimation, Project Schedule &amp; Staffing, Quality Planning, Risk Management Planning, Project
Monitoring Plan
Design, Coding &amp; Unit Testing: Design: Design Concepts, Function-oriented Design, Object-oriented Design, Detailed
Design, Metrics, Coding &amp; Unit Testing: Programming Principles &amp; Guidelines, Incrementally Developing Code, Managing
Evolving Code, Unit Testing, Code Inspection, Metrics
Testing &amp; Risk Management: Testing Concepts, Testing Process, Black-box Testing, White-box Testing, Metrics, Risk
Analysis &amp; Management: Introduction, Risk Identification, Risk Estimation, Risk Exposure, Risk Mitigation, Risk
Management Plans
Web Engineering: The Need for Web Engineering: Introduction, Web Applications vs Conventional Software, The Need for
an Engineering Approach, Empirical Assessment, Conclusions</p>
      </sec>
      <sec id="sec-6-4">
        <title>Textbooks</title>
        <p>1. Pankaj Jalote: A Concise Introduction to Software Engineering , Springer, 2008 (Chapters: 1-4, 6-8)
2. David Gustafson: Software Engineering, Schaum's Outline Series, McGraw Hill, 2002 (Chapters: 6)
3. Emilia Mendes, Nile Mosley: Web Engineering, Springer, 2006 (Chapter: 1)</p>
      </sec>
      <sec id="sec-6-5">
        <title>Reference Books</title>
        <p>1. Roger S. Pressman: Software Engineering A Practitioner's Approach, 7th Edition, McGraw Hill, 2010</p>
      </sec>
      <sec id="sec-6-6">
        <title>Course Delivery</title>
        <p>The course will be delivered through task and role based team learning concepts</p>
      </sec>
      <sec id="sec-6-7">
        <title>Course Assessment and Evaluation</title>
      </sec>
      <sec id="sec-6-8">
        <title>Course Outcomes</title>
        <p>At the end of the course the students should be able to:
1. Demonstrate an understanding of the principles and techniques of Software Engineering
2. Understand the activities in project management, requirement engineering process and to identify the different types
of system models
3. Apply the knowledge of design engineering in software development
4. Formulate different testing methods and tools
5. Recognize the need for web engineering</p>
      </sec>
      <sec id="sec-6-9">
        <title>Mapping Course Outcomes with Programme Outcomes Course Outcomes</title>
        <p>1. Demonstrate an understanding of the principles and techniques of</p>
        <p>Software Engineering
2. Understand the activities in project management, requirement
engineering process and to identify the different types of system
models
3. Apply the knowledge of design engineering in software
development
4. Formulate different testing methods and tools
5. Recognize the need for web engineering
1
X
2
X
X
X
3
X</p>
        <p>X
X
X</p>
        <p>X
X</p>
        <p>X</p>
      </sec>
      <sec id="sec-6-10">
        <title>Course Title: Software Engineering Lab</title>
        <p>Credits (L:T:P) 0:0:1
Type of Course: Practical sessions</p>
      </sec>
      <sec id="sec-6-11">
        <title>Programme Outcomes</title>
        <p>4 5 6 7 8 9
10
11
X</p>
        <p>X</p>
        <p>X
12</p>
        <p>X
X</p>
      </sec>
      <sec id="sec-6-12">
        <title>Mapping Course Outcomes with Programme Outcomes Course Outcomes</title>
        <p>1
X
X
X
X
X
2
X
X
X
X
X
X
X
X
X</p>
      </sec>
      <sec id="sec-6-13">
        <title>Course Outcomes</title>
        <p>At the end of the course the students should be able to
1. Identify a problem statement, trace the requirements and write unambiguous, correct and consistent SRS
2. Prepare a project plan and estimate effort required for the project
3. Identify, analyze and develop a risk management plan for the potential risks in the project
4. To create a specification of a software artifact intended to accomplish goals
5. To perform exhaustive testing of the code</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Jalote</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          (
          <year>2008</year>
          ).
          <article-title>A concise introduction to software engineering</article-title>
          . Springer.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Pressman</surname>
            ,
            <given-names>R. S.</given-names>
          </string-name>
          , &amp;
          <string-name>
            <surname>Jawadekar</surname>
            ,
            <given-names>W. S.</given-names>
          </string-name>
          (
          <year>1987</year>
          ).
          <article-title>Software engineering</article-title>
          . New York
          <year>1992</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Pankaj</given-names>
            <surname>Jalote</surname>
          </string-name>
          : A Concise Introduction to Software Engineering , Springer,
          <year>2008</year>
          (Chapters:
          <fpage>1</fpage>
          -
          <issue>4</issue>
          ,
          <fpage>6</fpage>
          -
          <lpage>8</lpage>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>David</given-names>
            <surname>Gustafson</surname>
          </string-name>
          : Software Engineering, Schaum's Outline Series,
          <source>McGraw Hill</source>
          ,
          <source>2002 (Chapters: 6)</source>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Emilia</given-names>
            <surname>Mendes</surname>
          </string-name>
          , Nile Mosley: Web Engineering, Springer,
          <source>2006 (Chapter: 1)</source>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Roger</surname>
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Pressman: Software Engineering A Practitioner's Approach</surname>
          </string-name>
          , 7th Edition,
          <source>McGraw Hill</source>
          ,
          <year>2010</year>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>ACM</surname>
          </string-name>
          , IEEE. (
          <year>2008</year>
          ).
          <source>Computer science curriculum</source>
          <year>2008</year>
          ,
          <article-title>An interim revision of CS 2001</article-title>
          .
          <source>Retrieved March</source>
          <volume>14</volume>
          ,
          <year>2012</year>
          from http://www.acm.org/education/curricula/ComputerScience2008.p df
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>[8] http://sourceforge.net/projects/osrmt/</mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>[9] http://www.projectlibre.org/</mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>[10] http://csse.usc.edu/tools/COCOMOII.php</mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>[11] http://staruml.io/ [12] http://www2.mitre.org/work/sepo/toolkits/risk/ToolsTechniques/R iskNav.html</mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>[13] http://junit.org/</mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [14]
          <string-name>
            <surname>McCabe</surname>
            ,
            <given-names>T. J.</given-names>
          </string-name>
          (
          <year>1976</year>
          ).
          <article-title>A complexity measure</article-title>
          .
          <source>Software Engineering, IEEE Transactions on, (4)</source>
          ,
          <fpage>308</fpage>
          -
          <lpage>320</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>[15] http://virtual-labs.ac.in/cse08/</mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          1.
          <string-name>
            <surname>Identify</surname>
          </string-name>
          <article-title>a problem statement, trace the requirements and write unambiguous, correct and consistent SRS</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          2.
          <string-name>
            <surname>Prepare</surname>
          </string-name>
          <article-title>a project plan and estimate effort required for the project</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          3. Identify,
          <article-title>analyze and develop a risk management plan for the potential risks in the project</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          4.
          <article-title>To create a specification of a software artifact intended to accomplish goals</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          5.
          <article-title>To perform exhaustive testing of the code</article-title>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>