Conf42 Prompt Engineering 2024 - Online

- premiere 5PM GMT

GepAI in Development Processes and Dev Tools

Video size:

Abstract

Let me show you how GepAI can revolutionize your development process. By automating coding, debugging, and deployments, your team can focus on innovation, launch faster, and reduce errors. In just a few minutes, I’ll explain how GepAI unlocks your team’s full potential.

Summary

Transcript

This transcript was autogenerated. To make changes, submit a PR.
Today I'm going to talk about generative AI in development processes and dev tools for this. My name is Bogdan Snisar, 14 years of software engineering experience, had different roles, software lead, engineer, CTO, remarkable companies. It's a Revolut, Wix, currently partner at Overview. It's consulting for LLM and machine learning research. And development of products, co founder and CTO for RedRay Space. Fashion search and discovery platform for finding clothes. Here is my links, feel free to follow. Okay, let's start. Before diving into the details, I want to just highlight what actually, highlight and group projects into several areas. it's a taxonomy of usage of AI for system operation and software development lifecycle. there is a four groups that I find out reasonable here. Conventional systems with conventional SDLC. This is where most current software lives. Standard systems, like traditional inventory management systems using standard development processes without any AI. Some legacy. Conventional systems with AI augmented as DLC. Emerging area where tools like GitHub Copilot or something similar, used by developers. Could be just any project and this is the area where I want to concentrate further during this talk. another area, it's actually some products where people developed products. Exactly, AI systems itself, yeah, augmented systems with conventional SDLC kind of idea of having, ML based product in production, but using the same as DLC as usually, and just the combination of everything. When we develop in AI product and using AI tools for SDLC, as we see as DLC, it's a part It's common for everything and where AI development's really interesting for me. And I want to share my experience from what I used and what looks reasonable at this current moment. What's SDLC itself? It's a process that contains from different phases. It's not only coding. It starts from requirement analysis. Just, we need to plan what we do. going to implement, then development process, then testing, integration testing of it, deployment into the production, and maintenance of it. This is the SDLC overall. interesting to see what actual researchers are trying to solve. Where are the current trends and what's happening? There is an interesting paper that Summarize, it's pretty, pretty fresh, that summarize the whole number of white papers and researchers that happening across the whole internet. They find out that majority of things concentrated on software development itself. Different angles of it, I will cover a couple of them, but there is a developments in software maintenance requirements, engineering, software design. Software management looks like in the SDLC process. There is a two emerging parts. It's a coding and maintenance. However, in the proportion, I believe maintenance, it's a bigger because we have a lot of already written software that requires maintenance. And it's interesting that problems mostly concentrated on generation. Not problems, but tasks that develop, tasks that researchers try to achieve. It's a generation of code, generation of different things, recommendation and some classification things. Let's think about what EDL product or what's actually some people envision as a dream about software development. It's a fully automated SDLC. That's a set of AI agents that's responsible for. operating independently and make the SDLC autonomous. Starting from role assignments, requirements engineering, development, testing, deployments, and all another things. Currently looks like we can use LLMs during SDLC as a helpful tools. To reduce human errors on, or make our work easier in some way. moreover, there is some, of course, rumors about autonomous software engineer as a service. For example, Divine or open sourced SWE agent. This is a set of AI agents that can reflect software engineer. Or they try to do that and according to the test, it's not works so well. in reality, this agent is just a dream right now. However, we see that this chance will continue. And who knows what happens in 2030s. instead of trying to replicate the whole software engineer as an agent, there's a reasonable to have it splitted on several functions and maybe to automate or create helpful tools for part of the SDLC. First thing that comes to me, it's a planning. There is a requirements engineering phase where we need to gather requirements and understand. There's an interesting quote. If my job was coding solutions to problems with rigorously defined requirements, it would be concerning. It's about that people are pretty bad in expressing what they want and like developers say. I think opposite. LLMs are really good in understanding of some unstructured requirements into some structured way. this is really good thing for requirements engineering. It can be used to interpret unstructured requirements into the text specifications or even user stories in reality. LLMs can help requirement engineering to highlight unknowns. It's actually an important thing. It can navigate to some gaps into the requirements that actually are not so visible. Or it's hard to understand that these gaps exist just because LLMs has some generic knowledge and it could be used to fulfill those gaps or identify them and use this as a knowledge for follow up questions during the requirement phase. And another interesting point is to classify functional and non functional requirements from different sources. From, for example, user reviews. On the platforms. It's actually interesting thing that LLMs can be used to identify requirements based on the user feedback. And just create already fully refined or halfly refined tickets that already ready for grooming phase or planning phase. Or at least to create them into the developers pipeline. So requirements engineering, it's an interesting thing. Another, of course, part is the development, how LLMs used in software development. There is a lot of directions where research happening right now. It's a code completion, summarization, search, content, code understanding, actually pretty important program synthesis, API recommendations, API kind of generation, also interesting and I guess here it's emerging. problem exists, method name generation, et cetera. That's nice. Moreover, there's only two hard things in computer science, according to the quote, caching validation and naming things. And naming things already not a big problem, according to the LLMs. What tools I'm personally find out interesting? It's a replit, for example. in reality, it's reflect of AI agents that It tries to build some ready to use solution. it works only for Python and JavaScript. Majority of LLMs are well trained on these things. And it's really bad actually for some rare languages or complex languages like Rust. What is this tool good for? It's for prototyping for something to show as an idea, as a concept. It has a lot of nice features. Standard use cases like authorization, authentication, access to the database. And it's time saving for fast prototyping. And it's pretty crappy for specific use cases. When you try to do something non specific, it's a bit problematic. Cursor. It's actually not a platform, it's a tool. It's a kind of a VS Code fork that had a lot of recent developments. With code completion, assistance for code, we can refine and ask it to do something, to modify code at different angles, and it's pretty nice, actually. However, it's not so good in working with big projects, so my current activity, when I copy paste something to the cursor, work with it, and then copy paste back to the IDE or VS Code. The reason, because I can do the same with chat gpt, but with chat gpt I need to all every time write some specific prompts. Here it's a tool that likes design to work with code. So in some way useful. that's mostly my main usages of LLMs in software development. There is a GitHub co pilot, but I cover it in the next phase. What about maintenance? There is actually a really good fit for LLMs. Program Repair, Detection, Review, Debugging, Bug Reproduction, it's an interesting direction. Hope there will be some interesting products there. Logging, another interesting idea that we can automatically augment software code with logging. Because usually software developers put logging randomly, without any kind of a system. Either it's some problematic place or there was a bug or something like this If the LLM can make it automatically and put it with the understanding of the context, it's really nice time saving for maintenance especially BugJar, also a nice thing Actually good fit for LLMs another interesting thing for maintenance. It's a search how to find Something across the whole part of the project, it's gives ability right now to merge and join a lot of piece of information together and make it as a useful information to make, to help, to actually, to solve something. It could be specs, Jira code, test cases, bug reports, documentation, et cetera. Just something can give you the answers based on it. There is a couple of products that working with this. I actually work on the GitHub Copilot workspace, but there is Atlassian Aroma, not used, but it's interesting to see, Naboo AI, and GitHub Copilot. In some way it's interesting, right now it's mostly good for finding, however, GitHub Copilot tries even to give you ability to add something. For example, U Express, you have a specification, then you want to add some specific details, and this thing can generate code based on it. This part works, let's say, extremely well. Okay with small classes for specific cases. It's a bit problematic. It's problematic Yes, because it can lose the context or don't understand the whole context of the problem clearly But the ability to merge information really nice Another thing of maintenance, it's working with pull requests. Actually, this is a nice thing It's a GitHub marketplace, CodeRabbit, AI, it's nice, actually, it helps to analyze code and makes pull requests review really good. Because sometimes it can find what I missed, sometimes I find what this tool missed, and this is a good combo in reality. Just because it's just a real feeling of Copilot. Another part of maintenance, it's working with issues. There is a, just example, GitHub Marketplace 2, dosu bot. It can work with issue requests and it tries to resolve this issue as answering to the question. sometimes it makes a good job, in getting answers, especially with analyzing the code base and resolving some issues. issues without human interaction Pretty nice actually the idea good Another real direction where it works for maintenance. It's a documentation Usually developers dislike write documentation because they becomes outdated pretty easily However, with LLAMPs, I guess it's a good direction. I just don't use any tools except chat gpt, but it's nice thing, especially for code comments and reflecting readme and documentation with code. So we just changing the code and documentation reflects it without our interaction, interactions, maybe just only with some supervisory. However, no tools here. Another really nice thing, it's tests. That's a really important part of SDLC, and here the LLMs are really powerful. And see a really big value of them. it's a test generation, verification, test automation, a lot of things actually. why it's so good? Because, edge cases, That's what I think, and edge cases that LLM can generate is quite bigger. So it's really nice that it can generate more edge cases than I usually do. And that's really helpful in this case, because it also helps navigate some gaps in understanding. Proven clear value. Works not only for unit tests, but works for Selenium tests. It can be used, especially right now, as I can understand, a visual part, so it can be used for writing some Selenium specifications that gives you ability to test application end to end and to reflect it. Someone can be called that's TDD not so aligned with his developments, but I would say even It's current capabilities, this LLM tools can at least cover and increase test coverage for code that make it more maintainable. It can detect changes and improve overall code quality. Another good example, it's a paper by Meta about automated unit test improvement using large language model. They create the pipeline that's responsible to improve test coverage. Just as we discussed previous slide, the idea is that it generate test case test cases, not the unit test, but actually try to understand what to test to fulfill the ideas or like specifications for tests. Then it's doing some prep testing of it. Then generate tests. Runs builds, and when this build passes, means this is already successful number of tests. Then post processing is improving of code coverage. And here we are, we have a ready to create the pull request. Really nice paper that says that Meta itself internally tries to use it, uses for different cases. what we can summarize here. It's interesting that for code writing, it's not so bad. It really helps for boilerplate and repetitive code tasks. it's good for changes to end user code, actually. When it's not about complex things. When it's just for some small part of it, for some class, it can be useful. It's really nice for test and especially for test data generation, because sometimes it's really hard to generate some test data or come up with it. You need to think about it. here is really proven value. It's nice for assistance in unfamiliar tasks. It's another interesting part when LLMs can be used. For example, this CSS for HTML generated. Even though that you don't know CSS, like CSS for back end developers. that's nice. I tried even with ChatGPT. It works really, it works. After some number of iterations, I can manage to write some specific cases that I am not familiar with. And it's really good for integrated search over a data lake. It's a really emerging thing, especially for big projects, because In big projects, the issue of complexity between different parts is really big. It's not good for changing a complex code. Yeah. And it's not good for refactoring. Because refactoring requires changing with understanding of the big context. for maintainability of complex legacy code, it's not so workable. And of course it's not good for generating a complex code or like code for multiple cases or even multiple classes when they're involved in this. In a nutshell, it works great right now for unit tests, for testing, let's say. It works great for some prototyping. And it's not so good for maintenance of the legacy or big projects. Yes, we heard about recent talks that, for example, Amazon just save a lot of hours for migrating from one version Java to another, but in reality, I think it's just minor code changes because migrating from one version Java to another, not so complex. Just the language really famous for their backward compatibility. So this is a kind of a summary that I see reasonable right now. What else? What interesting side effects this thing creates? One side effect I see it's code churn by years. There is a article that, yeah, this article will use some extrapolation, but in reality it says that code churn increases after the LLM cycle. boom started, there is a couple of comments and, the idea is that, practical consequence of LLMs, that, it works well for experienced developers, but for newcomers, it becomes a bit problematic because, LLMs generate some code, but you need to understand, is it okay or not, how to modify it. And it requires experience to work with it. And usually it generates something that's not really nice, or it's nice, but partly. and it means if we really follow the LLMs without any supervisory, It creates a legacy code quicker than people usually do. this legacy code will be problematic for next maintainability, the maintenance of it. Debugging and fixing this code. it means LLAMP is good for generating code, but this code has a higher effort on maintainability. And this is a problem that actually could be solved. And where I guess some researchers will try to solve because new code generation, it's nice, but maintainability of it, it's another important part because, it's a really big part of overall lifecycle of the project. This is an interesting outcome that I see even with my code. that's, here is the emerging thing. However, it's all my story right now about the usage of LLMs and things for DevTools. So thank you for your time and I hope it was interesting to listen.
...

Bohdan Snisar

Senior Software Engineer @ ex-Revolut

Bohdan Snisar's LinkedIn account



Join the community!

Learn for free, join the best tech learning community for a price of a pumpkin latte.

Annual
Monthly
Newsletter
$ 0 /mo

Event notifications, weekly newsletter

Delayed access to all content

Immediate access to Keynotes & Panels

Community
$ 8.34 /mo

Immediate access to all content

Courses, quizes & certificates

Community chats

Join the community (7 day free trial)