エンドロールのようなJavaプログラム

Java Tipsではないのでご注意を。
今までの開発の現場で、エンドロールJavaプログラムに遭遇することが何度かありました。
エンドロールJavaプログラムというのは私が勝手につけた名前です(; ̄ー ̄
イメージ的には、こんな感じのプログラムです。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;


public class CreditTitle {

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        String dicaprio ="";
        String kWatanabe ="";
        
        
        /////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////
        //100行目
        
        if(aaaa.equals("")){
        /////////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////
        //200行目
            for(int i=0;i>bbb.length;i++){
                /////////////////////////////////////////////////////
                /////////////////////////////////////////////////////
                /////////////////////////////////////////////////////
                /////////////////////////////////////////////////////
        //300行目
                switch(ccc){
                    case 1:
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
        //400行目
                        break;
                    case 2:
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
        //500行目
                        break;
                    case 3:
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
        //600行目
                        break;
                    case 4:
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
        //700行目
                        break;
                    case 5:
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
        //800行目
                        break;
                    case 6:
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
        //900行目
                        break;
                    case 7:
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
                        /////////////////////////////////////////////
        //1000行目
            }
            /////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////
        }else{
            /////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////
        }
        return null;
        
    }
    
}


こんな感じのプログラムって見たことないですか?(省略しているのでで、実際の冗長さがちょっと伝わりにくいですが)
Javaに限ったものではないかもしれませんが。

まさにエンドロールのごとく、ひたすら縦長に上から下へと流れていきます。
そして1つのメソッドで1000行を突破することもあります。とにかく縦長なのが特徴です。

このようなプログラム、何が問題なのかはあえて述べるまでもないのですが、のが、分岐(if,switch等)や繰り返し(for)がここに入ってくるため、ifから500行ぐらい下へ行かないとその対のelse が見つからなかったりすることもあったり。。

そしてオブジェクト指向であるJavaの性質を完全に無視しています。

非常に保守がしにくく、バグが埋め込まれ易いです。

残念ながら、今まで現場でこのようなプログラムを見たことは1度だけではなく、何度かありました。

こういったプログラムが生まれる原因として、それまで他言語(COBOL等)を使っていて、Javaをよく学習せずに使ってしまっているケースが多いのではないかと想像しています。処理が動けば良いということで、先のことをあまり考えずにひたすら上から下へ処理を書いてしまっているのではと。作った人でないのでなんとも言えませんが。

このようなプログラムへの対策は、コード規約の整備が一つの手段になるのではないかと思います。
今思うと、こういったプログラムが生まれてしまっていた現場は、比較的コードの記述等のルール、規則が緩いという特徴がありました。そのため自由度が高く技術力に差が出てしまい、どうしてもこういったプログラムが発生してしまうことになります。
技術研修・教育等を行い、こういったプログラムを作らないように指導するのが良いのですが、なかなかそれが難しい場合もあると思います。規則等で強制してしまうというのは一つの手段だと思います。

ソースレビューを増やすのも一つの対策になると思います。

その開発を行う組織全体で品質向上の意識を強く持って取り組んいかないとこういったソースが生まれてしまうのではないかと思います。

ただ、プログラムは他の人も触り共有するものなので、自分のことだけ考えずに他者のこと、周囲のことを考えて物を作っていけばこういったプログラムは生まれないのかなと。自戒の意味も込めて。。