Code Smell 299 - Ahoana no ahafahanao mamaha ny fametrahana fitsapana be loatra

ny Maximiliano Contieri7m2025/05/10
Read on Terminal Reader

Lava loatra; Mamaky

Ny fametrahana be dia be izay ampiasain'ny ampahany ihany no mahatonga ny fitsapana ho sarotra kokoa ary sarotra kokoa ny mahatakatra.
featured image - Code Smell 299 - Ahoana no ahafahanao mamaha ny fametrahana fitsapana be loatra
Maximiliano Contieri HackerNoon profile picture

Rehefa ny fametrahana fitsapana dia lehibe kokoa noho ny fitsapana tena izy

TL;DR: Ny fametrahana be dia be izay ampiasain'ny ampahany ihany no mahatonga ny fitsapana ho sarotra kokoa ary sarotra kokoa ny mahatakatra.

TL;DR: Ny fametrahana be dia be izay ampiasain'ny ampahany ihany no mahatonga ny fitsapana ho sarotra kokoa ary sarotra kokoa ny mahatakatra.

Ny olana

  • Ny fifanarahana
  • Ny fahafantarana
  • Fandaniana fotoana amin'ny famonoana
  • Ny fifanarahana amin'ny fifanarahana
  • Ny fanandramana mifanohitra
  • Sarotra kokoa ny fikarakarana
  • Brittle fitsapana Suite
  • Mifandray amin'ny fitoviana
  • Ny fampiharana tsikelikely
  • Ny toe-javatra mampihomehy

Ny vahaolana

  1. Mamorona fomba fijery mifantoka amin'ny fampiharana
  2. Mampiasa fitaovana manokana amin'ny fanandramana
  3. Mamorona setup kely indrindra ianao
  4. Ny fametrahana ny fomba fanandramana orinasa

Ny famerenana ️

https://hackernoon.com/improving-the-code-one-line-at-a-time

https://maximilianocontieri.com/refactoring-011-replace-comments-with-tests

Ny fifanarahana

Rehefa manoratra fanadinana ianao, dia azonao atao ny mamorona fomba fametrahana lehibe izay manomboka ny zavatra samihafa.


Raha ny fanandramana iray ihany no mampiasa ireo zavatra ireo raha ny fanandramana hafa ihany no mampiasa subset kely, dia mamorona overhead tsy ilaina ianao.


Ity olana mahazatra ity dia mitranga rehefa manantena ianao fa mila fametrahana lehibe ny fitsapana amin'ny hoavy, na rehefa manohy manampy amin'ny fametrahana misy ianao raha tsy manamarina izay tena ilaina.


Ny fanandramana dia sarotra kokoa ny mahatakatra satria misy mifandray tsy misy dikany, ary mora kokoa amin'ny fanatanterahana satria manomboka ny zavatra tsy ampiasaina.

Tsindrio ny code.

Ny fahadisoana

public class TVSeriesTest {
  private MovieSeries theEthernaut;
  private List<Character> characters;
  private List<Episode> episodes;
  private User user;
  private UserPreferences preferences;
  private RatingSystem ratingSystem;
  private StreamingService streamingService;
  private List<Review> reviews;
  
  @BeforeEach
  public void setUp() {
    // Create a complex movie series with many characters
    characters = new ArrayList<>();
    characters.add(new Character("Juan Salvo", "Richard Darin"));
    characters.add(new Character("Helen", "Carla Peterson")); 
    characters.add(new Character("Favalli", "Cesar Troncoso")); 
    
    // Create episodes
    episodes = new ArrayList<>();
    episodes.add(
      new Episode("The Snow", 2025, 121));
    episodes.add(
      new Episode("The Hands Strikes Back", 2027, 124)); 
    
    // Create user with preferences
    preferences = new UserPreferences();
    preferences.setPreferredGenre("Science Fiction");
    preferences.setPreferredLanguage("English");
    preferences.setSubtitlesEnabled(true);
    user = new User("JohnDoe", "john@example.com", preferences);
    
    // Create rating system with reviews
    ratingSystem = new RatingSystem(10);
    reviews = new ArrayList<>();
    reviews.add(
      new Review(user, "The Snow", 9, "Classic!"));
    reviews.add(
      new Review(user, "The Hands Strikes Back", 10, "Best one!"));
    ratingSystem.addReviews(reviews);
    
    // Create streaming service
    streamingService = new StreamingService("Netflix");
    streamingService.addMovieSeries("The Eternaut");
    
    // Finally create the movie series with all components
    theEthernaut = 
      new TVSeries("The Ethernaut", characters, episodes);
    theEthernaut.setRatingSystem(ratingSystem);
    theEthernaut.setAvailableOn(streamingService);
    
    // This method is too long. That is another smell
  }
  
  @Test
  public void testTVSeriesRecommendation() {
    // This test uses almost everything from the setup
    RecommendationEngine engine = new RecommendationEngine();
    List<Episode> recommended =
      engine.recommendations(user, theEternaut);
    
    assertEquals(2, recommended.size());
    assertEquals("The Hands Strikes Back",
      recommended.get(0).title());
    // You are testing the recomendation Engine
    // This is not this object's responsibility
  }
  
  @Test
  public void testEpisodeCount() {
    // This test only needs the episodes count
    assertEquals(2, theEthernaut.episodes().size());
  }
  
  @Test
  public void testCharacterLookup() {
    // This test only needs the characters
    // And not the rest of the setup
    Character juan = theEternaut.findCharacterByName("Juan Salvo");
    assertNotNull(juan);
    assertEquals("Juan Salvo", juan.actor());
  }
}

Ny marina

public class TVSeriesTest {
  // No shared setup
  
  @Test
  public void testRecommendation() {
    // Create only what's needed for this specific test
    // And move this test with the behavior
    TVSeries theEternaut = createTheEternautSeries();
    User homer = createUserWithPreferences();
    addReviewsForUser(theEternaut, homer);
    
    RecommendationEngine engine = new RecommendationEngine();
    List<Episode> recommended =
      engine.recommendations(homer, theEternaut);
    
    assertEquals(2, recommended.size());
    assertEquals("The Hands Strikes Back", 
      recommended.get(0).title());
  }
  
  @Test
  public void testEpisodeCount() {
    // Only create what's needed - just the episodes
    TVSeries theEternaut = new TVSeries("The Ethernaut");
    theEternaut.addEpisode(
      new Episode("The Snow", 2025, 121));
    theEternaut.addEpisode(
      new Episode("The Hands Strikes Back", 2027, 124)); 
    
    assertEquals(2, theEternaut.episodes().size());
  }
  
  @Test
  public void testCharacterLookup() {
    // Only create what's needed - just the characters
    TVSeries theEternaut = new TVSeries("The Eternaut");
    theEternaut.addCharacter(
      new Character("Juan Salvo", "Richard Darin"));
    theEternaut.addCharacter(
      new Character("Helen", "Carla Peterson")); 
    
    Character juan = theEternaut.findCharacterByName("Juan Salvo");
    assertNotNull(juan);
    assertEquals("Richard Darin", juan.actor());
  }
  
  // Helper methods for specific test setup needs
  private TVSeries createTheEternautTVSeries() {
    TVSeries series = new TVSeries("The Eternaut");
    series.addEpisode(
      new Episode("The Snow", 2025, 121));
    series.addEpisode(
      new Episode("The Hands Strikes Back", 2027, 124)); 
    return series;
  }
  
  private User createUserWithPreferences() {
    UserPreferences preferences = new UserPreferences();
    preferences.setPreferredGenre("Science Fiction");
    preferences.setPreferredLanguage("English");
    return new User("JohnDoe", "john@example.com", preferences);
  }
  
  private void addReviewsForUser(TVSeries series, User user) {
    RatingSystem ratingSystem = new RatingSystem(10);
    ratingSystem.addReview(
      new Review(user, "The Snow", 9, "Classic!"));
    ratingSystem.addReview(
      new Review(user, "The Hands Strikes Back", 10, "Best one!"));
    series.setRatingSystem(ratingSystem);
  }
}

Ny famantarana

  • [x] Ny fametrahana antsasaky ny automatique

Azonao atao ny mahita io fahatsapana io amin'ny alalan'ny mampitaha ny zavatra napetraka ao amin'ny fomba fametrahana amin'ny zavatra ampiasaina amin'ny fitsapana tsirairay.


Jereo ny fanandramana izay mampiasa latsaky ny 50% amin'ny zavatra voasoratra.


Ny fitaovana fametrahana code dia afaka manampy amin'ny famantarana ny zavatra tsy ampiasaina amin'ny fametrahana izay ampahany amin'ny fametrahana tsy vita amin'ny fitsapana sasany.


Raha toa ianao ka manoratra fepetra ao amin'ny fametrahana mba hamoronana toe-javatra samihafa, dia famantarana mazava fa mila fametrahana manokana amin'ny fitsapana ianao.

Ny taona ️

  • Ny fitsapana

Ny ambaratonga

  • [X] Ny fifanarahana

Nahoana no tena zava-dehibe ny fihaonambe ️

Ny fitsapana tsirairay dia tokony hampifanaraka ny toe-javatra manokana amin'ny tontolo tena izy.


Ny fametrahana be dia be dia be dia be dia be dia be dia be dia be no manimba ity fahamarinana ity, mahatonga azy io ho sarotra ny mahita izay miasa amin'ny fitsapana ary mampitombo ny mety ho fahadisoana.


Ny fandringananaNy fifanarahanamampidi-doza kokoa ny fanandramana satria tsy azonao atao ny mahatakatra izay ampahany amin'ny fametrahana dia manan-danja ho an'ny fanandramana ary izay ihany no feo.


Rehefa tsy nahomby ny fitsapana, dia handany fotoana bebe kokoa ianao amin'ny fikarohana ny fitoviana izay mety tsy misy ifandraisany amin'ny tsy fahombiazana.


Ny fitsapana dia mahatsiravina kokoa satria ny fanovana ny zavatra tsy ampiasaina dia mbola afaka mandika ny fitsapana raha mandray anjara amin'ny dingana fametrahana ireo zavatra ireo.

Ny taranaka

Ny generator code AI dia matetika mamorona io fahatsapana io rehefa mamorona fitaovana fitsapana feno izay miezaka manakana ny toe-javatra rehetra azo atao.


Manolotra tombontsoa amin'ny tanteraka izy ireo, izay mitarika amin'ny fomba fametrahana be dia be izay manomboka ny zavatra maro noho izay ilaina amin'ny fanandramana tsirairay.

Ny famantarana

Ny AI dia afaka mahita ity fahatsapana ity amin'ny alalan'ny torolàlana tsotra toy ny "Optimise my test setup only to include what is needed for each test."


Ny fitaovana AI maoderina dia afaka mampitaha ny fametrahana code amin'ny fampiasana ny fomba fitsapana ary manoro hevitra fanamafisana tanjona, manavaka ny fametrahana mizara amin'ny fametrahana manokana amin'ny fitsapana.

Manao izany ianao!

Tsarovy: Manao fahadisoana maro ny mpanampy AI

Torohevitra voatendry: Manafoana ny fitsapana sy ny fametrahana

Torohevitra voatendry: Manafoana ny fitsapana sy ny fametrahana

Without Proper Instructions

With Specific Instructions

ChatGPT

ChatGPT

Claude

Claude

Perplexity

Perplexity

Copilot

Copilot

Gemini

Gemini

DeepSeek

DeepSeek

Meta AI

Meta AI

Grok

Grok

Qwen

Qwen

Ny chat

Ny chat

Ny renivohiny

Ny renivohiny

Ny fahadisoana

Ny fahadisoana

Ny mpamily

Ny mpamily

Ny Gemini

Ny Gemini

Ny fitadiavana

Ny fitadiavana

Ny tanjona

Ny tanjona

Ary ny

Ary ny

Ny

Ny

Ny fanapahan-kevitra

Ny fametrahana fanandramana be loatra izay manomboka ny zavatra ilaina amin'ny fanandramana vitsivitsy ihany no mahatonga ny Test Suite sarotra kokoa hahatakatra sy hitazonana.

Rehefa mamorona fametrahana mifantoka izay ahitana fotsiny izay ilain'ny fitsapana tsirairay ianao, dia manatsara ny fahamarinana, ny haingana ary ny azo antoka amin'ny fitsapana.

Tsarovy fa ny fanandramana dia mirakitra ny fitondran-tena amin'ny alalan'ny ohatra syManova ny fanehoan-kevitra.


Ny fifanarahana tsy misy dikany be dia be dia be no mahatonga ireo ohatra ireo ho tsy azo heverina. Ny fitsapana madio dia milaza tantara mazava tsy misy fisalasalana tsy ilaina.

Mifandraisa amin'izy ireo

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xi-sit35t1

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxiii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xli

Fampahalalana misimisy kokoa

Ny tsy fisian'ny

Ny voankazo dia ny tenakoNy hevitra.

Ny trosa

Sary avyNy Tompo SimonaNyTsy misy


Raha mila mamorona rafitra be dia be ianao alohan'ny hanandrana, angamba ianao no manandrana amin'ny lafiny maro

Raha mila mamorona rafitra be dia be ianao alohan'ny hanandrana, angamba ianao no manandrana amin'ny lafiny maro

Ny ranomasina


Ity lahatsoratra ity dia ampahany amin'ny Series CodeSmell.


L O A D I N G
. . . comments & more!

About Author

Maximiliano Contieri HackerNoon profile picture
Maximiliano Contieri@mcsee
I’m a sr software engineer specialized in Clean Code, Design and TDD Book "Clean Code Cookbook" 500+ articles written

HANG TAGS

ITY ARTICLE ITY NO NARESAKA TAMIN'NY...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks