《构建之法(第三版)》第一章

20179202杨晓桐 20179202杨晓桐     2022-10-03     701

关键词:

**1.软件=程序(程序=算法+数据结构)+软件工程 **

一个复杂的软件不但要有合理的软件架构、软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数等。这些都是软件的构建过程。

和软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)用关的内容是软件工程的核心部分,由此推论软件企业 = 软件+商业模式

程序(算法、数据结构)是基本功(即使算法别人都已经实现只需调用即可,数据结构和算法还是要掌握,对代码的改进很有帮助。看到一个比喻:写程序和开车一样,经验可以起到很大作用,但如果不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车),但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个企业的成败。

2.软件工程

软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。包括软件需求分析、软件设计、软件构建、软件测试和软件维护领域。

软件开发具有复杂性、不可见性(没办法看到机器内部怎么运行的)、易变性(正确修改软件很困难)、服从性(服从硬件,服从用户需求)、非连续性(输入很小的变化,会引起输出上极大的变化)。

计算机科学中的理论研究部分,大多可以从形式上证明,与数学、离散数学、数理逻辑密切相关;计算机科学中与时间相关的部分,都和数据以及其他学科发生关系;软件工程则和人的行为、现实社会社会的需求息息相关。

计算机理论的进展会帮助软件工程(例如对程序正确性的分析);软件工程的进展(更好的工具,更多的应用领域)会帮助计算机科学家更有效地进行实验和探索。

软件工程的目标是创造“足够好”的软件,在时间、成本等多种约束条件下决定一个软件在什么时候能“足够好”,可以发布。

3.简单的四则运算

随机出30道题,因为是二年级,所以加法不过百,减法不变负,乘数除数不过十。提到随机数我就想到了rand(),去搜了一下该函数产生的数的范围,rand()%m可以产生从0~m-1,所以现在想产生100以内的数,就应该用rand()%100。但是在实践中虽然使用了rand(),每次生成的随机数都是一样的,查后知道了需要提供一个种子,相同的种子会产生相同的随机数,因此在rand()前添加srand(time(NULL))就可以了。实践代码如下:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int main ( int argc, char *argv[] )
{
	int Questions();
	Questions();
	return 0;
}				
int Questions()
{
	srand(time(NULL));
    int t=0; 
    for (int i = 0; i < 30; i++) {
	printf("%d.",i+1);
    int x=rand()%100;        
    int y=rand()%100;    
    int z=rand()%4;
    if(z==0) {
        x=x%10;
        y=y%10;//个位数相乘
        printf("%d×%d=\n",x,y) ; 
	}
	if(z==1) {
		y=(y%10)+1;//除数不能为0
                printf("%d÷%d=\n",x,y) ; 
	}
	if(z==2) {
		if((x+y)>100) {        
			x=x/2;
			y=y/2;//和不大于100
	}   
    printf("%d+%d=\n",x,y) ;      
    }
    if(z==3) {
        if(x<y){
			t=y;
            y=x;
            x=t;//差不能是负数
		}
    printf("%d-%d=\n",x,y) ; 
    } 
	}  
}

如果支持真分数(分子小于分母)四则运算,代码改为以下:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int main ( int argc, char *argv[] )
{
	int Questions();
	Questions();
	return 0;
}			
int Questions()
{
	srand(time(NULL));
    int t; 
    for (int i = 0; i < 30; i++) {
	printf("%d.",i+1);
    int x1=rand()%100; 
    int x2=rand()%100;       
    int y1=rand()%100; 
    int y2=rand()%100;
    if(x2<=x1){
            t=x2;
            x2=x1;
            x1=t;
            if(x1==x2) {
                x1=x1-1;//保证分子比分母小
            }
        }
    if(y2<=y1){
            t=y2;
            y2=y1;
            y1=t;
            if(y1==y2 ) {
                y1=y1-1;
            }
        }
    int z=rand()%4;
    if(z==0) {
        printf("%d/%d × %d/%d=\n",x1,x2,y1,y2) ; 
	}
	if(z==1) {
        x2=(x2%10)+1;    
		y2=(y2%10)+1;
        printf("%d/%d ÷ %d/%d=\n",x1,x2,y1,y2) ; 
	}
	if(z==2) {
        printf("%d/%d + %d/%d=\n",x1,x2,y1,y2) ;
	}   
    if(z==3) {
        if(x1/x2>y1/y2) {
			t=x1;
            x1=y1;
            y1=t;
            t=x2;
            x2=y2;
			y2=t;
		}
    printf("%d/%d - %d/%d=\n",x1,x2,y1,y2) ;
    } 
	}  
}

《构建之法(第三版)》第二章

第二章:个人技术和流程书本内容回顾概述一个团队需要一定的流程来管理开发活动,每个工程师在软件生命周期所做的工作也应该有一个流程,在这一章里会介绍PS(PersonalSoftwarePro-cess,个人软件开发流程)。单元测试单元测试... 查看详情

《构建之法(第三版)》速读提问

《构建之法(第三版)》速读提问1、什么是软件工程软件工程学科诞生后,人们为软件工程给出了不同的定义,例如最早的定义是由F.L.Bauer给出的,即“软件工程是为了经济地获得能够在实际机器上高效运行的、可靠的软件而... 查看详情

《构建之法(第三版)》第三章

3.1个人能力的衡量与发展1.软件开发流程不光指团队的流程,还包括个人开发流程。把每个人的工作有序地组织起来,就是团队的流程。“有序”,并不是“无争论”。每个人的工作质量直接影响最终软件的质量。2.初级软件工... 查看详情

《构建之法(第三版)》第二章

2.1单元测试1.软件的很多错误来源于程序员对模块功能的误解,疏忽或不了解模块的变化。单元的测试可以让自己负责的模块功能定义尽量明确,模块功能的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证。2... 查看详情

《构建之法》——软工学习进度

...量一个软件工程师 如何衡量一个软件工程师?这是《构建之法》第三章的核心问题。第一章讲述了团队的流程,第三章则是对第一章的具体描述,从笼统的团队具体到个人。软件开发流程不光指团队的流程,还包括了个人开... 查看详情

构建之法第一章

构建之法第一章本章为概论,主要讲解计算机科学的领域、软件工程和计算机科学的关系、软件的特性、软件工程的定义与组成部分等内容。一、软件:程序=数据结构+算法软件=程序+软件工程软件工程的核心部分:1、构建管理2... 查看详情

《构建之法》第一章术语及书中部分问题解答

...计与实现(SofewareDesign,ImplementationandDebug)    *软件构建    *源代码管理(SourceCodeControl)    *配置管理(SoftwareConfigura 查看详情

《构建之法(第三版)》第四章(代码片段)

4.1代码规范代码规范可以分为两个部分:代码风格规范:主要是文字上的规定代码设计规范:牵扯到程序设计,模块之间的关系,设计模式等方方面面的通用原则。4.2代码风格规范代码风格的原则是简明,易读,无二义性Tab键在... 查看详情

2018--20179215--《构建之法(第三版)》第四章两人合作

构建之法第四章读书笔记4.1代码规范代码规范可以分为两部分:代码风格规范—主要是文字上的规定代码设计规范—牵涉到程序设计、模块之间的关系、设计模式等方方面面的通用原则4.2代码风格规范代码风格的原则是:简明,... 查看详情

构建之法学习(第一章概论)

  初读邹欣老师的《构建之法》,却发现并没有像其它大多数软件工程教材一样偏重理论知识,而是大量引用实例,将实践与理论相结合,一改原本的空洞、乏味,反而更多的是趣味性。  通过对于第一章的自我学习,总结... 查看详情

《构建之法》第一章学习

《构建之法》第一章学习1、软件工程的定义软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。软件工程把这些... 查看详情

构建之法第一章

      程序=数据+算法;    软件=程序+软件工程;    软件企业=软件+商业模式。  软件工程一说在此区别于实际的代码,它更多的表示为一种管理思想,一种通过实践经验所积累的成熟模式。通... 查看详情

《构建之法》第一章读后感

...本科计算机专业二年级的学生,在老师的推荐下阅读了《构建之法》,这几天读了这本书的一部分,发表一下自己的感受,这本书让我对自己的专业有了更加深刻的了解。   在第一章中讲述了学生和老师的关系,老师... 查看详情

《构建之法》第一章读后感

...本科计算机专业二年级的学生,在老师的推荐下阅读了《构建之法》,这几天读了这本书的一部分,发表一下自己的感受,这本书让我对自己的专业有了更加深刻的了解。   在第一章中讲述了学生和老师的关系,老师... 查看详情

第一周-构建之法

《构建之法》第一章阅读笔记 本书第一章标题为“软件=程序+软件工程”,如标题所言,在开头就十分精炼地概述了“软件”的概念,这样哪怕读者是门外汉,这一部分对于他们来说也很浅显易懂好消化,至少不会一上来就... 查看详情

读构建之法第一章:概论

...序+软件工程软件企业=软件+商业模式工程师的宗旨是:我构建,故我在    程序在这里指的是源程序,就是一行行的代码,它们是建立在数据结构上的一些算法。程序对数据进行操作,工程师把它们构建为机器能懂... 查看详情

构建之法第一章概论

...迈向实用的最关键的一步,就是软件工程。1.概念1)软件构建:除了代码和静态数据,还有各种文件和数据来描述各个程序文件之间的依赖关系等;2)源代码管理/配置管理:保证代码的平台兼容性、配置兼容性等;3)质量保障... 查看详情

现代软件工程—构建之法》第一章中出现的计算机专业术语

现代软件工程—构建之法》第一章中出现的计算机专业术语1.软件2.程序3.软件工程4.二叉树5.遍历算法6.数据结构7.算法8.应用软件9.软件服务10.源程序11.软件架构12.软件设计与实现13.依赖关系14.编译参数15.链接参数16.构建17.源代码... 查看详情