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