Delivering a Course in Software Engineering: A Hands On Approach Deepak Dahiya
Delivering a Course in Software Engineering: A Hands On Approach Deepak Dahiya Department of Computer Science & IT Jaypee University of Information Technology Solan, India
[email protected] doi: 10.4156/jcit.vol5.issue5.10
Abstract In teaching software engineering, it is a major challenge to integrate applied methodology and theory into the practice of software development. Today teaching a course in software engineering involves a theoretical approach with white board and doing a project at the end of the course. Teaching Software engineering as a course involves many disciplines and requires delivering lectures accompanied by lecture demos and hands on lab sessions to accompany individual constituent topics or areas that form the bricks and mortar of this course. Only when the bricks and mortar of software engineering have delivered a solid foundation, is it then the software engineering as a course will be delivered in a true and meaningful sense. This paper presents a method to teach Software Engineering using the applied approach that the author designed and successfully used.
Keywords: Software Engineering, Teaching, Software Process Model, Methodology and Project 1. Introduction In teaching software engineering, it is a major challenge to integrate applied methodology and theory into the practice of software development instead of learning concepts and methodologies as abstract ideas. Students often regard the methods and theories taught in software engineering courses as abstract, academic concepts. Without experiencing their practical impact on realistic programs, students rarely develop a deep understanding or appreciation of important ideas in software engineering [1]. Today software engineering is not only taught as a course at the undergraduate or graduate level but many programmes in software engineering are run offering specializations. The curriculum guidelines for undergraduate degree programs in software engineering are provided by IEEE Computer Society and ACM under the title SE2004 (Software Engineering 2004 Volume) [2]. As a general case, the course delivery involves a theoretical teaching without any concrete hands on implementations. In this approach whiteboard and LCD supplement the teaching. In between the lecture sessions, quizzes, tests may be given that form the evaluation components in this kind of theoretical teaching. In a few other cases, an individual project or a group project need to be completed at the end. Here, the students end up developing and spending considerable time on coding using a database and a graphical user interface (GUI) or a programming language front end (in some cases, a web server may also be involved for web applications projects). Software Engineering courses often teach about coding and managing large projects - projects that integrate many different computer science disciplines under one umbrella. A good software engineering project should ideally bring together not just basic software engineering principles, but also knowledge and coding acquired in areas such as algorithms, user interfaces, databases and networking [3]. Only in a few cases, is the course delivery organized with a hands-on teaching approach where you learn and apply before moving on to the next concept to be taught. Use of actual software tools to substantiate implementation demos for each topic is rarely a case.
2. Existing Roadmap for Software Engineering: Theoretical with Project Approach
92
Journal of Convergence Information Technology Volume 5, Number 5, July 2010 Most universities teach at least one Software Engineering course to their undergraduates, but not all of them achieve the desired results. A common perceived feedback from human resource managers of software companies is “Frequently, we interviewed candidates who were expected to be hired directly into application development. Most of them were unaware of the tools that software projects employ and they consist of many different roles, including technical support, testing, configuration, management, and technical writing”. Each of these roles typically requires or benefits from a software engineering education. Today teaching a course in software engineering involves a theoretical approach with white board and a project at the end of the course. This approach is flawed in the sense that it delivers nothing to apply after the learning and course delivery is complete. Teaching Software engineering as a course involves many disciplines and requires actual demos and hands on lab sessions to accompany individual constituent topics or areas that form the bricks and mortar of this course. Only when the bricks and mortar of software engineering have delivered a solid foundation, it is then the software engineering as a course will be delivered in the true and meaningful sense. Technically, it may seem quite difficult to conduct hands on demos in the 40 – 45 lectures that may be allotted for the course to be completed in a semester with three hours of teaching allotted per week. The author was recently invited to deliver a software engineering course at one of the well known deemed university in Jaipur (India) to the engineering degree students of computer science. Being a deemed university the syllabus flexibility was there to partially tailor the software engineering curriculum with the current trends that would deliver a good punch to this innovative and hands on mode of course delivery by integrating lecture and lecture demos (these are not lab sessions) together in the same lecture duration of 60 mins. The syllabus initially made available comprised of the standard topics:
Introduction to Software Engineering Software Product and Software Process Models Traditional Requirements and Design Modeling Object Oriented Design and Modeling Software Architecture Component based Software Engineering User Interface Software Verification, Validation & Testing Software Reliability and Cost Estimation Software Project Management
The prescribed textbooks and reference books comprised of [4 - 19].
3. Adopted Roadmap: Teaching Software Engineering with Lecture Demos In today’s software industry a software engineer is not only expected to successfully cope with technical challenges, but also to deal with non-technical issues arising from difficult project situations. These issues typically include understanding the customer’s domain and requirements, working in a team, organizing the division of work, and coping with time pressure and hard deadlines [20]. Thus, teaching Software Engineering not only requires studying theoretical concepts from text books, but also providing students with the experience of typical non-technical issues in a software project that can be imparted by sharing project experiences in the form of stories and analogies and though case studies. This also implies that a teacher with both academic and a ongoing industry experience (here what I mean, is short industry sabbaticals spent with software houses / industrial research centres after every few years of academic years) is a true fit to deliver this course. The class strength was of 95 students. Our approach allowed for realistic experience with open source / commercial industrial software tools and technologies and enable direct application of theory and methodology with lecture demos to practical software engineering. As a minor flexibility to modify
93
Delivering a Course in Software Engineering: A Hands On Approach Deepak Dahiya syllabus was available, keeping the overall syllabus framework intact significant changes were made in the mode of course delivery. Alongside, a study was carried out on the tools and technologies currently in use in the software industry for the current topics included in the syllabus. For instance, software methodologies more prevalent today are Agile Modeling, Aspect Oriented Methodology and Service Oriented Architecture while in the frameworks Java EE, .NET, Spring were in demand. Inserting the methodologies and frameworks in the lecture demos (again it is not lab sessions) components at the right place would provide a definite push in motivating the minds towards horning the desired hands on skills with the right imparted input at the right time. A partial listing of the table 1 below depicts the breakup of the course contents to integrate lecture delivery with the lecture demos (The practical components here were designed using the Java Enterprise Edition based environment using Eclipse platform. However, the same environment can be tailored to any other framework like .NET from Microsoft or any other framework). This teaching plan was substantiated with the regular evaluation components like, quizzes, case studies shown in Table 2 for sharing industry experience in the lectures, regular lab sessions (separate from the lecture demos) where the students actually carried out their work assignments. The capstone module at the end laid the foundation to further firm up the foundations for a complete software project implementation. Lastly, tests and end semester examination of 3 hours formed the remaining evaluation backbone for testing the student overall performance. The figures (1-3) below shows the snapshots of the lecture demos used for some of the topics like structured modeling, object oriented modeling and software testing during course delivery: Table 1: A partial listing of course contents integrating lectures with lab demos Lecture
Lecture Theory Component Introduction to Software Engineering
Lecture Demo Component
1–2 Software Product and Software Process Models
3– 6
7-9
10 - 12
Structured Analysis and Design Modeling
Object Oriented Analysis and Design Modeling
Required Software tools installation and Configuration [Class Discussion – 1] Case Study – 1 (SSAD modeling) (Tool: Any CASE tool available) Show SRS sample docs. Case Study – 2 (UML Modeling ) [Assignment - 2] (Tool: Any CASE tool available)) Show Use Case sample docs 2-3-n tier Web Applications [Class Discussion - 2] (Tools: any web server + scripting languages like JSP / ASP / Servlets and any database)
Software Architecture
Show design specs sample templates ………….
17 - 18
………………………..
……………………………….
Software Verification, Validation & Testing
Writing and Executing Test Cases / Suite (Tool: JUnit or any other tool) Show test case sample templates.
94
Journal of Convergence Information Technology Volume 5, Number 5, July 2010
19 - 20
Aspect Oriented Software Design and Development (AOSDD)
AOP Examples. (Tools: Eclipse, AspectJ) Using Java EE / .NET Framework
21 - 23
24 – 26
(Tools: EJB / Java EE / Spring / Hibernate or .NET specific tools etc)
Application Frameworks
Using Test Driven Development (TDD)
Agile Software Development
(Tools: JSP / EJB / J2EE / Spring / Hibernate etc) 27 – 29
Software Project Management
……………
……………….. Capstone Module (Software Engineering Project)
40 - 42
Developing Software Project Plan (Tool: Microsoft Project 2007) ……………
[Different articles / case studies / research papers should form the reading material for this capstone module.]
A Comprehensive Software Project Implementation using a particular methodology / concepts / tools / technologies covered in this course
Table 2: Different types of evaluation components Weightage Evaluation Component (%age) Case Study - 1 5 Class Test 25 Case Study - 2 5 Project 15 End Term Evaluation 50
Fig 1: Eclipse / JUnit Snapshot on software testing demo
95
Delivering a Course in Software Engineering: A Hands On Approach Deepak Dahiya
Fig 2: Designer CASE Tool Sapshot on Structured Modeling Demo
Fig 3: Rational Rose CASE Tool Sapshot on Object Oriented Modeling Demo
4. Feedback Results and Conclusion In teaching software engineering, it is a major challenge to integrate applied methodology and theory into the practice of software development instead of learning concepts and methodologies as abstract ideas. Students often regard the methods and theories taught in software engineering courses as abstract, academic concepts. Without experiencing their practical impact on realistic scenarios, students rarely
96
Journal of Convergence Information Technology Volume 5, Number 5, July 2010 develop a deep understanding or appreciation of important ideas and actual implementations in software engineering. At the end of the course, the students were asked on their feedback. The feedback received for this course was excellent as they learnt by what they heard and saw not just what they heard. Further, they stated that they were more prepared to relate the application of theory concepts with the right tool application which indirectly laid the foundation to explore similar thinking in other lab based courses in other disciplines of computer science like Databases, Operating Systems or Embeded systems which also involve integration of theory with application. The students were more prepared and confidant to take up internships or summer projects after taking the software engineering course imparted using the lecture demo approach. The bottleneck that was observed while imparting this lecture demo based learning was that, the author had to move in the classroom in advance to get the system setup for the lecture and had to work within the limited time constraint. However, overall the benefits of this approach far outshined the minor bottlenecks of planning and scheduling of the lecture.
5. Future RoadMap The author is now delivering an advanced course in software engineering for the Masters in Technology students of computer science and is looking forward to refine this teaching methodology using lecture demos further for students opting for a dissertation in software engineering by introducing theory and implementation integrated project / research work spread over a duration of two semesters.
6. Acknowledgements LNMIIT Jaipur where the author delivered a course in software engineering to third year computer science students of BTech degree. Prof. Dheeraj Sanghi, Director LNMIIT Jaipur for the excellent support provided in delivery of this software engineering course.
7. References [1] David Evans, "Teaching Software Engineering Using Lightweight Analysis", 2001, http://www.cs.virginia.edu/~evans/pubs , Accessed Jan 31, 2010. [2] http://sites.computer.org/ccse/, Accessed May 10, 2010. [3] Kajal Claypool and Mark Claypool, “Teaching Software Engineering Through Game Design” Annual Joint Conference Integrating Technology into Computer Science Education Proceedings of the 10th annual SIGCSE conference on Innovation and technology in computer science education , 2005 , Caparica, Portugal [4] R.S. Pressman, “Software Engineering: A Practitioner's Approach”, 6th Edition, McGraw Hill, 2006 [5] Ian Sommerville, “ Introduction to Software Engineering”, 8th Edition, Addison-Wesley, 2007 [6] Len Bass, “Software Architecture in Practice”, 2nd Edn., Addison Wesley, 2003 [7] Allamaraju, “ Professional Java Server Programming”, Apress, 2004 [8] Eric Gamma, “Design Patterns: Elements of Reusable OO Software”, 1994 [9] James Goodwill, “Professional Jakarta Struts”, John Wiley, 2004 [10] Ed Roman, “Mastering Enterprise Java Beans”, Wiley, 2005 [11] Dirk Krafzig, Karl Banke, Dirk Slama, “Enterprise Service Oriented Architecture”, Prentice Hall, 2004 [12] Russel Miles, “AspectJ Cookbook”, O’Reilly, 2004 [13] Craig Walls, Ryan Breidenbach, “ Spring in Action”, Manning, 2008 [14] John Hunt, “Agile Software Construction”, Springer, 2006 [15] Rod Johnson, “ Professional Java Development with the Spring Framework”, John-Wiley, 2005
97
Delivering a Course in Software Engineering: A Hands On Approach Deepak Dahiya [16] Booch, Jacobson, Rmbaugh, “ UML User’s Guide”, 2nd Edn., Addison Wesley, 2005 [17] Albert Lulushi, “Inside Oracle Designer 2000”, Oracle Press Series, 1997 [18] Oracle Designer http://www.oracle.com/technology/documentation/index.html, Accessed Jan 31, 2010 [19] Whitten & Bentley, ‘’Systems Analysis & Design Methods’’, 7th Edn, McGraw Hill, 2007 [20] Michael Gnatz, Leonid Kof, Franz Prilmeier and Tilman Seifert, “A Practical Approach of Teaching Software Engineering”, IEEE Proceedings of the 16th Conference on Software Engineering Education and Training (CSEET’03), 2003, Madrid, Spain.
98