Line

Software Engineering Project
for AERSP 440

Prof. L. N. Long , Room 233 Hammond Bldg.

TA: Ms. Oranuj Janrathitikarn, , Room 234 Hammond Bldg.

Aerospace Engineering
The Pennsylvania State University

Line

This is under development... so students should check back often.

The course will have two parallel activites:

  1. traditional lectures, HW, and quizzes and
  2. the project.
Note that you will most likely need to study the material required for your group before I present it in class.

The project for this course will be the development of a software system for a mobile robot. Mobile robots are beneficial in many applications especially for interplanetary exploration and operation in extreme environments. A radio-controlled truck with an on-board computer will be controlled by a desktop computer via wireless LAN through the internet [Ref. 1]. Therefore, the truck will be able to operate remotely anywhere in the world with a wireless internet connection coverage. In addition, the truck will have an onboard camera to display the real-time environment.
We will provide the hardware (we only have one of these, and cannot handout to each team!): Each team will be given a servo control board and two servos for preliminary tests.

At the end of the semester, the truck will be tested in a remote environment and you will attempt to find several objects in the field (e.g. 3 fake landmines) as fast as possible. If you run over a landmine, your test will be over.

The students will control the robot from the Penn State campus. Dr. Long will take the robot to Penn State's Foundry Park for the test. (we will ask if we can use the Mars Yard at JPL or the Army's Aberdeen Proving Grounds but we cannot count on this).


LNL at JPL's Mars Yard in 2008

The project evaluation will focus on the quality of the software as well as the documentation, team communications, and final test. This is not a programming project, it is a software engineering system project.

This course project is designed to:

  1. Provide hands-on experience in software engineering through the development of a relatively small software system for a mobile robot;
  2. Simulate the real working environment in a large software company by having the students in the class work together as a team. Each student will work in a small group functioning as a part of a software development model. The instructor will be a customer who indicates the system needs;
  3. Emphasize the communication and collaboration skills among small groups in the software development model which are the most crucial skills in developing a large and complex software systems.

There will be two completely separate teams (blue and white), competing against each other. Students on each of these teams will be separated into six small groups according to the V-Life cycle software engineering model based on their interest:

  • Requirements
  • Design
  • Coding
  • Testing
  • Validation
  • Verification

As shown in the figure below (but keep in mind this figure could be drawn in many different ways and there could be many more interconnections shown).

From this figure each group can see the other groups that it must interact with, for example the Design Group must interact with the Requirements, Testing, and Coding Groups..

Each of these sub-groups will have roughly four-five people each. After the customer needs have been discussed, each group will work together to produce the software system, design, and documentation according to the software engineering approaches [Ref. 2, 3]. The communication log between each group must be recorded via Penn State Wiki (https://wikispaces.psu.edu). Every week, each group must give a brief oral presentation about their progress in the class. At the end of the software development cycle, the final product will be demonstrated and the report must be submitted.

Each group must follow the life-cycle model, and cannot start their main task until the group before it gives them their document. (e.g. Coding cannot start until the Design Group gives them the Design).

Each group needs to read the appropriate sections of Refs 2 - 4, but I have tried to briefly summarize the roles below (mainly taken from SWEBOK).

ROLES OF EACH GROUP:

  • REQUIREMENTS (Chap. 6 - 10 of textbook, Ref. 3 , and Ref. 4 ):
      The Software Requirements Area is concerned with the elicitation, analysis, and specification of software requirements. It is widely acknowledged within the software industry that software engineering projects are critically vulnerable when these activities are performed poorly. Software requirements express the needs and constraints placed on a software product that contribute to the solution of some real-world problem.

      An essential property of all software requirements is that they be verifiable. It may be difficult or costly to verify certain software requirements.

      Functional requirements describe the functions that the software is to execute; for example, formatting some text or modulating a signal. They are sometimes known as capabilities. Nonfunctional requirements are the ones that act to constrain the solution. Nonfunctional requirements are sometimes known as constraints or quality requirements.

      Some requirements represent emergent properties of software that is, requirements which cannot be addressed by a single component, but which depend for their satisfaction on how all the software components interoperate.

      Software requirements should be stated as clearly and as unambiguously as possible, and, where appropriate, quantitatively. It is important to avoid vague and unverifiable requirements.

      Requirements elicitation is concerned with where software requirements come from and how the software engineer can collect them. It is the first stage in building an understanding of the problem the software is required to solve.

  • DESIGN (Chap. 11 - 16 of textbook, Ref. 3 , and Ref. 4 ):
      Design is defined as both the "process of defining the architecture, components, interfaces, and other characteristics of a system or component" and "the result of that process". Viewed as a process, software design is the software engineering life cycle activity in which software requirements are analyzed in order to produce a description of the softwares internal structure that will serve as the basis for its construction. More precisely, a software design (the result) must describe the software architecture that is, how software is decomposed and organized into components and the interfaces between those components. It must also describe the components at a level of detail that enable their construction.

      There are two parts to design:

      • Architectural design: Architectural design describes how software is decomposed and organized into components (the software architecture)
      • Detailed design: Detailed design describes the specific behavior of these components. The output of this process is a set of models and artifacts that record the major decisions that have been taken.

      Many notations and languages exist to represent software design artifacts. Some are used mainly to describe a designs structural organization, others to represent software behavior. These can be static or dynamic descriptions. Examples of static dscriptions include: class diagrams, component diagrams, structure charts, entity-relationship diagrams, and others. Examples of dynamic descriptions include: activity diagrams, data flow diagrams, flowcharts, sequence diagrams, pseudocode, and others.

  • CODING (Chap. 17 - 21 of textbook, Ref. 3 , and Ref. 4 ):
      The term software coding (or construction) refers to the detailed creation of working, meaningful software. Some of the key desirable traits are:
      • Minimal complexity
      • Anticipate change
      • Construct for testing and verification
      • Use standards
      The first three concepts apply to design as well as to construction.

      Coding cannot start until the Design Group finishes their Design document. And the coding should be fairly straight-forward, once the design is completed.

  • TESTING (Chap. 23 of textbook, Ref. 3 , and Ref. 4 ):
      Testing is an activity performed for evaluating software quality, and for improving it, by identifying defects and problems. Software testing consists of the dynamic verification of the behavior of a program on a finite set of test cases, suitably selected from the usually infinite executions domain, against the expected behavior.

      It is currently considered that the right attitude towards quality is one of prevention: it is obviously much better to avoid problems than to correct them. Testing must be seen, then, primarily as a means for checking not only whether the prevention has been effective, but also for identifying faults in those cases where, for some reason, it has not been effective.

      Testing theory warns against ascribing an unjustified level of confidence to a series of passed tests. Unfortunately, most established results of testing theory are negative ones, in that they state what testing can never achieve as opposed to what it actually achieved. The most famous quotation in this regard is the Dijkstra aphorism that “program testing can be used to show the presence of bugs, but never to show their absence.” The obvious reason is that complete testing is not feasible in real software. Because of this, testing must be driven based on risk and can be seen as a risk management strategy.

      Unit testing verifies the functioning in isolation of software pieces which are separately testable. Depending on the context, these could be the individual subprograms or a larger component made of tightly related units. Integration testing is the process of verifying the interaction between software components. System testing is concerned with the behavior of a whole system.

  • VERIFICATION (Chap. 22 of textbook, Ref. 3 , and Ref. 4 ):
      Verification is an attempt to ensure that the product is built correctly, in the sense that the output products of an activity meet the specifications imposed on them in previous activities, i.e. "are we building the product right?" Are we meeting the Requirements?

      "Software Verification and Validation (V&V) is a disciplined approach to assessing software products throughout the product life cycle. A V&V effort strives to ensure that quality is built into the software and that the software satisfies user requirements" (IEEE-1059-93).

      Both the verification process and the validation process begin early in the development or maintenance phase. They provide an examination of key product features in relation both to the products immediate predecessor and to the specifications it must meet.

  • VALIDATION (Chap. 22 & 24 of textbook, Ref. 3 , and Ref. 4 ):
      Validation is used to make we "are building the right product." That is, are we meeting the customers needs?

      "Software Verification and Validation (V&V) is a disciplined approach to assessing software products throughout the product life cycle. A V&V effort strives to ensure that quality is built into the software and that the software satisfies user requirements" (IEEE-1059-93).

      Validation is an attempt to ensure that the right product is built, that is, the product fulfills its specific intended purpose. Both the verification process and the validation process begin early in the development or maintenance phase. They provide an examination of key product features in relation both to the products immediate predecessor and to the specifications it must meet.

STANDARDS:

    Each group will need to address and follow the appropriate standards documents.

SCHEDULE:

STUDENTS AND GRADING:

  • The class will be divided into two teams (the "Blue" and the "White" teams), so that at the end of the semester we will have two sets of all the documents and two sets of software. We will have a competition to see which teams system works best at the end of the semester. So there will be some ethics and professionalism required to keep the projects separate and the ideas and documents secure.

  • Each student needs to decide which group they want to be in, and I will try to honor those requests. Each student needs to give me (on friday, Jan. 23) a list of their top three group choices. [the group and teams have been formed, and listservs (440blue@lists.psu.edu and 440white@lists.psu.edu) have been established for each team. All students should have received an email notification.]

  • Grading will be based upon team documents, record keeping, interactions with other teams, oral presentations, and final competition.

REFERENCES:

  1. Long, L.N., Sharma, A., and Souliez, F., " Client-Server Java Programming for Wireless Mobile Robots," AIAA Paper 2003-0459, AIAA Aerospace Sciences Meeting, Reno, NV, Jan., 2003.

  2. Sommerville, I., Software Engineering, 8th Edition.

  3. Software Engineering Body of Knowledge (SWEBOK)

  4. Gentle Introduction to Software Engineering Software Technology Support Center, USAF, Hill Air Force Base

  5. Others...





Return to Course Syllabus

Line
Maintained by: Prof. L. N. Long, 233 Hammond Bldg.
source : http://www.personal.psu.edu/lnl/440pub/project/
Copyright, 2008
Last modified: Wednesday, 15-Apr-2009 13:08:42 EDT
Hits since Jan. 18, 2009
Line