Saturday, July 11, 2009

FUNCTIONAL ANALYSIS

The input and output states of a chip can be monitored using an oscilloscope, or special purpose probes such as logic state analysers or protocol analysers, to acquire a picture of the behaviour of the chip over time or in response to input signals.

Many patented goods are not sold with restrictive licences, and hence a bona fide purchaser cannot usually be prevented by the patent from doing what they like with the patented product. Indeed, the patent itself may give the reverse engineer valuable information on how the patented product operates.

However, a competitive product produced by reverse engineering may still infringe the patent itself - patent infringement does not require copying, and so "clean-room" techniques do not assist.

Backward and Forward

Most of the machines we encounter in everyday life are one-way devices. Kitchen appliances turn bread into toast and cabbage into cole slaw, but they cannot perform the opposite transformations. Even machines that claim to be reversible adopt a very shallow notion of what it means to go backwards. The drill in my tool box has settings marked "forward" and "reverse," but no matter which I choose, I cannot undrill a hole. Thegearshift in my car also has a position labeled R, but when I back up, the engine keeps turning in the same direction; if the car were truly reversed, it would suck in pollution through the tailpipe, converting it into gasoline and air.

HARDWARE REVERSE ENGINEERING TECHNIQUES

PRINTED CIRCUIT BOARDS (PCBS)

Computer vision has been widely used to scan PCBs for quality control and inspection purposes, and based on this, there are a number of machine vision for analysing and reverse engineering PCBs (3). Several firms on the Internet offer a service of scanning a PCB and supplying a corresponding netlist.

INTEGRATED CIRCUIT (IC) COMPONENTS

This is much harder work, since everything is on a much smaller scale.

The first step is to get through the encapsulating material into the product itself, by chemical etching or grinding. This can be tough in itself, since some manufacturers include hard particles such as carborundum or sapphire in the encapsulating the resin, so that mechanical grinding also destroys the chip.

Once at the chip surface, each layer of components is photographed, then ground away to reveal the layer below. This process reveals the structure of the chip. Again, the process can be made more difficult, for example by providing some of the components vertically across several layers.

HARDWARE REVERSE ENGINEERING

Techniques now exist for visually scanning mechanical parts and generating CAD models from them, using machine vision technology; for example, the REFAB (Reverse Engineering - Feature Based) tool available from the Department of Computer Science of the University of Utah (2) and ARL's site. In REFAB, a laser digitiser is used to the scan the part, and the analysis software then analyses the shape of the part, using features which are based on typical machining operations, to generate a computerised manufacturing description which can be displayed, used to copy the product, or produce new products using the design.

REVERSE ENGINEERING

Reverse engineering, as the name implies, is the reverse of this; in other words, the attempt to recapture the top level specification by analysing the product - "attempt" because it is not possible in practice, or even in theory, to recover everything in the original specification purely by studying the product.

Reverse engineering is difficult and time consuming, but it is getting easier all the time thanks to IT, for two reasons:

  • Firstly, as engineering techniques themselves become more computerised, more of the design is due to the computer. Thus, recognisable blocks of code, or groups of circuit elements on a substrate, often occur in many different designs produced by the same computer program. These are easier to recognise and interpret than a customised product would be.
  • Secondly, artificial intelligence techniques for pattern recognition, and for parsing and interpretation, have advanced to the point where these and other structures within a product can be recognised automatically.

Friday, May 1, 2009

Development of FFBD

FFBDs can be developed in a series of levels. FFBDs show the same tasks identified through functional decomposition and display them in their logical, sequential relationship. For example, the entire flight mission of a spacecraft can be defined in a top level FFBD, as shown in Figure 2. Each block in the first level diagram can then be expanded to a series of functions, as shown in the second level diagram for "perform mission operations." Note that the diagram shows both input (transfer to operational orbit) and output (transfer to space transportation system orbit), thus initiating the interface identification and control process. Each block in the second level diagram can be progressively developed into a series of functions, as shown in the third level diagram on Figure 2.[6]

These diagrams are used both to develop requirements and to identify profitable trade studies. For example, does the spacecraft antenna acquire the tracking and data relay satellite (TDRS) only when the payload data are to be transmitted, or does it track TDRS continually to allow for the reception of emergency commands or transmission of emergency data? The FFBD also incorporates alternate and contingency operations, which improve the probability of mission success. The flow diagram provides an understanding of total operation of the system, serves as a basis for development of operational and contingency procedures, and pinpoints areas where changes in operational procedures could simplify the overall system operation. In certain cases, alternate FFBDs may be used to represent various means of satisfying a particular function until data are acquired, which permits selection among the alternatives.[6]

Functional Flow Block Diagram

A Functional Flow Block Diagram (FFBD) is a multi-tier, time-sequenced, step-by-step flow diagram of a system’s functional flow.[2]

The FFBD notation was developed in the 1950s, and is widely used in classical systems engineering. FFBDs are one of the classic business process modeling methodologies, along with flow charts, data flow diagrams, control flow diagrams, Gantt charts, PERT diagrams, and IDEF.[3]

FFBDs are also referred to as Functional Flow Diagrams, functional block diagrams, and functional flows.[4]

System Engineering - Scope


One way to understand the motivation behind systems engineering is to see it as a method, or practice, to identify and improve common rules that exist within a wide variety of systems.[citation needed] Keeping this in mind, the principles of Systems Engineering — holism, emergence, behavior, boundary, et al — can be applied to any system, complex or otherwise, provided systems thinking is employed at all levels.[18] Besides defense and aerospace, many information and technology based companies, software development firms, and industries in the field of electronics & communications require Systems engineers as part of their team[19].

An analysis by the INCOSE Systems Engineering center of excellence (SECOE) indicates that optimal effort spent on Systems Engineering is about 15-20% of the total project effort.[20] At the same time, studies have shown that Systems Engineering essentially leads to reduction in costs among other benefits.[20] However, no quantitative survey at a larger scale encompassing a wide variety of industries has been conducted until recently. Such studies are underway to determine the effectiveness and quantify the benefits of Systems engineering. [21] [22]

Systems engineering encourages the use of modeling and simulation to validate assumptions or theories on systems and the interactions within them.[23][24]

Use of methods that allow early detection of possible failures, in Safety engineering, are integrated into the design process. At the same time, decisions made at the beginning of a project whose consequences are not clearly understood can have enormous implications later in the life of a system, and it is the task of the modern systems engineer to explore these issues and make critical decisions. There is no method which guarantees that decisions made today will still be valid when a system goes into service years or decades after it is first conceived but there are techniques to support the process of systems engineering. Examples include the use of soft systems methodology, Jay Wright Forrester's System dynamics method and the Unified Modeling Language (UML), each of which are currently being explored, evaluated and developed to support the engineering decision making process.

System Engineering - Managing complexity

The need for systems engineering arose with the increase in complexity of systems and projects. When speaking in this context, complexity incorporates not only engineering systems, but also the logical human organization of data. At the same time, a system can become more complex due to an increase in size as well as with an increase in the amount of data, variables, or the number of fields that are involved in the design. The International Space Station is an example of such a system.

The development of smarter control algorithms, microprocessor design, and analysis of environmental systems also come within the purview of systems engineering. Systems engineering encourages the use of tools and methods to better comprehend and manage complexity in systems. Some examples of these tools can be seen here:[16].

Taking an interdisciplinary approach to engineering systems is inherently complex since the behavior of and interaction among system components is not always immediately well defined or understood. Defining and characterizing such systems and subsystems and the interactions among them is one of the goals of systems engineering. In doing so, the gap that exists between informal requirements from users, operators, marketing organizations, and technical specifications is successfully bridged.

System Engineering - Interdisciplinary field

System development often requires contribution from diverse technical disciplines.[13] By providing a systems (holistic) view of the development effort, systems engineering helps meld all the technical contributors into a unified team effort, forming a structured development process that proceeds from concept to production to operation and, in some cases, to termination and disposal.

This perspective is often replicated in educational programs in that Systems Engineering courses are taught by faculty from other engineering departments which, in effect, helps create an interdisciplinary environment[14][15].

System Engineering - Concept

Systems Engineering signifies both an approach and, more recently, as a discipline in engineering. The aim of education in Systems Engineering is to simply formalize the approach and in doing so, identify new methods and research opportunities similar to the way it occurs in other fields of engineering. As an approach, Systems Engineering is holistic and interdisciplinary in flavor.

[edit] Holistic view

Systems Engineering focuses on defining customer needs and required functionality early in the development cycle, documenting requirements, then proceeding with design synthesis and system validation while considering the complete problem, the system lifecycle. Oliver et al. claim that the systems engineering process can be decomposed into

  • a Systems Engineering Technical Process, and
  • a Systems Engineering Management Process.

Within Oliver's model, the goal of the Management Process is to organize the technical effort in the lifecycle, while the Technical Process includes assessing available information, defining effectiveness measures, to create a behavior model, create a structure model, perform trade-off analysis, and create sequential build & test plan[11].

Depending on their application, although there are several models that are used in the industry, all of them aim to identify the relation between the various stages mentioned above and incorporate feedback. Examples of such models include the Waterfall model and the VEE model[12]

Software Craftsmanship

The movement traces its roots to the ideas expressed in written works. The Pragmatic Programmer by Andy Hunt and Dave Thomas and Software Craftsmanship by Pete McBreen explicitly position software development as heir to the guild traditions of medieval Europe. The philosopher Richard Sennet wrote about software as a modern craft in his book The Craftsman. Freeman Dyson, in his essay "Science as a Craft Industry", expands software crafts to include mastery of using software as a driver for economic benefit:

"In spite of the rise of Microsoft and other giant producers, software remains in large part a craft industry. Because of the enormous variety of specialized applications, there will always be room for individuals to write software based on their unique knowledge. There will always be niche markets to keep small software companies alive. The craft of writing software will not become obsolete. And the craft of using software creatively is flourishing even more than the craft of writing it."

Project Planning

Planning is everything – or so everybody says – at least everybody who seems to achieve their goals. This is very likely to be true for you this semester as you work your way through your Senior Design Project. Although your project is not large on the scale of projects that we discussed in COMP180, there are several factors working against you that make the demands of your task similarly difficult. First, you are a completely new team working on your first project. You will be learning how to work together, how to use new tools, and perhaps a new programming language. Second, you have many other demands on your time – this is one priority among many and at a different level for each of you. Third, you might have a warped view of time right now – the end of the semester and graduation probably seem a ways away but these next few months are going to go very quickly. So, I recommend that you work very hard together to determine a schedule and a set of role assignments (see Number 2 below) that will help you stay on track.

Software Measurement

Software plays an important role in our life. We want products which affect our lives has quality attributes. We need quality software. In order to determine quality of software we must have some metrics to measure quality. The key point here is quality of the same product may be change. Software is not an exception. So if we determine quality attributes of the software we can also have more precise, predictable and repeatable control over the software development process and product. If software engineer know what will he/she do, then we can "measure" software more easly. Most of time we do not know exectly what is the problem. With only a small understanding of the desired software system, estimations of costs begin.
In the early days of computing, software costs represented a small percentage of the overall cost of a computer-based system. Therefore, a sizable error in estimates of software cost had relatively little impact. Today, software is the most expensive element in many computer-based systems. Therefore, a large cost-estimation can make the difference between profit and loss.

Sunday, April 5, 2009

Software Development Process


A software development process is a structure imposed on the development of a software product. Synonyms include software life cycle and software process. There are several models for such processes, each describing approaches to a variety of tasks or activities that take place during the process.

Requirements analysis

The most important task in creating a software product is extracting the requirements or requirements analysis. Customers typically have an abstract idea of what they want as an end result, but not what software should do. Incomplete, ambiguous, or even contradictory requirements are recognized by skilled and experienced software engineers at this point. Frequently demonstrating live code may help reduce the risk that the requirements are incorrect.

Once the general requirements are gleaned from the client, an analysis of the scope of the development should be determined and clearly stated. This is often called a scope document. Certain functionality may be out of scope of the project as a function of cost or as a result of unclear requirements at the start of development. If the development is done externally, this document can be considered a legal document so that if there are ever disputes, any ambiguity of what was promised to the client can be clarified.

Domain Analysis is often the first step in attempting to design a new piece of software, whether it be an addition to an existing software, a new application, a new subsystem or a whole new system. Assuming that the developers (including the analysts) are not sufficiently knowledgeable in the subject area of the new software, the first task is to investigate the so-called "domain" of the software. The more knowledgeable they are about the domain already, the less work required. Another objective of this work is to make the analysts, who will later try to elicit and gather the requirements from the area experts, speak with them in the domain's own terminology, facilitating a better understanding of what is being said by these experts. If the analyst does not use the proper terminology it is likely that they will not be taken seriously, thus this phase is an important prelude to extracting and gathering the requirements. If an analyst hasn't done the appropriate work confusion may ensue: "I know you believe you understood what you think I said, but I am not sure you realize what you heard is not what I meant."[1]

Specification

Specification is the task of precisely describing the software to be written, possibly in a rigorous way. In practice, most successful specifications are written to understand and fine-tune applications that were already well-developed, although safety-critical software systems are often carefully specified prior to application development. Specifications are most important for external interfaces that must remain stable. A good way to determine whether the specifications are sufficiently precise is to have a third party review the documents making sure that the requirements and Use Cases are logically sound.

Architecture

The architecture of a software system or software architecture refers to an abstract representation of that system. Architecture is concerned with making sure the software system will meet the requirements of the product, as well as ensuring that future requirements can be addressed. The architecture step also addresses interfaces between the software system and other software products, as well as the underlying hardware or the host operating system.

Design, implementation and testing

Implementation is the part of the process where software engineers actually program the code for the project.

Software testing is an integral and important part of the software development process. This part of the process ensures that bugs are recognized as early as possible.

Documenting the internal design of software for the purpose of future maintenance and enhancement is done throughout development. This may also include the authoring of an API, be it external or internal.

Deployment and maintenance

Deployment starts after the code is appropriately tested, is approved for release and sold or otherwise distributed into a production environment.

Software Training and Support is important because a large percentage of software projects fail because the developers fail to realize that it doesn't matter how much time and planning a development team puts into creating software if nobody in an organization ends up using it. People are often resistant to change and avoid venturing into an unfamiliar area, so as a part of the deployment phase, it is very important to have training classes for new clients of your software.

Maintenance and enhancing software to cope with newly discovered problems or new requirements can take far more time than the initial development of the software. It may be necessary to add code that does not fit the original design to correct an unforeseen problem or it may be that a customer is requesting more functionality and code can be added to accommodate their requests. It is during this phase that customer calls come in and you see whether your testing was extensive enough to uncover the problems before customers do.

Certification

Professional certification of software engineers is a contentious issue. Some see it as a tool to improve professional practice; "The only purpose of licensing software engineers is to protect the public" [13]

The ACM had a professional certification program in the early 1980s,[citation needed] which was discontinued due to lack of interest. The ACM examined the possibility of professional certification of software engineers in the late 1990s, but eventually decided that such certification was inappropriate for the professional industrial practice of software engineering.[14] As of 2006, the IEEE had certified over 575 software professionals.[15] In Canada the Canadian Information Processing Society has developed a legally recognized professional certification called Information Systems Professional (ISP)[16]. The Software Engineering Institute offers certification on specific topic such as Security, Process improvement and Software architecture[17].

Most certification programs in the IT industry are oriented toward specific technologies, and are managed by the vendors of these technologies.[18] These certification programs are tailored to the institutions that would employ people who use these technologies.

Software engineering

Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.[1]

The term software engineering first appeared in the 1968 NATO Software Engineering Conference and was meant to provoke thought regarding the current "software crisis" at the time.[2] Since then, it has continued as a profession and field of study dedicated to creating software that is of higher quality, cheaper, maintainable, and quicker to build. Since the field is still relatively young compared to its sister fields of engineering, there is still much work and debate around what software engineering actually is, and if it deserves the title engineering. It has grown organically out of the limitations of viewing software as just programming. Software development is a term sometimes preferred by practitioners in the industry who view software engineering as too heavy-handed and constrictive to the malleable process of creating software.

Yet, in spite of its youth as a profession, the field's future looks bright as Money Magazine and Salary.com rated software engineering as the best job in America in 2006.

Properties common to blueprints

Step-by-step procedure from blueprint to finished article

Software blueprinting processes advocate containing inspirational activity (problem solving) as much as possible to the early stages of a project in the same way that the construction blueprint captures the inspirational activity of the construction architect. Following the blueprinting phase only procedural activity (following prescribed steps) is required. This means that a software blueprint must be prescriptive and therefore exhibit the same formality as other prescriptive languages such as C++ or Java. Software blueprinting exponents claim that this provides the following advantages over enduring inspiration:

  • Potential for automatic machine translation to code
  • Predictable timescales after blueprinting phase
  • Software architect's intentions reflected directly in code

Focused on a single application aspect

Software blueprints focus on one aspect to avoid becoming diluted by compromising choice of description medium and to ensure that all of the relevant logic is localized.

Selection of optimal description medium

The single aspect focus of a software blueprint means that the optimal description medium can be selected. For example, algorithmic code may be best represented using textual code whereas GUI appearance may be best represented using a form design.

The motivation behind selecting an intuitive description medium (i.e. one that matches well with mental models and designs for a particular aspect) is to improve:

  • Ease of navigation
  • Ease of understanding
  • Fault detection rate
  • Ability to manage complexity

Localization of aspect logic

The localization of aspect logic promoted by the software blueprinting approach is intended to improve navigability and this is based on the assumption that the application programmer most commonly wishes to browse application aspects independently.

Orthogonalization

Software blueprinting relies on realizing a clean separation between logically orthogonal aspects to facilitate the localization of related logic and use of optimal description media described above.

Examples

GUI form design

The GUI form design (see GUI toolkit) is widely adopted across the software industry and allows the programmer to specify a prescriptive description of the appearance of GUI widgets within a window. This description can be translated directly to the code that draws the GUI (because it is prescriptive).

Machine translatable co-ordination languages (e.g. CDL)

Languages such as the Concurrent Description Language (CDL) separate an application's macroscopic logic (communication, synchronization and arbitration) from complex multi-threaded and/or multi-process applications into a single contiguous visual representation. The prescriptive nature of this description means that it can be machine translated into an executable framework that may be tested for structural integrity (detection of race conditions, deadlocks etc.) before the microscopic logic is available.

Class designers

Class designers allow the specification of arbitrarily complex data structures in a convenient form and the prescriptive nature of this description allows generation of executable code to perform list management, format translation, endian swapping and so on.

Software designers

Classes are used as building blocks by software designers to model more complex structures. In software architecture the Unified Modeling Language (UML) is an industry standard used for modeling the blueprint of software. UML represents structure, associations and interactions between various software elements, like classes, objects or components. It helps the software designer to design, analyze and communicate ideas to other members of the software community.

Software Blueprint

A software blueprint is the final product of a software blueprinting process. Its name derives from the analogy drawn with the popular use of the term blueprint (within traditional construction industry). Therefore, a true software blueprint should share a number of key properties with its building-blueprint counterpart:

SepaWeb

A comprehensive Web site has been developed to complement the content of the SEPA, 6/e. The Web site, called SepaWeb, provides a broad array of software engineering resources that will benefit instructors, students, and industry professionals.

Like all Web sites, SepaWeb will evolve over time, but the following major content areas will always be present:

(1) a broad array of instructor resources including a comprehensive on-line Instructor's Guide and supplementary teaching materials (e.g., slide presentations to supplement lectures);

(2) a wide variety of student resources including an extensive on-line learning center (encompassing study guides, problem solutions, web-based resources, a FAQ for each chapter, and self-tests), an evolving collection of "tiny tools," a case study, and additional supplementary content, and

(3) a detailed collection of professional resources including outlines (and samples of) software engineering documents and other work products, a useful set of software engineering checklists, a catalog of software engineering (CASE) tools, a comprehensive collection of web-based resources, and an "adaptable process model" that provides a detailed task breakdown of the software engineering process.
In addition, SepaWeb will contain other goodies that are currently in development.

Software Developer

A software developer is a person or organization concerned with facets of the software development process wider than design and coding, a somewhat broader scope of computer programming or a specialty of project managing including some aspects of software product management. This person may contribute to the overview of the project on the application level rather than component level or individual programming tasks. Software developers are often still guided by lead programmers but also encompasses the class of freelance software developers.

Other names which are often used in the same close context are software analyst and software engineer.

With time and a little luck, differences between system design, software development and programming are more apparent. Already in the current market place there can be found a segregation between programmers and developers, being that one who actually implements is not the same as the one who designs the class structure or hierarchy. Even more so that developers become systems architects, those who design the multi-leveled architecture or component interactions of a large software system.[1] (see also Debate over who is a software engineer)

A 'programmer' is responsible for writing code,[1] but a 'developer' could be involved in wider aspects of the software development process such as:

In a large company there may be employees whose sole responsibility may consist of only one of the phases above. In smaller development environments, a few, or even a single individual might handle the complete process.

Recent Tends in Sector

Given the rapid growth of this sector, several companies have started to use offshore development in China, India and other countries with a lower cost per developer model. Several new Web 2.0 platforms and sites are now developed offshore while management is located in Western countries. The advantages mostly revolve around better cost-control over the process, which means that there is lower cash-outflow (often the biggest struggle for startups). Furthermore, the time difference when working with India and China for the Western world allows work to be done round the clock adding a competitive advantage. Notable firms that are involved in development include Tata Consultancy Services, Infosys, Wipro, and Satyam

Software Development Methodology

A software development methodology is a framework that is used to structure, plan, and control the process of developing information systems. A wide variety of such frameworks have evolved over the years, each with its own recognized strengths and weaknesses. One system development methodology is not necessarily suitable for use by all projects. Each of the available methodologies is best suited to specific kinds of projects, based on various technical, organizational, project and team considerations.[4]

Testing

Testing is the process of examining a software product to find errors. This is necessary not just for code but for all life-cycle products and all documents in support of the software such as user manuals.

Coding Phase

The coding phase of the software life-cycle is concerned with the development of code that will implement the design. This code is written is a formal language called a programming language. Programming languages have evolved over time from sequences of ones and zeros directly interpretable by a computer, through symbolic machine code, assembly languages, and finally to higher-level languages that are more understandable to humans. See also Programming languages.

Design Phase

In the design phase, a plan is developed for how the system will implement the requirements. The plan is expressed using a design method and notation. Many methods and notations for software design have been developed. Each method focuses on certain aspects of a system and ignores or minimizes others. This is similar to viewing a building with an architectural drawing, a plumbing diagram, an electrical wiring diagram, and so forth.

Changlenges

To meet this challenge, software engineers have adapted many techniques from older engineering fields, as well as developing new ones. For example, divide and conquer, a well-known technique for handling complex problems, is used in many ways in software engineering. The software engineering process itself, for example, is usually divided into phases. The definition of these phases, their ordering, and the interactions between the phases specify a software life-cycle model. The best-known life-cycle model is the waterfall model consisting of a requirements definition phase, a design phase, a coding phase, a testing phase, and a maintenance phase. The output of each phase serves as the input to the next. See also Systems engineering.

Manufacturing

The process of manufacturing software systems. A software system consists of executable computer code and the supporting documents needed to manufacture, use, and maintain the code. For example, a word processing system consists of an executable program (the word processor), user manuals, and the documents, such as requirements and designs, needed to produce the executable program and manuals. See also Software engineering.

Software engineering is ever more important as larger, more complex, and life-critical software systems proliferate. The rapid decline in the costs of computer hardware means that the software in a typical system often costs more than the hardware it runs on. Large software systems may be the most complex things ever built. This places great demands on the software engineering process, which must be disciplined and controlled.

Requirement Phase

The purpose of the requirements phase is to define what a system should do and the constraints under which it must operate. This information is recorded in a requirements document. A typical requirements document might include a product overview; a specification of the development, operating, and maintenance environment for the product; a high-level conceptual model of the system; a specification of the user interface; specification of functional requirements; specification of nonfunctional requirements; specification of interfaces to systems outside the system under development; specification of how errors will be handled; and a listing of possible changes and enhancements to the system. Each requirement, usually numbered for reference, must be testable.

Software Engineering

(computer science) The systematic application of scientific and technological knowledge, through the medium of sound engineering principles, to the production of computer programs, and to the requirements definition, functional specification, design description, program implementation, and test methods that lead up to this code.

Papers and Columns in the January Issue

The January issue of SEN includes reports and papers on:

  • Creativity and Rationale in Software Design, by John Daughtry, Janet Burge, John M. Carroll, and Colin Potts
  • Fault Model and Test-Case Generation for the Composition of Aspects, by Chitra Babu and Harshini Ramnath Krishnany
  • Metrics to Study Symptoms of Bad Software Designs, by Kuljit Kaur Chahal and Hardeep Singh
  • Querying Complex Requirements, by Sergey Diev
  • Test Code Differencing for Test-Driven Refactoring Automation, by Hewijin Christine Jiau and Jinghong Cox Chen
  • Peer Review Assessment Standard for Object Oriented Analysis and Design, by Tony Lee
  • Managing Software Design Complexity: Facade vs Role-Based Design, by R. K. Pandey
  • Causal-Based Networks Supporting Process Improvement, by Karsten Richter
  • Software Maturity: Design as Dark Art, by Robert Schaefer
  • Application of Support Vector Machine to Predict Fault Prone Classes, by Yogesh Singh, Arvinder Kaur, and Ruchika Malhotra
  • ANN Model for Predicting Software Function Point Metric, by Yogesh Singh, Pradeep Kumar Bhatia, and Omprakash Sangwan
  • State Model Extraction of a Software Component by Observing its Behavior, by Rajiv Ranjan Suman and Rajib Mall

The letters and columns in the January issue include the following:

  • Letters from the Chair and the Editor
  • SIGSOFT Influential Educator Award

  • 25th ICSM in Edmonton
  • Membership Drive
  • Call For Nominations: 2009-2010 Athena Lecturer
  • ACM Lifetime Membership
  • The Philosophy of Computer Science
  • ACM TOSEM FAQs and Figures
  • SE Means Programming
  • Surfing and Risks to the Public