Best Practices in Reporting Information: Software Engineering
Number of change requests resulting from changing requirements, number of reusable components developed, number of person hours required to complete the change, number of commercial components used, number of reusable components developed and the number of bugs recovered are some metrics used in measuring financial and non-financial performance for software engineering in North America.
After a review of numerous magazine articles, research and course outlines from accredited universities, we discovered that there is common agreement among all published experts that the practices listed in the findings are the best practices in software engineering. We were able to select the ‘best’practices by comparing sources and choosing those that were common across the sources. We have included relevant metrics attached to each of the best practices identified. We included metrics and best practices that apply to North America (US and Canada) with a focus on small and mid-size businesses within the software engineering industry.
Understanding a software engineer’s best practices requires an understanding of software architecture. Just like an architect draws the design of a house before the engineers start to draw the detailed plans, a software architect draws the software models that the engineer will use to design the details. Software architects are responsible for high-level decision-making with regard to technical standards, including software coding standards, platforms and tools. They are concerned with some aspects which include aesthetics, functionality, maintainability, performance resilience, reuse, and usage.
A model is a simplification of reality. Software architectures model because of the difficulty in comprehending the complexity of a system in its entirety. Models help in the visualization, specification, construction, and documentation of the behavior and structure of a system's architecture. A model describes a system from a specific perspective.
Software engineering starts with the architect’s models and is responsible for the design, development, maintenance, testing, and evaluation of computer software. Software engineers are responsible for the process of solving customers’ problems through the systematic development and evolution of large, high-quality software systems. They have to work within specific timelines and budgetary allocations. An engineering process involves the application of well-understood techniques in an organized and disciplined way. Many well-accepted practices are standardized, such as those from the IEEE or ISO. Most development work is iterative.
LARGE, HIGH-QUALITY SOFTWARE SYSTEMS
Software engineering practices are applied to enable a better understanding of the large systems. Collaboration and coordination are required in the process of managing large, high-quality software systems. The key challenge for engineering is distributing the work and ensuring that the parts of the system work accurately together.
COST, TIME AND OTHER CONSTRAINTS
Because resources are finite, resource estimates must be as accurate as possible. Many projects have failed due to inaccurate estimates of cost and time.
BEST PRACTICES IN SOFTWARE Engineering
Best practices in software development are a set of empirically proven approaches that are combined to address the underlying causes of software development problems. They are the commonly applied tactics and solutions in the industry by successful organizations.
I. DEVELOP ITERATIVELY
Iterations are time boxed, and the first few iterations provide necessary information for scheduling further iterations. Iterative development allows critical risks to be resolved before large investments are made and enables users to provide early feedback to solve miscommunications and problems early. In iterative development, testing and integration are done concurrently, and errors are caught early. The software is rolled out in ongoing implementations, which give the team objective short term goals and milestones. The metrics for this process should be the number of person-hours for each category of employee (including, but not restricted to architect, engineer, developed, project manager) per iteration.
II. MANAGE REQUIREMENTS
Requirements management is the continuous process that involves the documentation, analysis, tracing, prioritization, and agreements on requirements, and then control of change and communication with the relevant stakeholders. Requirements are dynamic and should be expected to change during software development. As users' understanding and visualization of the system grows, their requests evolve. Part of customer satisfaction is the ability to respond to these requests. Software engineers are responsible for maintaining forward and backward traceability of requirements. The two metrics for this process are the number of change requests resulting from changing requirements and the number of person-hours required to complete the change.
III. USE COMPONENT ARCHITECTURE
Using components permits reuse of common system processes. Enhancing that value is the fact that there are thousands of commercially-available components. Also, the use of components/services improves maintainability and extensibility and allows for a clear division of work among teams of developers. The number of commercial components used and the number of reusable components developed are the two metrics for this process.
IV. MODEL SOFTWARE VISUALLY
When a software engineer models the system, it is a detailed representation of a system, module, or function from a specific standpoint. This provides a better, comprehensive, faster and productive analysis. Plus, models can, in a more compact and compressed way, serve as the same information as written specifications. The models visualize the requirements, thus contributing to better and faster perception by readers. Visual modeling improves the team’s ability to manage software complexity. Metrics for this practice could include a survey of both team and clients to determine the success of the models in communicating concepts.
V. VERIFY QUALITY
The definition of quality must be documented and agreed upon with the client. It is defined as the delivery of a product that meets or exceeds agreed upon requirements through specific objective measures. Software problems are expensive to identify and repair after deployment. Part of this process for the software engineers is to develop test suites for each iteration and ensure these tests check for functionality, reliability, and performance. Metrics for this practice include the number of bugs uncovered (which assesses coding accuracy) and severity of the bugs.
VI. CONTROL CHANGE
Precise control is vital in ensuring that parallel developments do not degrade to chaos. A software engineer establishes an enforceable change control mechanism where change requests are prioritized and impact of the change request is assessed. A clearly understood approval process to introduce change in an iteration is also put in place. Metrics for this practice require a tracking process that includes a number of changes, cost for each change and tracking of those costs against the amount budgeted for change control.
VII. BEST PRACTICES REINFORCE EACH OTHER