Open Education (OpenEd) will be an on going project to develop educational resources to relate the theory of computing to the practice of computing. Resources will be developed using open source software and at the same time relate these to commercial products. For example an area of interest is the Mono project. When developing examples for Mono consideration will be given to the .NET framework and cross platform development.
The resources will try to be language and platform neutral, one aim being overtime to develop the same examples in different environments and compare the differences.
The general strucuture of the project will be based around the IEEE Computer Society's and ACM's curriculum for computing. Initially the project will concentrate on the Computer Science Volume and the Software Engineering Volume.
NOTE: The area under active devlopment at the moment is the MS 70-536 exam.
The content of the project will be licensed under the GNU Free Documentation License (FDL).
The licensing of code samples will primarily use GNU GPL version 2.
Courses will target open source platforms with cross platform refeneces to proprietry platforms.
The initial aim of the project is to produce a number of labs. A lab will be a guided exercise with hands-on examples to illustrate the points being made. The labs under active development are indicated below.
Example Labs:
Resources are split into primary and secondary. A primary resource is a resource available under an open licence and does not require any form of subscription. A secondary resource requires some form of subscription or purchase. Secondary resources will be replaced if suitable primary resources become available.
First Steps in the Verified Software Grand Challenge
NOTE: This section will be moved into its own area.
There is considerable emphasis on TDD in the software community, yet when it comes to the details the design of tests seems to be fairly adhoc. At the most rigourous end of software development are formal methods and though these promise great improvements in software quality and reliability they are not yet readily applied. Core to formal methods is the concept of invariants, pre-conditions and post-conditions. To apply this concept consistently means that for every method call during testing, the invariant and pre-condition must be tested before executing the method. While the invariant and post-conition must be tested after the methods executes:
This may seem like an onerous task, but if interfaces are used the Before Execute After Testing can be implemented in a wrapper class. Using the normal example to start with consider the following interface definition for a stack:
public interface IStack {
bool IsEmpty { get; }
void Push (object o);
object Pop ();
}
The folliwng BEAT class can be defined:
public class IStackBEAT : IStack {
private IStack stack;
private IStack before;
public IStackBEAT (IStack stackToTest)
{
stack = stackToTest;
}
bool IStack.IsEmpty
{
get { return stack.IsEmpty; }
}
void IStack.Push (object o)
{
AssertInvariant ();
AssertPushPreCondition (o);
CopyStack ();
stack.Execute
AssertInvariant ();
AssertPushPostCondition (o);
}
object IStack.Pop ()
{
AssertInvariant ();
AssertPopPreCondition ();
CopyStack ();
object o = stack.Execute
AssertInvariant ();
AssertPopPostCondition(o);
return o;
}
private void CopyStack ()
{
before = stack.Clone ();
}
private void AssertInvariant ()
{
Assert.IsTrue (stack.IsEmpty || !satck.IsEmpty);
}
private void AssertPushPreCondition (object o)
{
Assert.IsTrue (true);
}
private void AssertPushPostCondition (object o)
{
Assert.IsFalse (stack.IsEmpty);
}
private void AssertPopPreCondition ()
{
Assert.IsFalse (stack.IsEmpty);
}
private void AssertPopPostCondition (object o)
{
Assert.IsTrue (true);
}
}
© 2008 Novell, Inc. All Rights Reserved.