Software engineering is the application of systematic, disciplined, and quantifiable approaches to software development, operation, and maintenance. It involves practices like requirements analysis, architecture design, construction, testing, deployment, maintenance, and configuration management. There are two major approaches to software development processes - sequential (like waterfall) and iterative (like SCRUM). Key activities in processes include requirements gathering, architecture, detailed design, construction, testing, deployment, maintenance, and configuration management using tools like issue trackers and source code repositories. Effective software engineering requires cross-functional teams where members communicate well, take responsibility, and manage their time.
3. Engineering Engineering is the discipline, art and profession of acquiring and applying technical, scientific, and mathematical knowledge to design and implement materials, structures, machines, devices, systems, and processes that safely realize a desired objective or invention. Wikipedia - http://en.wikipedia.org/wiki/Engineering
5. 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. Wikipedia - http://en.wikipedia.org/wiki/Software_engineering
7. Software Engineer A practicant of systematic, disciplined and quantifiable approaches to the development and maintenance of software. A skilled craftsman practicing and training on the tools an techniques used to development and maintenance of software. A teacher of less skilled and experienced engineers in practices of software engineering.
9. Software Development is just not craft Every day software developers practice in the tools and techniques needed to develop software. Every day their experience and skill increases. Many software systems are developed through sheer developer skill and experience. Mays such systems sooner or later come to problems which can be solved by applying systematic, disciplined and controlled practices to their development.
10. Software Engineering Key Elements Repeatability – everything must be repeatable by everyone. Accountability – at any time it must be possible to se who has done what and why. Planning – every key element of the development and maintenance of a software product must be planned. Tracking – every element of a software product must be tracked through its life – cycle. Building– a software product must be built as optimally as possible.
12. Software development process Software development process is the agreed and by all involved parties understood process of planning, implementing, testing and deploying of a software product. Software development process is the tangible embodiment of all the software engineering key elements: repeatability, accountability, planning, trackingand building.
13. Software development process families Software development processes are organized into phases. Each phase is dominated by one or several key activities performed during its course. There are two major software development families : sequential and iterative. A software development process can have a higher or lower degree of formality.
14.
15. Each iteration is covers all software development activities : requirements, design, coding , testing and deployment.
16. The software development process is done in time boxed iterations where requirements are fixed.
17. The product owner – client can change requirements between iterations.
20. Requirements A requirement is a statement of the scope, behavior and limits a of specific software system characteristic or function. There are two types of requirements : functional that deal with the functionality expected from the system by the clients non-functional that deal with all the other characterizes a software product must have Requirements are written in the System Requirements Specification document
22. Software Architecture Software architecture is the process of defining a structured solution that meets all technical and operational requirements while optimizing common quality attributes as performance, security and manageability. Software architecture is the highest level breakdown of system into parts and processes. Software architecture is the bridge between requirements and the technical design and solution of a product.
24. Detailed Design Detailed design of a software product is the blueprint definition of its smallest components. There are two ways of blueprinting a module: Public interface specificationon which defines only the functions or objects which may be used by components integrating with the module being designed. Comprehensive structure definitionwhich defines in detail all the nuts and bolts (e.g. public and private functions and objects) of the module being designed). After completion the detailed design is passed to the development team to be implemented.
26. Software Construction Software construction is the process of writing, linking and compiling of a software product. Software construction is the meeting ground between engineering and crafting. There a two key characteristics of properly constructed software product: The product is constructed by following the appropriate patterns associated with the product type being build. The product does what is supposed to do with a reasonable level of quality, security and performance.
28. Software Testing Software testing is the process of proving that the implemented software product meets its requirements within the assigned quality parameters. A software product can be tested in multiple ways: Unit-testing. Functional testing. Integration testing. Security testing. Performance testing. Acceptance testing. Software testing must be automated and carried out as soon as possible and as often as possible for the greatest results.
30. Software Deployment Software deployment is a process covering a set of activities related to: Releasing of a software product version. Installation and activation of a product at a client site. Deactivation of a product at a client site. Updating of a product at the client site. Uninstallation of a product at the client site. Software deployment activities must be automated and streamlined as much as possible.
32. Software Maintenance Software maintenance is the process of tracking and applying controlled changes to a released software product with the goal of fixing defects, improving product quality attributes and adapting the product to a changed environment. Software maintenance deals with issues arisen from the development on a production system and the conflicting needs of functional and operational stability against entropy and user needs.
33. Software configuration management Software configuration management (SCM) is the discipline of evaluating, tracking, controlling, naming and versioning of changes made to Configuration Items (CI) through the life-cycle of a software product. A Configuration Item is an artifact (document, image, source code, third-party library, tool) which is placed under configuration management control. Configuration Control Board (CCB) is the body assigned with the authority of enforcing the configuration control policies set in the Software Configuration Management plan.
34. SCM Plan The Software Configuration Management Plan (SCM Plan) is an document that prescribes the policies and rules which must be followed when implementing configuration management on a software product. The SCM Plan covers the following sections: Scope of the configuration control. Project team organization and roles. Tools and policies use for product development and configuration control. Configuration Item scope and definition. Baseline definition and naming. Release definition and naming. Configuration Item and Configuration Item change request auditing. It is important to : tailor the SCM Plan to the type of product developed and the software organization culture, dissimenate the document to all involved parties as the baseline for each configuration managmentactivites.
36. Issue tracker AnIssue Tracker is tool used to automated and help with the tediousness of Software Configuration Change management. An Issue Tracker tracks generally the three following types of issues (tickets etc.) : Task Defect Change Request An Issue Tracker can also link up with a SCM Repository to better track associations with Issues and changes made to Configuration Items. Examples of issue trackers : Bugzilla, Mantis, Fogbugz, TFS etc.
38. SCM Repository A SCM Repository is a tool used to manage and track changes to the official Configuration Item library of a software product. Benefits offered by a SCM Repository tool: Multiple people can work on a same CI without risk of conflicting changes. Centralized place where the software product and associated items can be found. Historical tracking of every change made to CI and easy reverting to a previous change (revision) . Multiple development spikes can be carried at the same time and merged at will with ease. Two general types of SCM Repositories: centralized and distributed. SCM Repository examples: Subversion, CVS, Bazaar, Git, Mercurial, TFS.
40. Software Engineering Team Software engineers work in teams, without teams there would not be software. Three key characteristics a team member must have: Communication – to better express ideas and issues. Responsibility – to deliver what is promised or rise and issue if not. Time management – to know when and how long to do a task. Secondary characteristic a team member ought to have: Presentation – to sell in a formal manner key ideas and issues. Self – learning – to continuously learn new technologies and techniques. Leadership – to mediate and lead a team to deliver on time and on budget.