Introducing Software Engineering to Computer ... - IEEE Xplore

0 downloads 0 Views 209KB Size Report
Jackson State University [email protected]. Abstract. Software engineering is an important topic computer engineering students should learn at.
Introducing Software Engineering to Computer Engineering Students Gordon W. Skelton Computer Engineering Department Jackson State University [email protected]

Software engineering principles in the C++ courses are limited to the fundamentals of developing applications to meet the requirements of assigned programming problems. Students completing the three course series in computer science experience a small software engineering project which focuses on the use of the object-oriented (OO) paradigm. The object-oriented programming (OOP) course, however, is actually a second semester in C++ where class concepts and advanced syntax are introduced. Though there is an effort to teach OO problem solving, the course does not have a software engineering focus as applied in a more specific software engineering course. Software engineering is traditionally taught in either a computer science or MIS curriculum. This tradition has led to the development of course materials and teaching techniques that reflect applications based on business and web-based applications. Furthermore, such courses often use Java for software engineering projects. Software engineering education in many cases has been less than successful [1]. Teaching software engineering, even in a traditional undergraduate program faces a number of difficulties. Many of the problems identified by Sukhodolshy [2] were recognized during the development of a SE course for computer engineering students. During the spring and summer terms of 2005 software engineering was taught in the domputer engineering department. The spring class was composed of undergraduate computer engineering students, while the summer class was composed of both graduate and undergraduate students. The students, for the most part, had no prior experience in software engineering and were limited in their education to courses in C++ and data structures. There were a few of the students who had studied Java instead of C++. During the spring 2006 semester the course possesses a more software engineering focus. Table 1 presents the enrollment in software engineering during the three semester terms. As can be seen, enrollment in software engineering fell drastically during the summer term.

Abstract Software engineering is an important topic computer engineering students should learn at the undergraduate level. Many traditional software engineering courses focus on webbased and database applications with only limited attention to embedded microprocessor topics. For the computer engineering student that approach is not satisfactory. The course described in this paper focuses on topics important to a computer engineering disciple. The evolution of the course over a three semester period is discussed and key issues related to teaching software engineering to computer engineering students are presented. 1. Introduction In the computer engineering undergraduate and graduate curriculums at Jackson State University (JSU), there are two separate courses in software engineering (SE). These courses are designed to introduce students to the field of software engineering and to help them understand software engineering methods. At JSU software engineering is an elective for both graduates and undergraduates. Undergraduates are required to complete a series of three computer science courses: 1) C++ programming, 2) object-oriented programming (advanced C++) and 3) data structures and algorithms. The data structures course for computer engineering majors also employs the C++ language. Computer engineering students are taught basic assembly language programming in the department’s microprocessor course where embedded programming is used.

0-4244-0169-0/06/$20.00 © 2006 IEEE.

313

software where the hardware was being co-designed and co-implemented simultaneously with the software. Codesign is common with embedded systems development. Chioda [5] addresses the issues surrounding the codevelopment of hardware and software. It is important that students recognize the differences between traditional software engineering and software engineering for embedded systems. Emphasis should be placed on topics which introduce the students to the fundamentals of software engineering and while, at the same time, illustrate how those concepts can be applied to embedded microprocessor applications

Table 1. Enrollment in Software Engineering Semester Spring 2005 Summer 2005 Spring 2006

Enrollment 12 3 8

2. Unique Attributes of a Software Engineering Project for Embedded Systems To develop a software engineering course for the computer engineering discipline there are a number of issues that must be addressed which relate to the content of the course. These issues can be stated in the form of questions. Some of those questions are: •

How does software engineering relate to computer engineering?



What are the elements of software engineering that the computer engineer will face?



How does one build and work with a team where hardware and software design are concerned?



How does one go about identifying the hardware and software requirements for an embedded system?



What aspects of system design are affected by the interdependence of hardware and software co-design?



How should testing be addressed in a computer engineering / software engineering project?



What are the characteristics of embedded systems that are different from traditional nonembedded systems and how do those differences impact on the teaching of software engineering?

3. Course Structure The structure of the software engineering course in JSU’s computer engineering department is evolving over the semesters in which it is being taught. This evolutionary process is inline with The Accreditation Board for Engineering and Technology’s (ABET) attention to continuous curriculum improvement. The initial course, taught in the spring semester of 2005, was impacted by the prior experience of the students in Java. The computer engineering department’s curriculum has solidified and now requires that the 3 computer science course sequence be taught strictly in C++. This change eliminated the confusion brought on by switching languages in the middle of the sequence to Java from C. The first semester the author taught software engineering for the computer engineering department software engineering was introduced strictly by lecture and limited reading assignments given to the students. For the most part, the course consisted of instruction and homework assignments in OOP and the syntax of the C++ language. There was no comprehensive software engineering project for that semester. The summer semester course’s structure centered on teaching the fundamentals of software engineering and included a class project. Unlike the prior semester, programming skills and language syntax were not included in the course content. The students were expected to have had prior experience in actual software development and knew at least one programming language, hopefully C++. Emphasis was placed on software quality and requirements engineering. No particular software engineering model was emphasized, though Boehm’s spiral model [6] was discussed in detail due to its emphasis on risk. The course was composed of lecture, reading assignments and a course project. Since the summer term is slightly shorter than the regular term, the project for the semester was selected for the students. The assignment was designed with two purposes in mind: 1) to give the students practical experience in software engineering, and 2) to instruct the students in the fundamentals of software metrics.

These questions, of course, do not cover all of the critical issues; however, these questions do point out the complexity of integrating software engineering into a computer engineering curriculum. A number of these issues have been addressed in the literature when discussing the development of software for embedded systems. [3] points to the concerns of embedded system development. [4] examines the issues of dependency as it relates to embedded system design and development. In establishing the course content for the department, the focus of the course had to address traditional software engineering content along with the issues of developing

314

The course structure for the spring 2006 semester evolved giving even further attention to computer engineering topics and embedded system development. The course, as it is being structured for the spring 2006 semester, now focuses its attention on embedded systems and software engineering with a detailed semester project. The students are required to employ software engineering methods and to implement their design using a microprocessor and a related development board.

diagrams, and activity diagrams (flowcharts). This set of diagrams meets the requirements in the course in software engineering. Through the use of UML students are taught the importance of organization, documentation, and logical problem solving. These skills are essential in applying engineering principles to software development. The bifurcated summer course contained a lecture component and a major team-centric project. The former incantation of this course, spring 2005, focused less on software engineering and more on C++ and OO programming (OOP) due the aforementioned mix of students with Java experience. Only one team was established in the summer course due to the limited number of students. The students were assigned a semester project that focused on the development of a software engineering metrics system for project management. The students were encouraged to select the metrics to be supported by their system. A second requirement for the project was that it was to support a wireless mobile interface. The students chose to develop that element through the use of the Wireless Application Protocol (WAP) and related software. As with traditional software engineering projects, the students decided to implement a web-based application. A concern for author was that this approach is less computer engineering oriented. Still, even with that issue not addressed, the students were able to develop a very helpful system for project management. In addition, the students learned the importance of software metrics, team building, and project presentation The project focus of the summer term’s course may have been too extensive for students in their first software engineering course. The students, working as a team, dedicated over 100 hours to the project. This time consumed much of their weekends and evenings, particularly with two of the students working fulltime and the third completing her thesis. Due to the limited exposure of the students to metrics and software project management, a considerable amount of their time was dedicated to research and understanding software and project metrics. Their lack of experience with metrics was reflected in the types of metrics they chose for their project. Though the project focused on software engineering and limited metrics, the students developed a limited webbased application that supported the collection of data and the production of the results for each of the five metrics they chose. The use of the web-based aspect of their project, however, violated the principles that have now accepted for the software engineering course, that being, the course should strictly focus on software engineering as applied to computer engineering and embedded systems Even with the limitation of team membership, experience in software engineering and software metrics,

4. Course Content and Textbook Software engineering textbooks attempt to address a broad area of software development with little or no emphasis on topics related to computer engineers and computer engineering applications. The textbook selected for the course was Ian Sommerville’s Software Engineering, 7th ed. [7]. The book, a solid presentation of software engineering, does have limited emphasis on topics related to embedded and real time systems. Pressman’s [8] textbook on software engineering is another practical approach to the subject. A search of existing texts reveals few software engineering textbooks which address embedded systems. Cooling’s text [9] is specific to embedded systems software development. Bell [10] approaches software engineering from a programming perspective. Textbooks, [11], [12], [13], are available that address issues related to software development for embedded systems. Due to the textbook’s limited attention to computer engineering means that the course has to be supplemented with handouts and lectures. This requirement places an additional burden on the course. Embedded systems have far more limited resources than do traditional PC-based systems. Computer engineering students must be exposed to the need for developing requirements that address these limitations. Oftentimes the physical constraints of the hardware prevent a given software solution. In teaching quality software design to computer engineering students it is imperative that the students understand the need for identifying system requirements and for spelling out restrictions. Recognizing the limitations of the hardware allows for the creation of scenarios that aid in creation of reasonable software solutions. The use of scenarios is quite beneficial when developing software for embedded systems [14], [15]. In the evolution of the course, particular attention is being placed on assisting the students in understanding the application of use cases and scenarios to system design. The Unified Modeling Language (UML) is applied to the modeling of these cases and in the design of the system. UML, even without the use of the real time version, supports sequence diagrams, state diagrams, component

315

their project presentation illustrated a fundamental understanding of the software engineering principles. The metrics they implemented were solid; however their system showed a lack of full understanding of the collection of data and analysis for some of the metrics For the spring semester a Freescale HC12 microprocessor and project board was chosen as the development platform. Both Axiom [16] and Wytec [17] produce such a board. Students are provided with the GNU C/C++ compiler and related development tools. They are also introduced to the academic version of the CodeWarrior [18] software toolkit. Students are free to choose either tool for development of their code. Each team member is granted a copy of the software along with each team receiving a microprocessor board and an associated project board. The integration of a 4 X 4 keypad makes the system quite functional for the team project. In addition, Huang [19] has a new textbook that covers the technical elements necessary for programming the processor and using the development board. The teams are presented with a list of potential projects to implement. Early in the semester project teams are formed, projects selected, and initial work begun. To simulate a ‘real’ software project, deadlines are assigned at the beginning of the course with no flexibility from the instructor’s vantage point. As the project evolves, students are faced with the reality of selecting from multiple options: 1) let the schedule slide, 2) reduce the requirements, or 3) increase the man-hours dedicated to the project. Other options like adding more students to the project are considered budget busters and are thereby not allowed. Team consolidation is prohibited as a means by which the project could return to being on schedule.

focused group. Due to this division of effort not all of the students are introduced to software engineering at the same level of detail. Developing a separate software engineering course as an elective allows the student to focus solely on the software aspect of a computer engineering project. In the best case situation, the software engineering course would be taught prior to the student’s senior design course. This desire, however, has not been achieved since software engineering in the computer engineering department has been taught during the senior year, often in the final semester of study, or even at the graduate level.

7. Term Project in Software Engineering The project for the revised software engineering course focuses on software for a microprocessor based system which allows the students to design the software for deployment on a Motorola HC12 microprocessor with an attached 4 X 4 keypad and LCD. Additional capabilities and sensors are the responsibility of the students in designing their project. At the minimum, the students are required to support input from the keypad and have the LCD display results. The project centers on the use of software within an embedded or real-time environment. Students direct their attention on the identification of system requirements, design of the software, and its implementation. The use of UML provides the students with the tools necessary to document the system architecture and the flow of the system. As with traditional software engineering course projects, the students work in teams of 3 or 4 members. Traditional team building concepts are presented to the students, with oversight provided by the instructor to aid the students in managing their time and the distribution of tasks among the team members. Since the students only have limited experience in practical team interaction, it is important to assist them in learning the importance of establishing a team, working together to solve problems, and making certain that each team member has a solid understanding of the vision of the team as related to the problem at hand. Finally, experience has shown that weaker team members often choose to remain on the peripheral of the project. This issue is a concern for the instructor to address. As mentioned earlier, the projects chosen for the course were selected because of their computer engineering emphasis. Potential projects are:

6. Difference between Software Engineering Project and the Senior Design Project The senior design project is a key course in all computer engineering programs. Here the student, often working in a team environment, is responsible for the design and implementation of a hardware project. This project, particularly in the case of robotics, will contain some level of software. The focus, however, is not on the proper design of software but in developing a comprehensive solution to a given problem. The senior design project is often limited in both scope and available time. These limitations, in principle, prevent the students from allocating a large percentage of their time to software engineering. Oftentimes the code is developed as quickly as possible, with much of the students’ time spent getting the hardware component designed and built. The current senior design project includes a fair amount of software. The student teams are divided into two groups: those students directing their attention to the hardware aspect of the project and separate software

• • • •

316

Weather station Automated thermostat Elevator control system Security and alarm system

Additional topics are available that emphasize the importance of the microcontroller and software development.

The use of professional software engineering tools, integrated development environments, real-time operating systems, and different operating system environments are being considered as the development environment is evolving in support of the software engineering course.

8. Student Intern Experiences Contributing to Software Engineering Content

9. Future Developments

Undergraduate and graduate computer engineering students at JSU are encouraged to take summer internships at either another university or governmental laboratory where they are exposed to a wide variety of topics. Many of the students have worked on various projects where they were expected to have already completed coursework in computer programming. During the summer of 2005 six computer engineering students participated in internships. Students completing their internships reported that many of the laboratories used either C or C++ as the language of choice. In addition, Linux and UNIX were reported often as the desired operating system. Focusing on Java and Microsoft Windows may not properly prepare computer engineering students for employment or continuing education at the graduate level. These findings parallel some of the issues concerning software engineering education as report in [20], [21]. Computer engineering curriculums place a considerable amount of emphasis on the design and implementation of hardware solutions. The use of embedded microprocessors and assembly language was, for a number of years, the language of choice for embedded systems, with only limited emphasis on software development in higher level languages like C and C++. This trend, however, has been changing over the years and now more students are employing C / C++ for their computer engineering projects. Students who have participated in summer internships have reported that computer programming, software development, and use of the Linux operating system are three of the more important skills requested when interviewing or working on their internships. These topics are not considered the central focus of a computer engineering program, but are, instead secondary in nature. Our department is concerned with the practical aspect of software engineering as it applies to computer engineering. Recognition of the importance of student experiences with external organizations and governmental agencies is important input into the design of the next generation of the software engineering course. [22] points out that practical experience in software engineering is crucial to successful learning of the topic. Placing emphasis on identifying SE related internships is another means by which the department can expand the knowledge base of its students.

The weaknesses identified in teaching software engineering for computer engineering students centered on the following issues: •

Recognizing the limited experience that the students had in software development projects



Tailoring the course project toward experiences the student would have encountered in a course in embedded microprocessors with languages like C and assembly



Emphasizing the close integration of hardware and software in embedded systems



Examining the issues surrounding the use of formal methods



Spending more time on testing and quality assurance as related to embedded systems development

Research in software engineering should include work focused toward software engineering for those individuals concerned with embedded systems. Today’s focus in the embedded world is to place more emphasis on the use of software and less on the hardware to enhance the configurability and upgradeability of a system. The system may be written in assembly, C, C++, and even JAVA. Undergraduate and graduate students should be given a solid background in software engineering since many companies expect computer engineering students to be proficient in computer programming. Being able to program does not directly translate into problem solving or system design skills, each of which are crucial to success in the computer engineering discipline.

10. Conclusions There are a number of conclusions to draw from the author’s experience in teaching software engineering in a computer engineering department. First, it is important that there be a hands-on project during the semester that reinforces the topics covered in the lectures and assigned readings.

317

Second, the evolution of the course has been from one integrated with C/C++ syntax to traditional software engineering to software engineering for embedded systems. The case studies currently used in the course are more inline with the academic experience of the students. The HC12 microprocessor development kits not only assist in developing a comprehensive semester software engineering project but provide for expanding the students’ knowledge and exposure to embedded systems. Finally, the SE course will be continually enhanced with feedback from the students completing the course and from graduates who are currently working in the industry. As the course evolves software and hardware will also be selected to reflect the state-of-the-art in embedded systems.

[13] Berger, A., Embedded Systems Design: An Introduction to Process, Tools and Techniques, CMP Books, Gilroy, CA, 2001.

11. References

[19] Huang, H., The HCS12/9S12: An Introduction to Software and Hardware Interfacing, Course Technologies, Boston, MA, 2005.

[14] W. T. Tsai, L Yu, et al., Rapid Scenario-based Simulation and Model Checking for Embedded Systems, Software Engineering Applications Conference, 2003. [15] Z. Gu, S. Kodase, et al., “A model-based approach to system level dependency and real-time analysis of embedded software,” Proceedings, IEEE Real-Time Technology and Applications Symposium, 2003, pp. 78-85. [16] Axiom Manufacturing, www.axman.com [17] Wytec, www.evbplus.com [18] CodeWarrior, www.metrowerks.com

[1] G. Karen, “Why do Universities Fail Teaching Software Engineering?”, http://users.actcom.co.il/~choo/lupg/essays/softwareengineering-and-uni.html, 2001.

[20] D .Callahan and B. Perigo, “Educating Experienced IT Professionals by Addressing Industry’s Needs,” IEEE Software, Sept/Oct 2002.

[2] J. Sukhodolsky, “Teaching Software Engineering to Undergraduates,” ISE’03, Quebec, Canada, 2003 [3] B. Boehm, "A Spiral Model of Software Development and Enhancement" IEEE Computer, vol.21, #5, May 1988, pp 61-72.

[21] E. Navarro, A Survey of Software Engineering Educational Delivery Methods and Associate Learning Theories, University of California, Invine, ISR Technical Report #UCI-ISR-05-0, April 2005.

[4] P. Koopman, Jr., “Embedded System Design Issues (the Rest of the Story,” Proceedings of the International Conference on Computer Design, ICCD 96.

[22] M. Gnatz,, L. Kof, et al., “A Practical Approach of Teaching Software Engineering,” Proceedings, CSEET’03, 2003.

[5] J. Knight, “Dependency of embedded systems,” Proceeding, International Conference on Software Engineering (ICSE), 2002. [6] M. Chioda, P. Giusto, et al., “Hardware-Software Codesign of Embedded Systems,” IEEE Micro, August 1994, pp. 26-36. [7] Sommerville, I., Software Engineering 7th Ed., Pearson, Boston, MA, 2004 [8] Pressman, R., Software engineering: A Practitioner’s Approach, 4th Ed., McGraw-Hill, New York, N.Y., 2005. [9] Cooling, J., Software Engineering for Real-Time Systems, Boston, Addison-Wesley, Boston, MA, 2003. [10] Bell, D., Software Engineering: A Programming Approach, 3rd Ed, Addison-Wesley, Boston, MA, 2000. [11] Barr, M., Programming Embedded Systems in C and C++, Sebastopol, CA, O’Reilly and Associates, 1999. [12] Simon, D., An Embedded Software Primer, Boston, MA, Addison-Wesley, 1999.

318

Suggest Documents