Software engineering
Software engineering and its importance: Software engineering is systematic process combining of process and documentation. It follows engineering principles, process and practices. It is important to save time and money. The essential features of software engineering are usability, reliability, maintainability, portability, scalability, efficiency etc. Operational, transactional and maintainable are three main categories of features of software engineering.
Software process models: It is either plan or agile. Waterfall is purely like waterflow where we can't do reverse. Iterative can return back to software stages. Incremental is delivery of piece wise product. Evolutionary is updating new requirements usually after few months, years and can be termed as new version. Spiral introduced risk management, it has stage identification/objectives, risk analysis, development, plan next stage. It may have several loop in each phase and continued … JAD is joint application development in some place mainly in close room where developer, system analyst, user are sit in one round table and gather the requirement. JAD is not totally process model but support in requirement engineering. … RAD is rapid application development where fast development occurs and code is written more and more, can have many groups, cost is high for RAD. Extreme programming, UP share some properties of RAD.
Requirement engineering: Requirement engineering is identification, gathering, validation and evolution… validation of requirement reduce future large cost. Very essential. Gathering from interview, survey, JAD. Validation is checking the requirement as per user expectation.
System models: It comprises the stages of requirement and design phase. It depicts overall picture of system. It shows how and what our system will be through UML diagrams, Use case. Use case shows the interaction between system and external actors. It also has includes and extends feature. Include is mandatory for using that use case but for extend it is optional. For example, to use something feature login is included. But extend is optional. Then, there is data flow diagram. Every steps passes data. If arrow it must pass data. DFD can have level. Level-0 is just bubble System and external entities are communicating. Level-1 extends this bubble to 3-7. Each use case can have level 1 diagram. Store, process and external entities are taking part in level 1 and beyond levels. Sequence diagram is showing message communication between objects. Activity diagram shows start and end of the process, fork can be shown. Class diagram shows the structure of systems, it includes a rectangle with class name, data member and member functions with +, - , ~. Collaboration diagram or … shows the number of steps between models.
Architectural design: It full fills the gap between requirement and design. Archtitecture design or top level design says how our system will be like client-server, SOA or microservices.. Middle level design describe the ER and DFD diagram such that what the system do is described. Low level says about the internal logic such as data structure algorithms, functions and how the user requirement is fulfilled is designed.
Software reuse: Reuse of components, reuse has limitations such as time taking, changing code, legacy, privacy, copyrights, customization time taking, \
Software testing: Testing of software is essential step in software engineering. Unit testing is very basic testing of individual function or sub-module. It is performed by developer. Integration testing is checking of interfaces of combinations of sub-modules. Top-down and bottom-up integration testing. In top-down it use stubs. Bottom up uses driver. Combining from basic modules to large models. It uses stubs and drivers. They are dummy to provide the return values. System testing is overall testing of whole system.
Regression testing is used when code is updated. Previous test case are looked what is happening.
Mutation testing is changing some codes part to see does the mutant (the changed part) killed the test cases or not. If killed then new system is functioning as updated new requirement if not the test is weak.
Alpha and beta testing: Alpha testing is done by developer and within developer environment but beta testing is done by friendly customer.
White and black box testing: Black box testing only look input and output behaviours whereas in white testing all the code is also checked. Black box is functional testing and white box is structural testing.
Verification and validation: Verification says does the process comply in each stages of software development. In validation, does it meet the user requirement.
Software estimation: There are COCOMO (Constructive cost model) and functional point in software estimation. COCOMO is based on code length ie. KLOC. COCOMO can be used in three ways to calculate the estimation of time and effort. The project can be organic, semi-detached and embedded. Organic are already developed by company and has knowledge of developing from previous similar project. Semi-detached are like development of medium-complexity projects such as compiler. Embedded are real-time application and large application such as Air traffic management.
Three ways to calculate it: Basic: It considers only KLOC, intermediate considers KLOC + 15 cost drivers provided by EAF. Formula is: Effort= a*KLOC^b, Time = c*(effort)^d. For intermediate it has 15 cost drivers: Effort = a*KLOC^b*EAF, Time = c*(effort)^d. For advanced it considers previous experience, team expertise,
Functional point has five different points to consider: Number of inputs, number of outputs, number of external interfaces files, number of internal files, number of external inquiries. Input and outputs are simple thing. Number of internal files is like database communication. Number of external inquiries are points that our application providing data from our own system. They do not change the value of data example is search box, tracking number. Number of external interfaces are communication with other systems.
Quality management: Software quality is defined as does it follow the principles of software engineering. SEI CMM is taken as quality checking of organization. Adhoc: no principle on the go. Planned: Basic project management is applied for project size estimation, cost, time, effort calculation. Defined(quality): process is followed. Managed: not only process but it calculates the how the process is followed. Optimized: Continuous improvement
Configuration management: It is management process to look, document all the steps taken during software development from start to end of the project. Updateds, bugs, logs, version all records are kept.
Software project management: Project manager is hired. Process involves as planning, organizing, controlling, execution and termination.
ER Diagram: It is a conceptual diagram. It is used for database design. There are set of entities and we have relationship with them. Ellipse is an attribute or field of entity. Rectangle represent entity. Diamond represents relationship. There can be many entities. Cardinality means number of instances of one entity that can be associated with instances of another. There can be partial or total participation among entities to the relationship. Every instance of an entity must participate with relationship and represent by double line. Generalization is like base class and derived class (car, bike connected to vehicle class) and …. Are some concepts. Arity is how many entities in a relationship. For example, how many entities are connected to diamond.