RezwanAhmed & His Team || Software Engineer

SoFTWARE EnGINEERING ::

SOFTWARE DEVELOPMENT Laboratory Steps


Research in Software Engineering, Maintenance, and Evolution

  • Source-Code Analysis, Transformation, and Differencing
  • Software Traceability
  • Reverse Engineering and Re-engineering
  • Program Comprehension and Understanding
  • Emprical Software Engineering and Mining Software Repositories
  • Software Visualization to Support Understanding of Large Software Systems

Research Statement

The research program focuses on the construction of methods, tools, and environments that assist in the process of software evolution. A source code viewpoint is taken to support understanding, analysis, and transformation of large software systems undergoing evolution. An XML representation, namely srcML, is leveraged to manipulate and analyze source code in a lightweight manner. srcML forms the core of a number of tools that analyze, refactor, and reverse engineer source code (most typically C++). The objective is to develop very efficient and useable tools that provide high value to software engineers and researchers.


DATA Usage


Your data could be potentially accessible for misuse, ranging from identity theft to having your critical personal information (like home address, credit card numbers etc.) leaked online. And this is why cyber privacy is important, since it means you’re actively taking steps to keep your data secure, private.
Social media companies earn revenue from advertisements, they place ads in your feed so you can engage with them.

Cyber Privacy remains that the best way to stay safe is to try and be smart about what you use on the internet, and that the ones you do trust to keep your data don’t accidentally leak it.


Software Utilisation and Features of Software


Now, we’re using software in business, industry, administration, business research, service sectors, education system, Agribusiness industry, Eco system technology, mechanical engineering, medical treatment sectors, vaccines, and many sectors in the world.

But, increasing a number of software users are non-experts. Usability, robustness, simple installation, integration, security become the most important features of software. Moreover, many people achieving  bright good degree in his/her career as well as enough experience in business sectors or public sectors, but they have less experiences to operate software into their computing machine system. For that case, sometimes they make damage many software, or entire computing system for lack of usage the Notebook, PC.


Embedded Software Technology


Embedded software is very important economically because, almost each electronic device now includes software. There are many more embedded software systems than other types of software system. If you look around your house, there have one or two laptops or personal computers.

But you probably have 20 or 30 embedded systems, such as systems in phones, cookers, microwaves, etc. 

Embedded systems generally run continuously and do not terminate. They start when the hardware is switched on and must execute until the hardware is switched off. Embedded systems can be thought of as reactive systems; that is, they must react to events in their environment at the speed of that environment (Berry, 1989; Lee, 2002).

 


Technical Content Writer


Technical Content Writers are using the interactive technologies of the Web to blend text, graphics, multidimensional images, sound, and video. Technical contents writers prepare instruction as well as supporting documents for communicates complex and technical software information more easily.

Technical writers typically working with technical staff to make products easier to use and thus need fewer instructions. They also working for the standardize content across platforms and media. Technical writers create operating instructions, how-to manuals, assembly instructions, and “frequently asked questions” pages to help technical support staff, consumers, and other users within a company or an industry. Technical writers may conduct research on their topics through personal observation, library and Internet research, and discussions with technical specialists.

Technical writers must be able to understand and then explain highly technical information. Many technical writers need a background in engineering or computer science in order to do this.


Softwarization :: Telecommunication System 5G Technology


MTQ1MDc5

Softwarization brings new challenges, or at least complexities.

Software-defined networks (SDNs), network function virtualization (NFV), and cloud computing are part of the “softwarization” trend. Softwarization is expected to impact all stages of network development.

SDNs decouple hardware from software and execute the software in the cloud or in clusters of distributed IT servers. NFV applies CPU virtualization and other cloud-computing technologies to migrate network functions from dedicated hardware to virtual machines.

5G will transform the industry because the technology is expected to be able to handle much more mobile data—1,000 times the current wireless capacity, in fact. Also predicted with 5G are data rates up to 100 times higher, as many as 100 times more connected devices, and 10 times greater battery life for some of those devices.

What will differentiate 5G networks. 5G Networks will be “the ability to address varying degrees of requirements” in delay, throughput, and the types and quality of devices. 5G will require a complete revamping of the end-to-end architecture, and rethinking interfaces as well as management and control frameworks. For deployments of 5G telecommunications systems to occur in 2020, most of the research and innovation needs to be conducted soon so that large trials and testing can be completed in time.

OPEN-SOURCE SOFTWARE

There are many benefits of open-source software, the authors say. Operators and vendors can agree on requirements, for example, and quickly develop prototypes. Experimenting with open-source software such as KVM, Linux, Open Daylight, and OpenStack lowers the barrier for those who want to build a telecom network. Open-source is the easiest and fastest way to fuel innovation, according to the report. With 5G networks, the authors expect open-source code to be tested with virtual machines and enhanced on the fly.

SECURITY

Many of the security functions required for full softwarization are complex. Seemingly minor mistakes in implementation could have far-reaching impact. Operators planning to deploy open-source software have the opportunity and responsibility to ensure that due diligence has been performed, particularly when the software supports core security functions.

THE FUTURE OF TELECOM

It seems likely that traditional telecom services—as a separate industry sector—are going to disappear, the authors say. Traditional services will be packaged with others “such as voice with Internet access and premium TV” channels, they predict. There also is likely to be some merging among suppliers of traditional telecom equipment and IT hardware.

Because many service providers are global, they will begin expanding, the paper predicts. The cost of entering a new country is relatively low, assuming the infrastructure is in place, and SDNs and NFV will further lower the costs, the authors say. Softwarization is making it possible to be present in an area without any physical infrastructure at all.

“Technology is going to become accessible to all enterprises in any part of the world on an equal basis, further reducing any competitive advantage due to location,” the authors say. “Hence, the real differentiator will be the capacity to innovate continuously.”

The “Softwarization” of Telecommunications Systems

 


Database Interface Design ||


UIUI Design – User Interface Design and Database Interface Design is another important skull for the organization. for the database design, a software engineer must should use Brainstorming Idea, Knowledge Base User Interactive Design, that people doesn’t feel complexity to use that database. In the last second (2nd) week of the August 2015, Al-hamdu-lillaah, I got an opportunity from a Canadian reputed organization for doing User Interface Design, Database Interface Design, beside Automation System design and rest Analysis Application Software. cover-letter

Really, an infinite opportunity came into my life to do working with a multi level international organization.

For my last 9 years competitive experiences, I like to say that become a Good User Interface UI and UX designer, always doing hard struggle and reading books, surfing design place of the web, attending conferences; formally educating self think, read lots of tutorials, watch different design, and experimenting with self idea. But, above all these are not so easy to maintain.

Quick tips

  • Design every day, when get available time. There is nothing that improves design skills at designing. So design, every day. Design at work. Go home and find little design problems in your everyday life and solve them. Have fun with it and experiment. Trial and error is a great way to learn.
  • Collect Good Design. I found that collecting screenshots for UI-Patterns.com made me a better designer. It gave me an eye for what good design is and what it looks and feels like. Always be on the hunt for spotting clever details and great design, and you will start using them yourself.
  • Test, test, test. The Heuristics will take you far, but the only true way you will learn what works and what doesn’t is through testing.
  • Iterate in increments. Deliver value in increments in an iterative fashion. Having an agile/swift process ensures you will build the right product rather than doing it right from the beginning.

Start self learning by your idea, and collect a list of various resources that will help you on your way to becoming a good designer. 


Content Writing and What Do You Think


Content writing and editing, including call–to–action statements, headlines, page titles, and meta descriptions. Creating web–ready content for multiple websites, blogs, and social media platforms.

Learning new SEO techniques to incorporate them into content. Writing regular blog posts and generating blog topics about branding, web design and content marketing.

Writing Ennovision’s press releases geared to the local, national and industry press and research–based articles and blogs on web practices, SEO, SEM and other topics as assigned. Stay up to date with industry trends and news for the Branding, Web Design and Search industries to become an authority on the subjects for which you are creating content.


CS+X :: New Computer Science Subject


CS+X the joint-major program  that will enable students to study English and computer science, or music and computer science. CS+X, as the joint major program is called, said it will likely attract humanists who want a competitive edge on the job market; computer science-minded students who want to be engaged in the humanities; and third group of students: digital natives for whom computer science and the humanities don’t seem “at opposite ends of the spectrum at all, but continuous.”

And because technology firms often say they prefer candidates with grounding in the humanities, the joint majors may benefit even the most computer science-minded graduates on the job market.

The programs will be rigorous. Jennifer Widom, chair of Stanford’s computer science department said – ” it’s not “half of a [computer science] major and half of an English major.” It’s more like “90 percent of one and 90 percent of the other,” she said. Students majoring in the new joint programs will have to take two fewer courses in computer science than straight computer science majors, and about the same in English or music.

Music and computer science already have some cross-listed courses. English and computer science have none, but that could change over time, Jenkins said. In their senior year, joint majors in both programs will complete a capstone project integrating their two disciplines.

CS+X initially was developed by the computer science department. But last month, the Faculty Senate approved a six-year, joint-program initiative that allows for joint majors even in programs other than computer science. That initiative is inspired in part by the 2012 Study of Undergraduate Education at Stanford, which emphasized the university’s “determination to breach the silos of students’ lives.”

That means other hybrid programs could be developed going forward. English and computer science and music and computer science were the first to ask the Senate for approval.

Read more:

http://www.insidehighered.com/news/2014/03/07/stanford-will-start-new-joint-computer-science-programs#ixzz2vTza9jvz
Inside Higher Ed

http://news.stanford.edu/news/2014/february/server-cluster-management-022814.html


MATLAB®|Numerical Mathematics / Engineeering Software


MATLAB® is a high-level language of technical computing.

MATLAB® is a high-level language and interactive environment for numerical computation, visualization, and programming. Using MATLAB, you can analyze data, develop algorithms, and create models and applications. The language, tools, and built-in math functions enable you to explore multiple approaches and reach a solution faster than with spreadsheets or traditional programming languages, such as C/C++ or Java™.

You can use MATLAB for a range of applications, including signal processing and communications, image and video processing, control systems, test and measurement, computational finance, and computational biology.

More than a million engineers and scientists in industry and academia use MATLAB, the language of technical computing.

MATLAB is the foundation for all products, including Simulink®. However, MATLAB is a High Level Language, so using in below sectors :

  • Software Engineering Research
  • Parallel Computing 
  • Math, Statistics, and Optimization
  • Control System Design and Analysis
  • Signal Processing and Communications
  • Image Processing and Computer Vision Research
  • Test and Measurement
  • Computational Finance
  • Computational Biology Research
  • Code Generation and Verification
  • Application Deployment Research
  • Database Connectivity and Reporting

MATLAB using in Communications Systems, Computational Biology, Computational Finance, Control Systems, Digital Signal Processing, Embedded Systems, FPGA Design and Code sign, Image and Video ProcessingMechatronics, Technical Computing, Test and Measurement

MATLAB Tutorial here :: PDF version MATLAB_Tutorial

You will get this from here ::

  1. http://free-downloadz.net/free/software%20for%20matlab%20free%20download
  2. http://download.venturedownload.com/mania/query.php?q=Software_For_Matlab.rar&ti1=1460000&ti2=0&ti3=2014-02-27T05%3A52%3A08.306788%2B00%3A00 

Code of Ethics | Software Engineer


Like other engineering disciplines, software engineering is carried out within a social and legal framework that limits the freedom of people working in that area. As a software engineer, you must accept that your job involves wider responsibilities than simply the application of technical skills. You must also behave in an ethical and morally responsible way if you are to be respected as a professional engineer.

Code of Ethics – Preamble

  • The short version of the code summarizes aspirations at a high level of the abstraction; the clauses that are included in the full version give examples and details of how these aspirations change the way we act as software engineering professionals. Without the aspirations, the details can become legalistic and tedious; without the details, the aspirations can become high sounding but empty; together, the aspirations and the details form a cohesive code.
  • Software engineers shall commit themselves to making the analysis, specification, design, development, testing and maintenance of software a beneficial and respected profession. In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight Principles:

PUBLIC

Software engineers shall act consistently with the public interest. Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest.

● Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.


Thread & MultiThread


Thread (computing)

In computer science, a thread of execution is the smallest sequence of programmed instructions that can be managed independently by an operating system scheduler. The scheduler itself is a light-weight process. The implementation of threads and processes differs from one operating system to another, but in most cases, a thread is contained inside a process. In particular, the threads of a process share the latter’s instructions (its code) and its context (the values that its variables reference at any given moment).

To arrive at a solution, software architects began writing operating systems that supported running pieces of programs, called threads. Threads are small tasks that can run independently. Each thread gets its own time slice, so each thread represents one basic unit of processor utilization. Threads are organized into processes, which are composed of one or more threads. All threads in a process share access to the process resources.

Another Way, In Programming Language

public class Thread
extends Object
implements Runnable

A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently.

Every thread has a priority. Threads with higher priority are executed in preference to threads with lower priority. Each thread may or may not also be marked as a daemon. When code running in some thread creates a new Thread object, the new thread has its priority initially set equal to the priority of the creating thread, and is a daemon thread if and only if the creating thread is a daemon.

When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls the method named  main of some designated class). The Java Virtual Machine continues to execute threads until either of the following occurs:

  • The exit method of class Runtime has been  called and the security manager has permitted the exit operation to take place.
  • All threads that are not daemon threads have died, either by  returning from the call to the run method or by  throwing an exception that propagates beyond the run  method.

There are two ways to create a new thread of execution. One is to declare a class to be a subclass of Thread. This subclass should override the run method of class  Thread. An instance of the subclass can then be allocated and started. For example, a thread that computes primes larger than a stated value could be written as follows:


     class PrimeThread extends Thread {
         long minPrime;
         PrimeThread(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }

The following code would then create a thread and start it running:

     PrimeThread p = new PrimeThread(143);
     p.start();

Multiple threads can exist within the same process and share resources such as memory, while different processes do not share these resources.


Dart SDK | Web Programming By GooGle


Dart SDK | Web Programming 

WEB PROGRAMMING LANGUAGE DART BY Google | Dart 1.0: A stable SDK for structured web apps

Dart SDK 1.0, a cross-browser, open source toolkit for structured web applications. In the two years since first announced Dart, This release marks Dart’s transition to a production-ready option for web developers.

The Dart SDK 1.0 includes everything you need to write structured web applications: a simple yet powerful programming language, robust tools, and comprehensive core libraries. Together, these pieces can help make your development workflow simpler, faster, and more scalable as your projects grow from a few scripts to full-fledged web applications.

On the tools side, the SDK includes Dart Editor, a lightweight but powerful Dart development environment. We wanted to give developers the tools to manage a growing code base, so we added code completion, refactoring, jump to definition, a debugger, hints and warnings, and lots more. Dart also offers an instant edit/refresh cycle with Dartium, a custom version of Chromium with the native Dart VM. Outside the browser, the Dart VM can also be used for asynchronous server side computation.

For deployment, dart2js is a translator that allows your Dart code to run in modern browsers. The performance of generated JavaScript has improved dramatically since our initial release and is in many cases getting close to that of idiomatic JavaScript. In fact, the dart2js output of the DeltaBlue benchmarknow runs even faster than idiomatic JavaScript. Similarly, dart2js output code size has been reduced substantially. The generated JavaScript for the game Pop, Pop, Win! is now 40% smaller than it was a year ago. Performance of the VM continues to improve as well; it’s now between 42% to 130% faster than idiomatic JavaScript running in V8, depending on the benchmark.

The Dart SDK also features the Pub package manager, with more than 500 packages from the community. Fan favorites include AngularDart and polymer.dart, which provide higher-level frameworks for building web apps. Dart developers can continue using their favorite JavaScript libraries with Dart-JavaScript interop.

Going forward, the Dart team will focus on improving Dartium, increasing Dart performance, and ensuring the platform remains rock solid. In particular, changes to core technologies will be backward-compatible for the foreseeable future.

Google intended for the language to be a replacement of the ubiquitous JavaScript support found in all modern browsers, but without any native browser support, code written in Dart had to be translated to JavaScript in order to work.

The language soon found itself written off as a laughing stock for producing large amounts of JavaScript when translated.

Two years on, the Dart team has created a better translator, dart2js, which is written in Dart and claims performance quicker than “idiomatic JavaScript”.

“dart2js output code size has been reduced substantially. The generated JavaScript for the game Pop, Pop, Win! is now 40 percent smaller than it was a year ago. Performance of the VM continues to improve as well; it’s now between 42 percent to 130 percent faster than idiomatic JavaScript running in V8, depending on the benchmark,” wrote Lars Bak.

Accompanying the SDK is Dart Editor, a development environment based on Eclipse that supports code completion, refactoring, jump to definition, a debugger, hints and warnings.

Please wait, You will get a pdf version of this new programming tool from my web.

Be happy and cheers.!!!

 


Image

HTML Lifecycle | Past, Present, Future|HTML5


html5-infographics


Good Software Attributes


Attributes that mean properties as well as how you can define the jobs of software. Attributes define the quality. In the software engineering, a good software attributes the heart of the computer. To be an expert in the field of computer science requires an in-depth knowledge of the software.

What is it ? How does it work? How is it created? How does it interact with the computer? What makes one piece of software superior to another piece?

The software should deliver the required functionality and performance to the user and should be maintainable, dependable and acceptable.

Maintainability:

Software must evolve to meet changing needs;  Measuring and monitoring maintainability is a must for mission-critical applications where change is driven by tight time to market schedules and where it is important for IT to remain responsive to business-driven changes. It is also essential to keep maintenance costs under control.

Dependability:

Software must be trustworthy and high proficiency.

Efficiency:

Software should not make wasteful use of system resources. The source code and software developed attributes are the elements that ensure high performance once the application is in run-time mode.  does the software make good use of its resources (memory, disk, CPU, network)?

Security :

A measure of the likelihood of potential security breaches due to poor coding practices and architecture. This quantifies the risk of encountering critical vulnerabilities that damage the business. does the software protect the information it is responsible for?

Acceptability:  

Software must be accepted by the users for which it was designed. This means it must be understandable, usable and compatible with other systems.

Portability :

Can the software to easily ported (moved) to another operating system. Some software is portable that can bear in the flash disk  and do works into another operating system.


Software Engineering Costs


Costs vary depending on the type of system being developed and the requirements of system attributes such as performance and system reliability. Roughly 60% of costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs. Distribution of costs depends on the development model that is used.


Software Engineering ||


Software Engineering |

Software Engineering is an engineering discipline that is concerned with all aspects of software production. Software engineers should adopt a systematic and organised approach to their work and use appropriate tools and techniques depending on the problem to be solved, the development constraints and the resources available. Software Engineering is still being debated by practitioners today as they struggle to come up with ways to produce software that is ” cheaper, better, faster “.

Software engineering is not just concerned with the technical processes of software development. It also includes activities such as software project management and the development of tools, methods, and theories to support software production.

Software Engineers adopt a systematic and organized approach to their work, as this is often the most effective way to produce high-quality software. However, engineering is all about selecting the most appropriate method for a set of circumstances so a more creative, less formal approach to development may be effective in some circumstances. Less formal development is particularly appropriate for the development of web-based systems, which requires a blend of software & graphical design skills.

Software engineering is important for two reasons:
1. More and more, individuals and society rely on advanced software systems. We need to be able to produce reliable and trustworthy systems economically and quickly.

2. It is usually cheaper, in the long run, to use software engineering methods and techniques for software systems rather than just write the programs as if it was a personal programming project. For most types of systems, the majority of costs are the costs of changing the software after it has gone into use.

Open source software started to appear in the early 90s in the form of Linux and other software introducing the “bazaar” or decentralized style of constructing software.

Legal requirements for the licensing or certification of professional software engineers vary around the world. In the UK, the British Computer Society licenses software engineers and members of the society can also become Chartered Engineer (CEng), while in some areas of Canada, such as Alberta, Ontario and Quebec, software engineers can hold the Professional Engineer (P.Eng.) designation and or the Information System Professional [I.S.P] designation.

The IEE Computer Society and the ACM, the two main US – based professional organizations of software engineering, publish guides to the profession of software engineering.

Difference between Software Engineering and Computer Science |

Software Engineering is concerned with the practicalities of developing and delivering useful software; Computer science is concerned with theory and fundamentals. Computer Science theories are still insufficient to act as a complete underpinning for software engineering (unlike e.g. physics and electrical engineering).

Difference between Software Engineering and System Engineering |

System engineering is concerned with all aspects of computer-based systems development including hardware, software and process engineering. Software engineering is part of this process concerned with developing the software infrastructure, control, applications and databases in the system.

Finally I likes to tell that  

To become a software developer, you must should be know different programming language, high level Programming Language, graphic design including difficult mathematics, logical mathematics. Software engineer is not a small fact, that is large fact, but shortly say that a Software Engineer develop, evolution all hardware systems, software policy design – process of the complex system as well as analysis the software.

Try to respect to Software Engineer as well as all Engineers.

 


Software Developement Model


Software engineer or developer when developed or make a plan to develop a software, then follow some model. Software engineer can’t develop the software without follow these models. There are different types of model use in the development of software, such as below,     

Waterfall Model / Linear sequential model

Waterfall Model/Linear sequential model suggests a systematic sequential approach to the software development that begins with the system level and progresses through analysis, design, coding, testing, and maintenance.

Advantages |

  1. The waterfall model paradigm is a definite and important place in  software engineering work.
  2. Maximum used for all Developers and Customer.
  3. It also provides a template into which methods for analysis, design, coding, testing and maintenance.

Disadvantages | 

  1. The waterfall model is the oldest and the most widely used paradigm for software engineering.
  2. No backtracking and wait for long time.
  3. It is often difficult for the customer to state all requirements explicitly.
  4. If undetected until the working program is reviewed can be disastrous.
  5. Leads to blocking states.
  6. Its have a time spent.
  7. Dependency.
  8. Blocking.

Incremental Model

The incremental model combines elements of the linear sequential model with the iteration philosophy of prototyping. It is applying a linear sequence in a staggered fashion as calendar time progresses. This produces a deliverable increment of the software.

Advantages |

  1. Customer can use the early increment as a form of prototype and gain experience.
  2. Lower risk.
  3. It has provided a platform for evaluation by the user.
  4. It used in big and small project.

Disadvantages |

  1. Very costly.
  2. It is a very slow process.
  3. Long time.

Prototype Model

A customer defines a set of general objectives for software but does not identify detailed such as input, processing, or output requirements. In other cases, the developer may be unsure of the efficiency of an algorithm, the adaptability of an operating system or the form that human machine interaction should take. In these and many other situations, a prototyping paradigm may offer the best approach.

Advantages |

  1. Prototype model is built to serve as a mechanism for defining requirements.
  2. It can be an effective paradigm for software engineering.
  3. Customer and developers both are like the prototyping paradigm.
  4. The actual software is engineered with an eye toward quality & maintainability

Disadvantages |

  1. There is no alternative but to start again, smarting but smarter and build a redesigned version.
  2. It may be too slow, too big & awkward in use.
  3. Creating time is very short.
  4. It likes a demo version.

Considering  the above advantages and disadvantages of the models, I would like to say the incremental model is the best model because the incremental paradigm might deliver basic file management, editing and document production functions in the first increment,  sophisticated editing and document production capabilities in the second increment and spelling and grammar checking in the third increment. Moreover, advanced page layout capability in the fourth increment. Therefore, I think the incremental model is the best model for developing of Software.

 


Software Development Life Cycle :: SDLC


Six Sigma is a methodology to manage process variations that use data and statistical analysis to measure and improve a company’s operational performance.

It works by identifying & eliminating defects in manufacturing and service-related processes. The maximum permissible defects is 3.4 per one million opportunities.

Domain Analysis ≡ Often the first step in attempting to design a new piece of software, whether it is an addition to an existing software, a new application, a new subsystem or a whole new system, is, what is generally referred to as “Domain Analysis”. 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.

Software Elements Analysis ≡ The most important task in creating a software product is extracting the requirements. 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.

Scope Analysis ≡ Also known as Requirement Analysis. 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.

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 are logically sound.

Software Architecture ≡ The architecture of a software system 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.
Implementation ≡ This is the part of the process where computer scientists actually program the code for the project.

Testing ≡ Testing software 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

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

Software Training and Support ≡ 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 ≡ Maintaining 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.