An increasing number of institutions require software engineering as part of their computing curriculum. Technical managers and hiring personnel of many software development companies cite familiarity with software engineering principles among the top skills required for entry-level computing positions. Furthermore, technical managers and hiring personnel often consider experience with real-world group projects to be a necessary part of the computing background of prospective new hires. These conclusions are based on systematic discussions with technical and human resources personnel at 13 large Midwestern companies (50+ developers) over the past seven years (J. Beck, unpublished data, 2001–2008). Unfortunately, many computing students never benefit from the experience of a real project during their undergraduate studies. The experiences of many students are limited to toy textbook problems assigned to small groups, which means they miss out on a vitally important part of their computing education. Three areas of particular concern for providing students with class projects that incorporate real-world hurdles within the classroom are:
In a junior- or senior-level undergraduate software engineering course that uses real-world projects for real clients, different parts of a project are inherently unequal in difficulty, time requirements, and desirability. A perennial problem is assigning portions of the project to student teams equitably. Fair division is a highly effective strategy for making an equitable, proportional, and envy-free assignment of tasks and in serving as the basis for fair grading of assignments which vary in difficulty, desirability, and time requirements.
Microarrays enable comparative analyses of gene expression on a genomic scale, however these experiments frequently identify an abundance of differentially expressed genes such that it may be difficult to identify discrete functional networks that are hidden within large microarray datasets. Microarray analyses in which mutant organisms are compared to nonmutant siblings can be especially problematic when the gene of interest is expressed in relatively few cells. Here, we describe the use of laser microdissection microarray to perform transcriptional profiling of the maize shoot apical meristem (SAM), a ~100-μm pillar of organogenic cells that is required for leaf initiation. Microarray analyses compared differential gene expression within the SAM and incipient leaf primordium of nonmutant and narrow sheath mutant plants, which harbored mutations in the duplicate genes narrow sheath1 (ns1) and narrow sheath2 (ns2). Expressed in eight to ten cells within the SAM, ns1 and ns2 encode paralogous WUSCHEL1-like homeobox (WOX) transcription factors required for recruitment of leaf initials that give rise to a large lateral domain within maize leaves. The data illustrate the utility of laser microdissection-microarray analyses to identify a relatively small number of genes that are differentially expressed within the SAM. Moreover, these analyses reveal potentially conserved WOX gene functions and implicate specific hormonal and signaling pathways during early events in maize leaf development.
An interdisciplinary undergraduate research project in bioinformatics, jointly mentored by faculty in computer science and biology, has been developed and is being used to provide top-quality instruction to biology and computer science students. This paper explains the benefits of such a collaboration to computer science students and to the computer science discipline. Specific goals of the project include increased recruitment of students into computer science and increased retention within the discipline. The project is also intended to be particularly attractive to women students.
All above-ground plant organs are derived from shoot apical meristems (SAMs). Global analyses of gene expression were conducted on maize (Zea mays L.) SAMs to identify genes preferentially expressed in the SAM. The SAMs were collected from 14-day-old B73 seedlings via laser capture microdissection (LCM). The RNA samples extracted from LCM-collected SAMs and from seedlings were hybridized to microarrays spotted with 37 660 maize cDNAs. Approximately 30% (10 816) of these cDNAs were prepared as part of this study from manually dissected B73 maize apices. Over 5000 expressed sequence tags (ESTs) (about 13% of the total) were differentially expressed (P < 0.0001) between SAMs and seedlings. Of these, 2783 and 2248 ESTs were up- and down-regulated in the SAM, respectively. The expression in the SAM of several of the differentially expressed ESTs was validated via quantitative RT-PCR and/or in situ hybridization. The up-regulated ESTs included many regulatory genes including transcription factors, chromatin remodeling factors and components of the gene-silencing machinery, as well as about 900 genes with unknown functions. Surprisingly, transcripts that hybridized to 62 retrotransposon-related cDNAs were also substantially up-regulated in the SAM. Complementary DNAs derived from the LCM-collected SAMs were sequenced to identify additional genes that are expressed in the SAM. This generated around 550 000 ESTs (454-SAM ESTs) from two genotypes. Consistent with the microarray results, approximately 14% of the 454-SAM ESTs from B73 were retrotransposon-related. Possible roles of genes that are preferentially expressed in the SAM are discussed.
Through a multi-university and interdisciplinary project we have involved undergraduate biology and computer science research students in the functional annotation of maize genes and the analysis of their microarray expression patterns. We have created a database to house the results of our functional annotation of >4400 genes identified as being differentially regulated in the maize shoot apical meristem (SAM). This database is located at http://sam.truman.edu and is now available for public use. The undergraduate students involved in constructing this unique SAM database received hands-on training in an intellectually challenging environment, which has prepared them for graduate and professional careers in biological sciences. We describe our experiences with this project as a model for effective research-based teaching of undergraduate biology and computer science students, as well as for a rich professional development experience for faculty at predominantly undergraduate institutions.
It has been demonstrated that an undergraduate women's computer science support group can provide significant benefits to female CS students. It can be difficult for students to establish such a group without institutional support. We successfully established a thriving, self-sustaining support group with a modest initial outlay of time and money. This program serves as a model and template to help other small to mid-sized undergraduate departments accomplish the same.
A number of the knowledge areas in the joint ACM IEEE-CS software engineering computing curricula involve learning about or using a version management system. A version management system can also address several important topics in a software engineering course not covered in the computing curricula. Such a system can facilitate the logistics of a team-based software engineering course project to enhance the realism and efficacy of the project. An argument is made for a specific version management system, CVS. Details of how CVS can be configured for use in a software engineering course to achieve these benefits are presented.
Interface slicing is a new tool which was developed to facilitate reuse-based software engineering, by addressing the following problems, needs, and issues: (1) size of systems incorporating reused modules; (2) knowledge requirements for program modification; (3) program understanding for reverse engineering; (4) module granularity and domain management; and (5) time and space complexity of conventional slicing. The definition of a form of static program analysis called interface slicing is addressed.
Interface slicing is a tool which was developed to facilitate software engineering. As previously presented, it was described in terms of its techniques and mechanisms. The integration of interface slicing into specific software engineering activities is considered by discussing a number of potential applications of interface slicing. The applications discussed specifically address the problems, issues, or concerns raised in a previous project. Because a complete interface slicer is still under development, these applications must be phrased in future tenses. Nonetheless, the interface slicing techniques which were presented can be implemented using current compiler and static analysis technology. Whether implemented as a standalone tool or as a module in an integrated development or reverse engineering environment, they require analysis no more complex than that required for current system development environments. By contrast, conventional slicing is a methodology which, while showing much promise and intuitive appeal, has yet to be fully implemented in a production language environment despite 12 years of development.
This research concerns program slicing which is used as a tool for program maintainence of software systems. Program slicing decreases the level of effort required to understand and maintain complex software systems. It was first designed as a debugging aid, but it has since been generalized into various tools and extended to include program comprehension, module cohesion estimation, requirements verification, dead code elimination, and maintainence of several software systems, including reverse engineering, parallelization, portability, and reuse component generation. This paper seeks to address and define terminology, theoretical concepts, program representation, different program graphs, developments in static slicing, dynamic slicing, and semantics and mathematical models. Applications for conventional slicing are presented, along with a prognosis of future work in this field.
For a component industry to be successful, we must move beyond the current techniques of black box reuse and genericity to a more flexible framework supporting customization of components as well as instantiation and composition of components. Customization of components strikes a balanced between creating dozens of variations of a base component and requiring the overhead of unnecessary features of an 'everything but the kitchen sink' component. We argue that design and instantiation of reusable components have competing criteria - design-for-use strives for generality, design-with-reuse strives for specificity - and that providing mechanisms for each can be complementary rather than antagonistic. In particular, we demonstrate how program slicing techniques can be applied to customization of reusable components.
This topic is covered in three sections. The first section explores some of the architectural ramifications of extending the Eichmann/Atkins lattice-based classification scheme to encompass the assets of the full life cycle of software development. A model is considered that provides explicit links between objects in addition to the edges connecting classification vertices in the standard lattice. The second section gives a description of the efforts to implement the repository architecture using a commercially available object-oriented database management system. Some of the features of this implementation are described, and some of the next steps to be taken to produce a working prototype of the repository are pointed out. In the final section, it is argued that design and instantiation of reusable components have competing criteria (design-for-reuse strives for generality, design-with-reuse strives for specificity) and that providing mechanisms for each can be complementary rather than antagonistic. In particular, it is demonstrated how program slicing techniques can be applied to customization of reusable components.
Some of the architectural ramifications of extending the Eichmann/Atkins lattice-based classification scheme to encompass the assets of the full life-cycle of software development are explored. In particular, we wish to consider a model which provides explicit links between objects in addition to the edges connecting classification vertices in the standard lattice. The model we consider uses object-oriented terminology. Thus, the lattice is viewed as a data structure which contains class objects which exhibit inheritance. A description of the types of objects in the repository is presented, followed by a discussion of how they interrelate. We discuss features of the object-oriented model which support these objects and their links, and consider behavior which an implementation of the model should exhibit. Finally, we indicate some thoughts on implementing a prototype of this repository architecture.
I show that homotopy-everything H-spaces (Boardman-Vogt [2]) can be de-looped in the following simple way. The category of homotopyeverything spaces, or E-spaces, is closed under the ordinary loop space functor. There exists a "suspension" operation on E-spaces, denoted by S I ® X. This intrinsic "suspension" on E-spaces is left adjoint to the loop space functor. Then the adjointness map x ~ ~ (s I ® x) is a weak homotopy equivalence for every E-space X which has To(X) a group. Thus the classifying space of an E-space is nothing but its "suspension" in the category of E-spaces. The suspension is a special case of a more general tensor product A ® X defined between a topological space A and E-space X. It is shown that hn(A) = ~n(A ® X) is a generalized homology theory. Both this and the de-looping equivalence follow from the fact that the tensor product converts cofibrations into fibrations (2.4). This