• 2017-2018-1 20179215 《构建之法》第一章总结


    《构建之法》第一章总结

    1.程序=数据结构+算法、 软件=程序+软件工程

     客户们对程序员的需求从一个简单的程序,扩展到一个满足各种功能的应用软件,再扩展到一个能保证维修的软件服务程序,在这里指的是源程序,就是一行行的代码。仔细看过去,它们的确是建立在数据结构上的一些算法程序还要对数据进行操作,这些数据有些是静态的(例如软件的图标、提示信息),有些是动态的(例如程序生成的随机数字、程序通过网络下载的数据、用户的文字或语音输入等)但是光有代码和静态数据还是不行,工程师要把它们构建为机器能懂的可执行代码。构建不仅仅是cc和link命令一个复杂的软件不但要有合理的软件架构(Software Architecture)、软件设计与实现(Software Design, Implementation and Debug),还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数,等等。这些都是软件构建的过程。

     源代码管理(Source Code Control)的问题—有时候也叫配置管理(Software Configuration Management)有一系列的工具和程序来保证程序的正确性,这些工具流程和程序本身应该更正确,才能保证别的软件的质量。这就是质量保障(Quality Assurance),具体的验证过程叫做软件测试(Testing)软件团队要从需求分析(Re-quirement Analysis)开始,把合适的需求梳理出来,然后逐步展开后续工作,如设计(软件架构)、实现(写数据结构和算法)、测试,到最后发布软件软件团队的人员也会流动,新的成员要尽快读懂已有的程序,了解程序的设计,这叫程序理解(Pro-gramComprehension)软件在运行过程中还会出这样那样的问题,也许我们要时不时给软件打一个补丁,或者维护众多的服务器,团队的新老成员要一起工作,修复各种各样的问题,这叫软件维护(Software Maintenance),或者服务运营(Service Operation)。

     这一系列过程就是软件的生命周期(Software Life Cycle,SLC),有人得负责软件项目的管理(Project Management)一个好的软件,即使功能和同类软件区别不大,但是会让人感觉到非常好用。这就是软件的用户体验(User Experience)。用户体验和数据结构、算法没有直接的关系,但是很多非常成功的软件就赢在这个方面上面这些和软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容,是软件工程的核心部分。广义上的软件工程也包括用户体验、用户界面设计(User Interface Design)等。所以,一个推论是:软件 = 程序 + 软件工程。一个扩展的推论是:软件企业 = 软件 + 商业模式。程序(算法、数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个软件企业的成败。软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。

    2.软件开发、软件工程

     2.1软件开发的不同阶段

     2.2软件工程

     软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

     人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”。软件开发流程的目的是为了提高软件开发、运营、维护的效率,并提高软件的质量、用户满意度、可靠性和软件的可维护性。

    软件是可以运行在计算机及电子设备中的指令和数据的有序集合,软件有各种形式:

    - 系统软件:操作系统、设备驱动程序、工具软件等

    - 应用软件:用户使用它们来完成工作,从管理核电厂到写文章,或者是通信、游戏、浏览网页、播放视频等

    - 恶意软件:软件病毒等软件

    1. 复杂性(Complexity)

     软件可以说是人类创造的最复杂的系统类型,软件的各个模块之间有各种显性或隐性的依赖关系,随着系统的成长和模块的增多,这些关系的数量往往以几何级数的速度增长

    2. 不可见性(Invisibility)

     工程师是“看”不到自己的源代码如何具体地在用户的机器上被执行的

    3. 易变性(Changeability)

     人们自然地期待软件能在下面两种情况下“改变”: a) 让软件做新的事情;b) 让软件适应新的硬件

    4. 服从性(Conformity)

     软件不能独立存在,它总是要运行在硬件上面,它要服从系统中其他组成部分的要求,它还要服从用户的要求、行业系统的要求

    5. 非连续性(Discontinuity)

     输入上很小的变化,会引起输出上极大的变化

    3.简单的四则运算

     根据指定随机出题,小学的四则运算。使用rand()函数及srand()函数,查了下相关使用方法:rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。 rand()返回一随机数值的范围在0至RAND_ MAX 间。RAND_ MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。用户未设定随机数种子时,系统默认的随机数种子为1。rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它(下面这段代码测试了下两者的不同):

    #include <iostream>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    int main()
    {
    	int i;
    	//srand((unsigned)time(NULL)); //初始化随机数种子
    	for (i=0; i<10; i++)      //产生10个随机数
    	{
    		cout<<rand()<<" ";
    	}
    	cout<<endl;
    	return 0;
    }
    

    四则运算代码:

    include <stdio.h>
    include <stdlib.h>
    include <time.h>
    include <math.h>
    
    int main()
    {
         int i=0;
         int n=0;
         int x=0;
         int type;
         char flag;
         int left, right;
         float result;
         printf("请输入要出的题目数量
    ");
         scanf("%d",&n);
         srand(unsigned(time(NULL)));
    		while(x<n)
    		{
       			 type = rand() % 4;
        		left = rand() % 100;
        		right = rand() % 100;
        		switch(type)
        		{
       				 case 0:
           				 printf("%d + %d = ?
    ", left, right);
           				 break;
       				 case 1:
            			 printf("%d - %d = ?
    ", left, right);
           				 break;
        			 case 2:
           				 printf("%d * %d = ?
    ", left, right);
           				 break;
       			     case 3:
            			 printf("%d / %d = ?
    ", left, right);
            			 break;
        		}
    
        		i++;
       			 while(i>=n)
       				 {
            			printf("一共 %d 题
    ",i); 
           			    printf("继续?[Y/N]
    ");
            			fflush(stdin);
            			scanf("%c",&flag);
            			if(flag=='Y'||flag=='y')
            			{
                			printf("请输入要出的题目数量
    ");
                			scanf("%d",&n);
                			i=0;
               			    break;
             			}
            	printf("谢谢使用!
    ");
            	fflush(stdin);
            	getchar();
            	return 0;
        }
      }
    }
    

    结果如图:

          

  • 相关阅读:
    sql存储过程简单教程
    深入揭示Web 2.0核心技术——混搭
    Struts 2创始人Patrick Lightbody看《精通Struts 2:Web 2.0开发实战 》
    深入全面阐释Struts 2的方方面面
    设计原本如此简单
    掌握ASP.NET技术之捷径
    Struts 2创始人Patrick Lightbody作序推荐
    Struts 2权威著作
    Amazon超级畅销书之《C#与.NET 3.5高级程序设计(第4版)》
    Web开发领域最热门的话题之混搭
  • 原文地址:https://www.cnblogs.com/yl-930/p/7966245.html
Copyright © 2020-2023  润新知