Thursday 19 March 2015

ERP versus SCM

supply chain management (SCM) is. Traditional SCM used the telephone, fax and regular mail to keep contact between suppliers and customers. It involved lots of time and costs. With the advent of computer technologies support for supply chain relationship became Electronic Data Interchange (EDI) systems. But EDI is an inter-organisational process, so business partnerships have been shown to be very important in the adoption and use of EDI.

Supply Chain Management (SCM) in today's Internet environment, especially the e-business is important to create significant competition advantages to firms and business partners worldwide. Since the objectives and goals are essential factors in the use of supply chain management in the e-business.

ERP being a business tool that manages day-to-day business process and is usually comprised of several modules such as financial module, distribution module, production module and supply chain management module as well as many other modules. Each of these modules share information that is housed within the database structures on which the ERP system was coded. ERP helps to break down barriers between departments within a company.

At a broader context, you must understand that ERP is an integrated system which holds many modules and SCM could be considered as one of the modules.

Enterprise resource planning

has a long history of expansion with additional modules added to bring more of the company's operations and interests into the integrated application suite. Within each functional area as well, expansion of capabilities and functions are a continuing theme. Even the earliest MRP II -- the previous acronym for what is now known as ERP -- systems had customer order handling capabilities, and many have grown to become full-function customer relationship management (CRM) -- the comprehensive repository for all kinds of data supporting the customer relationship.

New applications and new functionality tend to emerge from independent "specialist" developers not associated with the known ERP suppliers. Sometime these niche applications establish a new capability that is well accepted by the market and the ERP suppliers then add similar capabilities to their product suites. Generally, however, the ERP suite capabilities are not as deep or functionally complete as the so-called "point solutions" developed and maintained by the specialist developers.

ERP developers are usually unable to keep up with the additional functions continually added by leading point solution suppliers. And this is how is has been with the SCM software applications. Focused specialists created the category and remain ahead of the ERP suite suppliers even as they have created their own SCM suites.

The need for SCM systems


Companies with existing ERP installed -- and needing the deeper functionality of SCM systems -- may find an SCM product that has built-in or available interfaces to their ERP software. That's especially true if the ERP is one of the top market players -- SAP or Oracle, for example. Alternatively, there may be implementation and support partners associated with the SCM supplier that have pre-built interfaces or experience developing the interface for past client companies. The third alternative is to develop the interface on a one-off basis using middleware tools and exploiting Web services and service-oriented architecture to get the job done.

The short answer to interfacing ERP and SCM is this: Users can choose the point of integration since the key gateway applications -- CRM, distribution inventory or warehouse management -- may be available from either the ERP supplier or the SCM supplier. The choice will depend on the company's need for the deeper functionality available from the SCM supplier, with a more complicated interface or the fully integrated functionality of the ERP system application tied to the additional SCM functionality -- warehouse management, transportation management, supply chain planning and management. That makes it a much less complex integration.

Wednesday 18 March 2015

Software Development v/s Web Development

PCBizness Technosoft Pvt. Ltd.




Software development is the computer programming, documenting, testing, and bug fixing involved in creating and maintaining applications and frameworks involved in a software release life cycle and resulting in a software product. The term refers to a process of writing and maintaining the source code, but in a broader sense of the term it includes all that is involved between the conception of the desired software through to the final manifestation of the software, ideally in a planned and structured process. Therefore, software development may include research, new development, prototyping, modification, reuse, re-engineering, maintenance, or any other activities that result in software products.

Software can be developed for a variety of purposes, the three most common being to meet specific needs of a specific client/business (the case with custom software), to meet a perceived need of some set of potential users (the case with commercial and open source software), or for personal use (e.g. a scientist may write software to automate a mundane task). Embedded software development, that is, the development of embedded software such as used for controlling consumer products, requires the development process to be integrated with the development of the controlled physical product. System software underlies applications and the programming process itself, and is often developed separately.

The need for better quality control of the software development process has given rise to the discipline of software engineering, which aims to apply the systematic approach exemplified in the engineering paradigm to the process of software development.

There are many approaches to software project management, known as software development life cycle models, methodologies, processes, or models. The waterfall model is a traditional version, contrasted with the more recent innovation of agile software development.

 Where as


Web development is a broad term for the work involved in developing a web site for the Internet (World Wide Web) or an intranet (a private network). Web development can range from developing the simplest static single page of plain text to the most complex web-based internet applications, electronic businesses, and social network services. A more comprehensive list of tasks to which web development commonly refers, may include web design, web content development, client liaison, client-side/server-side scripting, web server and network security configuration, and e-commerce development. Among web professionals, "web development" usually refers to the main non-design aspects of building web sites: writing markup and coding. Most recently Web development has come to mean the creation of content management systems or CMS. These CMS can be made from scratch, proprietary (such as Open Text) or open source (such as Drupal). In broad terms the CMS acts as middleware between the database and the user through the browser. A principle benefit of a CMS is that it allows non-technical people to make changes to their Web site without having technical knowledge.

For larger organizations and businesses, web development teams can consist of hundreds of people (web developers) and follow standard methods like Agile methodologies while developing websites.Smaller organizations may only require a single permanent or contracting developer, or secondary assignment to related job positions such as a graphic designer and/or information systems technician. Web development may be a collaborative effort between departments rather than the domain of a designated department.

If we  Want someone to build an interactive web site on top of someone else's existing framework? Hire a web developer. Need to build a new app framework from the ground up? Hire a software engineer. Want someone who can really quickly implement someone else's design in PHP? Web developer. Want someone who can carefully document a legacy system and design a replacement for it that is faster, cheaper, and easier to manage? Software engineer.

Conclusion:


A Software Engineer is:

someone who devises solutions to software problems
concerned with 'architecting' software on a given platform
responsible for the flow of data across the entire stack
someone who turns data into information
a programmer with greater software-architectural knowledge


A Web Developer is:

a specialist developer for the web.
a programmer with domain-specific knowledge of the web, web architectures and technologies.
responsible for the actual development/building of the entire stack, from HTML/CSS to database.


Read more »

Tuesday 10 March 2015

Software Development

PCBizness Technosoft Pvt. Ltd.



Software development engines come in various forms, spanning virtual prototypes, register-transfer level (RTL) simulation, acceleration/emulation, and FPGA-based prototyping. This article will outline when each is appropriate during the design cycle and explain their differing use cases.

Software development is all the rage these days. Do you have a great idea for the next must-have app? Millions of downloads of apps for phones and tablets on various operating systems (OSs) make software a hot market. As a result, tools for application and embedded software development are in high demand, and industries such as electronic design automation (EDA) are following all the attention software is getting with interest. In addition, EDA’s traditional main customer base, the semiconductor vendors, are trying to adapt to new challenges posed by their customers—the system houses—which eventually serve you and me, the consumers.

Over the last decade, a set of platforms that enable software development has emerged at the interface between EDA and embedded software development. Today, a design team has various options for how to develop software for the next cool gadget. But before we jump into the differences, let’s understand a bit more about what types of software can be found in today’s devices and what a typical development flow looks like.

The Hardware/Software Stack
Let’s look at a hardware/software stack for a consumer device like an Android phone (Fig. 1). At the lowest level of hardware, we find design and verification intellectual property (IP) assembled into sub-systems. In a phone, you will find various processors including application processors and video and audio engines, as well as baseband processors dealing with the wireless network.


1. Shown is an example of a hardware stack (at left) and software stack (at right) for a consumer device.

We must cover both control and signal processing, so designers typically turn to control processors such as ARM cores and digital signal processing (DSP) engines, which all must be programmed with software. On the hardware side, we integrate the subsystems into systems-on-a-chip (SoCs), which are in turn integrated into the actual printed-circuit board (PCB) and then into the phone.

The software stack looks just as complex as the hardware stack. At the highest level, end users are exposed to the applications that make our life easier, from Facebook to Netflix to productivity applications. These apps run on OSs, which may or may not be real-time-capable, and are enabled by complex middleware.

For example, the app that guided me to work this morning to avoid traffic did not have to implement location services by itself, but instead used pre-existing services for GPS. The same is true for most aspects of consumer products. In a phone, the middleware would include services like location, notification, activity, resource, and content management, all of which can be used by the apps we users see.

Operating Systems
Underneath the middleware we find the actual OS (iOS, Android, or others), including its services for networking, Web, audio, and video media. Combined with the OS, drivers (such as USB, keyboard, Wi-Fi, audio, and video drivers) connect the actual hardware to the device. The difference between the various layers lies in how and by whom they are provided.

In today’s world, many drivers are expected to come from the IP providers with the hardware IP they license. If the hardware IP provider does not make them available, or if the hardware is not licensed and developed in house, then a software team close to the hardware team will develop the drivers. The apps are developed by system houses and independent end-users. My iPhone, for example, has base applications developed by Apple plus applications developed independently.

OSs and middleware are typically licensed distributions. Not too long ago the commercial market for mobile OSs was quite large—remember Symbian and Microsoft CE? Embedded Linux and Android have changed the landscape so OSs are still licensed. But with the exception of Windows Mobile 7, the commercial mobile OSs are extinct, having been replaced by in-system-house OSs such as iOS, Blackberry OS, or various distributions of Android. The systems houses then customize these OSs, as with HTC’s Android phones with Sense technology.

The Project Flow
Now that we’ve looked at the different types of software to be developed, let’s analyze a project flow representative of consumer products. We may compare the various hardware/software development efforts during a project and the availability of different software development engines (Fig. 2).


2. Shown is a comparison of the various hardware/software development efforts during a project and the availability of different software development engines. (courtesy of IBS and Cadence)

The vertical axis shows the relative effort in human weeks, normalized to the average total of the projects analyzed. The horizontal axis shows the elapsed time per task and is normalized to the average time it takes to get from RTL to tapeout, which was 62 weeks across the projects analyzed. (For more information on the data, see “Improving Software Development and Verification Productivity Using Intellectual Property (IP) Based System Prototyping.”)

For instance, the total software development effort is about 45% of the project effort (measured in human weeks), as shown on the vertical axis. Verifying the RTL takes 20% of the overall hardware/software project effort and takes about 55% of the elapsed time from RTL to tapeout as indicated on the horizontal axis.

We may also examine the points at which the different software development engines become available (Fig. 2, at bottom). These engines are defined as follows:

Virtual prototypes are transaction-level representations of the hardware, able to execute the same code that will be loaded on the actual hardware, and often executing at well above 20 MIPS on x86-based hosts running Windows or Linux. To the software developer, virtual prototypes look just like the hardware because the registers are represented correctly, while functionality is accurate but abstracted. (For example, processor pipelines and bus arbitrations are not represented with full accuracy.)
RTL simulation executes the same hardware representation that is later fed into logic synthesis and implementation. This is the main vehicle for hardware verification and it executes in the Hertz range, but it is fully accurate as the RTL becomes the golden model for implementation, allowing detailed debug.
Acceleration/emulation executes parts of the design using specialized hardware—verification computing platforms—into which the RTL is mapped automatically and for which the hardware debug is as capable as in RTL simulation. Interfaces to the outside world (Ethernet, USB, and so on) can be made using rate adapters. In acceleration, part of the design (often the testbench) resides in the host while the verification computing platform executes the design under development. As indicated by the name, the primary use case is acceleration of simulation. In-circuit emulation takes the full design including testbenches and maps it into the verification computing platform, allowing much higher speed and enabling hardware/software development, ranging all the way up into the megahertz range.
FPGA-based prototyping uses an array of FPGAs into which the design is mapped directly. Due to the need to partition the design, re-map it to a different implementation technology, and re-verify that the result is still exactly what the incoming RTL represented, the bring-up of an FPGA-based prototype can be cumbersome and take months (as opposed to hours or minutes in emulation) and debug is mostly an offline process. In exchange, speeds will go into the tens of megahertz range, making software development a realistic use case.
Virtual prototypes that use transaction-level models (TLMs) can be available earliest in the design flow, especially for new designs (Fig. 2, again). Compared to RTL development and verification, development of blocks at the TLM level takes less effort because less detail is represented, resulting in less accurate models. Designs at RTL become executable in simulation first. Once RTL is reasonably stable, subsystems or full SoCs can be brought up in emulation or acceleration engines. Very stable RTL can be brought up in FPGA-based prototyping as well. Finally, once the first silicon samples are available, prototype boards may become available for software development.

The Project Timeline
Now we will assume a complex project spanning 15 months from RTL to tapeout and requiring another three months for silicon availability. Virtual prototypes can be available from 12 to 15 months before there is silicon. The elapsed time for development and verification of RTL would be about 10 months, so emulation and acceleration can become available from six to nine months before silicon, and FPGA prototypes can become available from three to six months before silicon. This clearly illustrates that the time of availability of the various software development engines is very different over the course of the design cycle.

The Continuum Of Engines
However, time of availability is not the only issue. As we dig deeper into the design team’s requirements, it becomes clear that there is no “one-size-fits-all” solution. A continuum of engines is needed. Let’s look at the requirements in more detail.

For application software development, designers care most about speed, debug, and early access. When development must become more hardware-aware, hardware accuracy becomes more important. For new blocks and IP validation, accuracy of hardware as well as hardware debug and turnaround time is crucial. Later, during hardware development, subsystems typically contain software and therefore need software debug capabilities. Finally, hardware/software validation requires enough speed to run a sufficient number of tests to verify functionality.

The bottom line: No engine covers all of these requirements and addresses all the care-abouts. Hence, software development platforms must operate in a connected flow to provide a smooth path from concept to product.



Designer Requirements
Let’s look at a graphical summary of the different user requirements in a flow from concept to product (Fig. 3). Today, we still develop most software on actual hardware once it is available. Real hardware executes at the intended speed, which is great, but debug is not so great because it is hard to look into the hardware. Most importantly, this type of software development becomes available at the latest possible point in time when changes in the hardware require a redesign.


3. This diagram summarizes the different user requirements in a flow from concept to product.

In contrast, at the early end of the design spectrum, virtual prototyping allows software development at the earliest point. Software debugging is easier and faster, but hardware accuracy and detailed debugging are impractical, making hardware verification impossible.

Once RTL is available, turnaround time and hardware debugging in RTL simulation is quick and accurate, given that RTL is today’s golden reference for functionality. But lack of speed makes software development very impractical for most of the types of software in RTL simulation.

As a result, for hardware, software verification engineers want to use emulation and acceleration platforms. These tools provide more speed, definitely enough for subsystems. In addition, the software debug now becomes more practical even though it’s later in the flow than RTL simulation. The speed combines with high hardware accuracy and good turnaround times, meaning it takes less time to get a new design into emulation and acceleration engines.

In addressing the need for hardware/software validation, even more speed is required to run more software for a longer time. This is where FPGA-based prototyping platforms prove useful, enabling even more speed and making software development and validation even more productive. However, debug and turnaround time are not as short as they are with emulators.

When To Use Which Engine? 
We have only scratched the surface of the differences between software development platforms and have assumed the user is involved in software development. With perhaps the exception of virtual prototypes, which are mostly focused on software developers, none of the engines mentioned here is exclusive to software development.

RTL simulation’s primary intent is hardware verification, and extending its use to hardware/software co-verification is a more limited use model due to the inherent speed limitations. Emulation is used for in-circuit execution, power analysis, hardware/software verification, and connections to the real world. Finally, FPGA-based prototyping serves for software development, regression verification, and in-system validation.

There are fundamental differences between the different execution vehicles with respect to time of availability during a project, software debug, execution speed, hardware accuracy, and debug and turnaround time to bring up a design. In an ideal world, design teams would like to see a continuum of connected engines, allowing them to exploit the given advantages of each engine.

Going forward, hybrid use models will become more and more important. For example, when a part of the design is stable (as in cases of IP reuse), then a hybrid of emulation and FPGA prototyping has the advantage of keeping the still-changing parts in the emulator while the fixed pieces of the design are in the FPGA prototype, executing at a higher speed.

Similarly, a combination of emulation and virtual prototyping allows the optimized execution of inherently parallel hardware like a graphics accelerator or a video engine in the emulator, while software executes on fast just-in-time compiled processor models on a host processor, running faster than would be possible in an emulator.



Monday 9 March 2015

Software Development Vs. Software Testing


PCBizness Technosoft Pvt. Ltd.


Software testing: 

Software testing is process used to identify the correctness completeness and quality of the developed computer software. It includes a set of activities conducted with the intent of finding errors in software so that it could be corrected before product released to the end users. In simple words software testing is an activity to check whether actual results match the expected results and to ensure that software system is defect free. Software testing is more than just error detection, Testing software is operating the software under controlled conditions, to verify that it behaves as specified, detect errors, and validate that what has been specified is what the user actually wanted. Actually testing is the process of analyzing a software item to detect the differences between existing and required conditions (that is defects/errors/bugs) and to evaluate the features of the software item.

Software development: 

Software development used to refer to the activity of computer programming, which is the process of writing and maintaining the source code, but in a broader sense of the term it includes all that is involved between the conception of the desired software through to the final manifestation of the software, ideally in a planned and structured process.  Therefore, software development may include research, new development, prototyping, modification, reuse, re-engineering, maintenance, or any other activities that result in software products Software Developer has to deal with all actions from the initial design up to the final testing of software.

Difference: 

The process or phase of creating software is called software development, once the software has been created and ready to provide for end users, we test the software with the requirements.  Software testing is an execution of a program with the intention of finding bug.

Development is writing the code, testing is finding out whether or not the code runs the way you expect it to. Software testing is a scrutiny performed to provide information about the quality of a product or software under test to the concerned clients. The trained professionals who perform these testing jobs are called software testers. Software testing includes many different techniques and is not only limited to execution of programs to find errors or software bugs. Software development (also known as application development, software design, designing software, software application development, enterprise application development, or platform development) is the development of a software product.

Software tester works with the new software and help in repairing the errors occurred in it whereas Software developers are the professionals who develop the new software products depending on the client requirements. Software developers’ responsibilities also include broader aspects in development of software products. Software development comes with developer, software publisher, programmer and system development life cycle. Software testing is done by software testers, manager, test lead, test designer, tester, automation developer, and test administrator.

Difference Based on careers.......


Understanding The Indian IT Industry :

The Indian IT industry is mostly services based industry which relies mostly on two types of jobs : software development and software testing (QA). There are other streams too, but those are out of the scope of this discussion. We'll only focus on testing vs.software  development. 

Typically most big IT industries will take up projects from overseas clients and have engineers work on them. This leads to two career paths - Software Testing & Software Development. Overall - the software development teams are responsible for 'coding' and software testing teams are responsible for making sure that everything adheres to the specifications of the software being developed.

Roles Played By Software Developers Vs. Software Testers :

Typically there would be 'two' teams working in sync on a project because both software development and testing cannot be separated. Every written code must be checked for quality and without any team not existing - it'd be impossible to create the final software. The point I'm driving home is that both software development and testing teams are equally important. It's a myth that software 'testing' is kind of a 'lower' job as compared to software development.

When any project begins - both software development and testing teams get involved from day 1. While the actual job of software developers begins much later, software testing teams usually begins right at the time of verifying the specification documents and continues throughout the life cycle of the project. It'd not be wrong to say that software testing teams often have a better knowledge of the overall functioning of the software systems they are working on.

Software development, is one of the most crucial parts because without it, nothing gets 'developed'. Project manager or team lead will assign specific modules to you which you will have to code according to the specifications finalised by the software testing & business development teams. Every module developed by the developers is checked by the testing team and approved.

Skill Set Requirements: 

For Developers: The developer skill set will be determined by the nature of the project and the technology stack decided by the software architects (much senior position in the organisation). If the architects decide that a combo of Java, C, Ruby, Python would be used in the project then accordingly developers will be selected who are trained on these technologies.

For Test Engineers: They require entirely different skill set which could be a mix of Java, C, Ruby, Python along with software manual and automation tools along with scripting languages. There are several automation tools that require programming knowledge. It's a myth that software testing engineers do not write code. Given the complexity of the project a software testing engineer might end up writing more complex code than his developer counterpart. The point to be understood is that - both development and testing jobs require you to have programming knowledge.

Career Growth: 

Software testing and software development engineers have unique growth paths with similarities. Software developers may get promoted to module lead, team lead, project lead, project manager and so on depending on the company's hierarchy.

A software testing engineer will have a similar path where he/she will become team lead, project lead, project manager, test architect etc. It's a myth that there are no or little growth opportunities in software testing career.

Salaries Offered To Testing Engineers Vs. Developers:

It's a fact that few companies offer a bit lesser salary to testing engineers as compared to developers at the initial phase of career. But I've not seen this remaining a problem for longer time in career. In fact, a qualified automation engineer can draw much more salary than a developer with similar work experience (years).

Ultimately You Will Become Managers

I'd say 'unfortunately' because every promotion will take you away from your technical expertise. Ultimately you will become managers and will mostly use Microsoft Outlook, Power Point and Excel Sheets no matter which stream (development or testing) you belonged to. At that stage, your salaries will be the same as what the industry offers and your testing stream won't really matter.

There are few companies that allow you to stick to your roots through caries technical and management career paths. That however is out of scope of this post. You may ask specific questions about this, if you have any.

Should You Choose Software Development Or Software Testing?

If you are 'passionate' about coding [check if you've contributed to open source projects, developed a software in your part time just because it's fun, have you cracked complex coding problems just for fun?] then opt for software development.

If you aren't passionate about coding and haven't written a single line of code out of interest - any stream is okay for you. You'll be happy in any career stream - be it software development or testing.

Bottom Line: Don't form opinions or take decisions based on what people say. Most people are not at all exposed to the IT industry or just one of testing or software development. Do your own research, gather information on your own from well informed people (CE is an excellent place to do that). If you have questions, post them below. We've several software testing engineers and software developers who will be happy to answer your questions. If you have general comments, they are welcome too.